octeon1p_iobus.c revision 1.5 1 1.5 simonb /* $NetBSD: octeon1p_iobus.c,v 1.5 2020/06/23 05:18:02 simonb Exp $ */
2 1.1 hikaru
3 1.1 hikaru /*
4 1.1 hikaru * Copyright (c) 2007 Internet Initiative Japan, Inc.
5 1.1 hikaru * All rights reserved.
6 1.1 hikaru *
7 1.1 hikaru * Redistribution and use in source and binary forms, with or without
8 1.1 hikaru * modification, are permitted provided that the following conditions
9 1.1 hikaru * are met:
10 1.1 hikaru * 1. Redistributions of source code must retain the above copyright
11 1.1 hikaru * notice, this list of conditions and the following disclaimer.
12 1.1 hikaru * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 hikaru * notice, this list of conditions and the following disclaimer in the
14 1.1 hikaru * documentation and/or other materials provided with the distribution.
15 1.1 hikaru *
16 1.1 hikaru * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 1.1 hikaru * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 1.1 hikaru * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 1.1 hikaru * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 1.1 hikaru * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 1.1 hikaru * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 1.1 hikaru * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 1.1 hikaru * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 1.1 hikaru * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 1.1 hikaru * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 1.1 hikaru * SUCH DAMAGE.
27 1.1 hikaru */
28 1.1 hikaru
29 1.1 hikaru /*
30 1.1 hikaru * Octeon I (CN30XX, CN31XX), Plus (CN50XX) I/O Bus devices
31 1.1 hikaru */
32 1.1 hikaru
33 1.1 hikaru #include <sys/cdefs.h>
34 1.5 simonb __KERNEL_RCSID(0, "$NetBSD: octeon1p_iobus.c,v 1.5 2020/06/23 05:18:02 simonb Exp $");
35 1.1 hikaru
36 1.1 hikaru #include <sys/param.h>
37 1.1 hikaru #include <sys/systm.h>
38 1.1 hikaru
39 1.1 hikaru #include <sys/bus.h>
40 1.1 hikaru
41 1.1 hikaru #include <mips/cavium/include/iobusvar.h>
42 1.1 hikaru
43 1.1 hikaru /* ---- UART */
44 1.1 hikaru #include <mips/cavium/dev/octeon_uartreg.h>
45 1.4 simonb static const struct iobus_unit iobus_units_octuart[] = {
46 1.1 hikaru {
47 1.1 hikaru .addr = MIO_UART0_BASE
48 1.1 hikaru },
49 1.1 hikaru {
50 1.1 hikaru .addr = MIO_UART1_BASE
51 1.1 hikaru }
52 1.1 hikaru };
53 1.1 hikaru
54 1.4 simonb static const struct iobus_dev iobus_dev_octuart = {
55 1.1 hikaru .name = "com",
56 1.1 hikaru .nunits = 2,
57 1.4 simonb .units = iobus_units_octuart
58 1.1 hikaru };
59 1.1 hikaru
60 1.1 hikaru /* ---- RNM */
61 1.1 hikaru #include <mips/cavium/dev/octeon_rnmreg.h>
62 1.4 simonb static const struct iobus_unit iobus_units_octrnm[] = {
63 1.1 hikaru {
64 1.1 hikaru .addr = RNM_BASE
65 1.1 hikaru }
66 1.1 hikaru };
67 1.1 hikaru
68 1.4 simonb static const struct iobus_dev iobus_dev_octrnm = {
69 1.3 simonb .name = "octrnm",
70 1.1 hikaru .nunits = RNM_NUNITS,
71 1.4 simonb .units = iobus_units_octrnm
72 1.1 hikaru };
73 1.1 hikaru
74 1.1 hikaru /* ---- TWSI */
75 1.1 hikaru #include <mips/cavium/dev/octeon_twsireg.h>
76 1.4 simonb static const struct iobus_unit iobus_units_octtwsi[] = {
77 1.1 hikaru {
78 1.1 hikaru .addr = MIO_TWS_BASE_0
79 1.1 hikaru }
80 1.1 hikaru };
81 1.1 hikaru
82 1.4 simonb static const struct iobus_dev iobus_dev_octtwsi = {
83 1.3 simonb .name = "octtwsi",
84 1.1 hikaru .nunits = MIO_TWS_NUNITS,
85 1.4 simonb .units = iobus_units_octtwsi
86 1.1 hikaru };
87 1.1 hikaru
88 1.1 hikaru /* ---- MPI/SPI */
89 1.1 hikaru #include <mips/cavium/dev/octeon_mpireg.h>
90 1.4 simonb static const struct iobus_unit iobus_units_octmpi[] = {
91 1.1 hikaru {
92 1.1 hikaru .addr = MPI_BASE
93 1.1 hikaru }
94 1.1 hikaru };
95 1.1 hikaru
96 1.4 simonb static const struct iobus_dev iobus_dev_octmpi = {
97 1.3 simonb .name = "octmpi",
98 1.1 hikaru .nunits = MPI_NUNITS,
99 1.4 simonb .units = iobus_units_octmpi
100 1.1 hikaru };
101 1.1 hikaru
102 1.5 simonb /* ---- SMI */
103 1.5 simonb #include <mips/cavium/dev/octeon_smireg.h>
104 1.5 simonb static const struct iobus_unit iobus_units_octsmi[] = {
105 1.5 simonb {
106 1.5 simonb .addr = SMI_BASE
107 1.5 simonb }
108 1.5 simonb };
109 1.5 simonb
110 1.5 simonb static const struct iobus_dev iobus_dev_octsmi = {
111 1.5 simonb .name = "octsmi",
112 1.5 simonb .nunits = SMI_NUNITS,
113 1.5 simonb .units = iobus_units_octsmi
114 1.5 simonb };
115 1.5 simonb
116 1.5 simonb /* ---- PIP */
117 1.5 simonb #include <mips/cavium/dev/octeon_pipreg.h>
118 1.5 simonb static const struct iobus_unit iobus_units_octpip[] = {
119 1.1 hikaru {
120 1.5 simonb .addr = PIP_BASE
121 1.1 hikaru }
122 1.1 hikaru };
123 1.1 hikaru
124 1.5 simonb static const struct iobus_dev iobus_dev_octpip = {
125 1.5 simonb .name = "octpip",
126 1.5 simonb .nunits = 1,
127 1.5 simonb .units = iobus_units_octpip
128 1.1 hikaru };
129 1.1 hikaru
130 1.1 hikaru
131 1.1 hikaru /* ---- USBN */
132 1.1 hikaru #include <mips/cavium/dev/octeon_usbnreg.h>
133 1.4 simonb static const struct iobus_unit iobus_units_octusbn[] = {
134 1.1 hikaru {
135 1.1 hikaru .addr = USBN_BASE
136 1.1 hikaru }
137 1.1 hikaru };
138 1.1 hikaru
139 1.4 simonb static const struct iobus_dev iobus_dev_octusbn = {
140 1.2 hikaru .name = "dwctwo",
141 1.1 hikaru .nunits = USBN_NUNITS,
142 1.4 simonb .units = iobus_units_octusbn
143 1.1 hikaru };
144 1.1 hikaru
145 1.1 hikaru /* ---- global */
146 1.1 hikaru
147 1.1 hikaru const struct iobus_dev * const iobus_devs[] = {
148 1.4 simonb &iobus_dev_octuart,
149 1.4 simonb &iobus_dev_octrnm,
150 1.4 simonb &iobus_dev_octtwsi,
151 1.4 simonb &iobus_dev_octmpi,
152 1.5 simonb &iobus_dev_octsmi,
153 1.5 simonb &iobus_dev_octpip,
154 1.4 simonb &iobus_dev_octusbn,
155 1.1 hikaru };
156 1.1 hikaru
157 1.1 hikaru const size_t iobus_ndevs = __arraycount(iobus_devs);
158