.. | .. |
---|
45 | 45 | |
---|
46 | 46 | #ifndef __ASSEMBLY__ |
---|
47 | 47 | |
---|
48 | | -/* |
---|
49 | | - * All accesses to bridge hardware registers must be done |
---|
50 | | - * using 32-bit loads and stores. |
---|
51 | | - */ |
---|
52 | | -typedef u32 bridgereg_t; |
---|
| 48 | +#define ATE_V 0x01 |
---|
| 49 | +#define ATE_CO 0x02 |
---|
| 50 | +#define ATE_PREC 0x04 |
---|
| 51 | +#define ATE_PREF 0x08 |
---|
| 52 | +#define ATE_BAR 0x10 |
---|
53 | 53 | |
---|
54 | | -typedef u64 bridge_ate_t; |
---|
| 54 | +#define ATE_PFNSHIFT 12 |
---|
| 55 | +#define ATE_TIDSHIFT 8 |
---|
| 56 | +#define ATE_RMFSHIFT 48 |
---|
55 | 57 | |
---|
56 | | -/* pointers to bridge ATEs |
---|
57 | | - * are always "pointer to volatile" |
---|
58 | | - */ |
---|
59 | | -typedef volatile bridge_ate_t *bridge_ate_p; |
---|
| 58 | +#define mkate(xaddr, xid, attr) (((xaddr) & 0x0000fffffffff000ULL) | \ |
---|
| 59 | + ((xid)<<ATE_TIDSHIFT) | \ |
---|
| 60 | + (attr)) |
---|
| 61 | + |
---|
| 62 | +#define BRIDGE_INTERNAL_ATES 128 |
---|
60 | 63 | |
---|
61 | 64 | /* |
---|
62 | 65 | * It is generally preferred that hardware registers on the bridge |
---|
.. | .. |
---|
65 | 68 | * Generated from Bridge spec dated 04oct95 |
---|
66 | 69 | */ |
---|
67 | 70 | |
---|
68 | | -typedef volatile struct bridge_s { |
---|
| 71 | +struct bridge_regs { |
---|
69 | 72 | /* Local Registers 0x000000-0x00FFFF */ |
---|
70 | 73 | |
---|
71 | 74 | /* standard widget configuration 0x000000-0x000057 */ |
---|
.. | .. |
---|
86 | 89 | #define b_wid_tflush b_widget.w_tflush |
---|
87 | 90 | |
---|
88 | 91 | /* bridge-specific widget configuration 0x000058-0x00007F */ |
---|
89 | | - bridgereg_t _pad_000058; |
---|
90 | | - bridgereg_t b_wid_aux_err; /* 0x00005C */ |
---|
91 | | - bridgereg_t _pad_000060; |
---|
92 | | - bridgereg_t b_wid_resp_upper; /* 0x000064 */ |
---|
93 | | - bridgereg_t _pad_000068; |
---|
94 | | - bridgereg_t b_wid_resp_lower; /* 0x00006C */ |
---|
95 | | - bridgereg_t _pad_000070; |
---|
96 | | - bridgereg_t b_wid_tst_pin_ctrl; /* 0x000074 */ |
---|
97 | | - bridgereg_t _pad_000078[2]; |
---|
| 92 | + u32 _pad_000058; |
---|
| 93 | + u32 b_wid_aux_err; /* 0x00005C */ |
---|
| 94 | + u32 _pad_000060; |
---|
| 95 | + u32 b_wid_resp_upper; /* 0x000064 */ |
---|
| 96 | + u32 _pad_000068; |
---|
| 97 | + u32 b_wid_resp_lower; /* 0x00006C */ |
---|
| 98 | + u32 _pad_000070; |
---|
| 99 | + u32 b_wid_tst_pin_ctrl; /* 0x000074 */ |
---|
| 100 | + u32 _pad_000078[2]; |
---|
98 | 101 | |
---|
99 | 102 | /* PMU & Map 0x000080-0x00008F */ |
---|
100 | | - bridgereg_t _pad_000080; |
---|
101 | | - bridgereg_t b_dir_map; /* 0x000084 */ |
---|
102 | | - bridgereg_t _pad_000088[2]; |
---|
| 103 | + u32 _pad_000080; |
---|
| 104 | + u32 b_dir_map; /* 0x000084 */ |
---|
| 105 | + u32 _pad_000088[2]; |
---|
103 | 106 | |
---|
104 | 107 | /* SSRAM 0x000090-0x00009F */ |
---|
105 | | - bridgereg_t _pad_000090; |
---|
106 | | - bridgereg_t b_ram_perr; /* 0x000094 */ |
---|
107 | | - bridgereg_t _pad_000098[2]; |
---|
| 108 | + u32 _pad_000090; |
---|
| 109 | + u32 b_ram_perr; /* 0x000094 */ |
---|
| 110 | + u32 _pad_000098[2]; |
---|
108 | 111 | |
---|
109 | 112 | /* Arbitration 0x0000A0-0x0000AF */ |
---|
110 | | - bridgereg_t _pad_0000A0; |
---|
111 | | - bridgereg_t b_arb; /* 0x0000A4 */ |
---|
112 | | - bridgereg_t _pad_0000A8[2]; |
---|
| 113 | + u32 _pad_0000A0; |
---|
| 114 | + u32 b_arb; /* 0x0000A4 */ |
---|
| 115 | + u32 _pad_0000A8[2]; |
---|
113 | 116 | |
---|
114 | 117 | /* Number In A Can 0x0000B0-0x0000BF */ |
---|
115 | | - bridgereg_t _pad_0000B0; |
---|
116 | | - bridgereg_t b_nic; /* 0x0000B4 */ |
---|
117 | | - bridgereg_t _pad_0000B8[2]; |
---|
| 118 | + u32 _pad_0000B0; |
---|
| 119 | + u32 b_nic; /* 0x0000B4 */ |
---|
| 120 | + u32 _pad_0000B8[2]; |
---|
118 | 121 | |
---|
119 | 122 | /* PCI/GIO 0x0000C0-0x0000FF */ |
---|
120 | | - bridgereg_t _pad_0000C0; |
---|
121 | | - bridgereg_t b_bus_timeout; /* 0x0000C4 */ |
---|
| 123 | + u32 _pad_0000C0; |
---|
| 124 | + u32 b_bus_timeout; /* 0x0000C4 */ |
---|
122 | 125 | #define b_pci_bus_timeout b_bus_timeout |
---|
123 | 126 | |
---|
124 | | - bridgereg_t _pad_0000C8; |
---|
125 | | - bridgereg_t b_pci_cfg; /* 0x0000CC */ |
---|
126 | | - bridgereg_t _pad_0000D0; |
---|
127 | | - bridgereg_t b_pci_err_upper; /* 0x0000D4 */ |
---|
128 | | - bridgereg_t _pad_0000D8; |
---|
129 | | - bridgereg_t b_pci_err_lower; /* 0x0000DC */ |
---|
130 | | - bridgereg_t _pad_0000E0[8]; |
---|
| 127 | + u32 _pad_0000C8; |
---|
| 128 | + u32 b_pci_cfg; /* 0x0000CC */ |
---|
| 129 | + u32 _pad_0000D0; |
---|
| 130 | + u32 b_pci_err_upper; /* 0x0000D4 */ |
---|
| 131 | + u32 _pad_0000D8; |
---|
| 132 | + u32 b_pci_err_lower; /* 0x0000DC */ |
---|
| 133 | + u32 _pad_0000E0[8]; |
---|
131 | 134 | #define b_gio_err_lower b_pci_err_lower |
---|
132 | 135 | #define b_gio_err_upper b_pci_err_upper |
---|
133 | 136 | |
---|
134 | 137 | /* Interrupt 0x000100-0x0001FF */ |
---|
135 | | - bridgereg_t _pad_000100; |
---|
136 | | - bridgereg_t b_int_status; /* 0x000104 */ |
---|
137 | | - bridgereg_t _pad_000108; |
---|
138 | | - bridgereg_t b_int_enable; /* 0x00010C */ |
---|
139 | | - bridgereg_t _pad_000110; |
---|
140 | | - bridgereg_t b_int_rst_stat; /* 0x000114 */ |
---|
141 | | - bridgereg_t _pad_000118; |
---|
142 | | - bridgereg_t b_int_mode; /* 0x00011C */ |
---|
143 | | - bridgereg_t _pad_000120; |
---|
144 | | - bridgereg_t b_int_device; /* 0x000124 */ |
---|
145 | | - bridgereg_t _pad_000128; |
---|
146 | | - bridgereg_t b_int_host_err; /* 0x00012C */ |
---|
| 138 | + u32 _pad_000100; |
---|
| 139 | + u32 b_int_status; /* 0x000104 */ |
---|
| 140 | + u32 _pad_000108; |
---|
| 141 | + u32 b_int_enable; /* 0x00010C */ |
---|
| 142 | + u32 _pad_000110; |
---|
| 143 | + u32 b_int_rst_stat; /* 0x000114 */ |
---|
| 144 | + u32 _pad_000118; |
---|
| 145 | + u32 b_int_mode; /* 0x00011C */ |
---|
| 146 | + u32 _pad_000120; |
---|
| 147 | + u32 b_int_device; /* 0x000124 */ |
---|
| 148 | + u32 _pad_000128; |
---|
| 149 | + u32 b_int_host_err; /* 0x00012C */ |
---|
147 | 150 | |
---|
148 | 151 | struct { |
---|
149 | | - bridgereg_t __pad; /* 0x0001{30,,,68} */ |
---|
150 | | - bridgereg_t addr; /* 0x0001{34,,,6C} */ |
---|
| 152 | + u32 __pad; /* 0x0001{30,,,68} */ |
---|
| 153 | + u32 addr; /* 0x0001{34,,,6C} */ |
---|
151 | 154 | } b_int_addr[8]; /* 0x000130 */ |
---|
152 | 155 | |
---|
153 | | - bridgereg_t _pad_000170[36]; |
---|
| 156 | + u32 _pad_000170[36]; |
---|
154 | 157 | |
---|
155 | 158 | /* Device 0x000200-0x0003FF */ |
---|
156 | 159 | struct { |
---|
157 | | - bridgereg_t __pad; /* 0x0002{00,,,38} */ |
---|
158 | | - bridgereg_t reg; /* 0x0002{04,,,3C} */ |
---|
| 160 | + u32 __pad; /* 0x0002{00,,,38} */ |
---|
| 161 | + u32 reg; /* 0x0002{04,,,3C} */ |
---|
159 | 162 | } b_device[8]; /* 0x000200 */ |
---|
160 | 163 | |
---|
161 | 164 | struct { |
---|
162 | | - bridgereg_t __pad; /* 0x0002{40,,,78} */ |
---|
163 | | - bridgereg_t reg; /* 0x0002{44,,,7C} */ |
---|
| 165 | + u32 __pad; /* 0x0002{40,,,78} */ |
---|
| 166 | + u32 reg; /* 0x0002{44,,,7C} */ |
---|
164 | 167 | } b_wr_req_buf[8]; /* 0x000240 */ |
---|
165 | 168 | |
---|
166 | 169 | struct { |
---|
167 | | - bridgereg_t __pad; /* 0x0002{80,,,88} */ |
---|
168 | | - bridgereg_t reg; /* 0x0002{84,,,8C} */ |
---|
| 170 | + u32 __pad; /* 0x0002{80,,,88} */ |
---|
| 171 | + u32 reg; /* 0x0002{84,,,8C} */ |
---|
169 | 172 | } b_rrb_map[2]; /* 0x000280 */ |
---|
170 | 173 | #define b_even_resp b_rrb_map[0].reg /* 0x000284 */ |
---|
171 | 174 | #define b_odd_resp b_rrb_map[1].reg /* 0x00028C */ |
---|
172 | 175 | |
---|
173 | | - bridgereg_t _pad_000290; |
---|
174 | | - bridgereg_t b_resp_status; /* 0x000294 */ |
---|
175 | | - bridgereg_t _pad_000298; |
---|
176 | | - bridgereg_t b_resp_clear; /* 0x00029C */ |
---|
| 176 | + u32 _pad_000290; |
---|
| 177 | + u32 b_resp_status; /* 0x000294 */ |
---|
| 178 | + u32 _pad_000298; |
---|
| 179 | + u32 b_resp_clear; /* 0x00029C */ |
---|
177 | 180 | |
---|
178 | | - bridgereg_t _pad_0002A0[24]; |
---|
| 181 | + u32 _pad_0002A0[24]; |
---|
179 | 182 | |
---|
180 | 183 | char _pad_000300[0x10000 - 0x000300]; |
---|
181 | 184 | |
---|
182 | 185 | /* Internal Address Translation Entry RAM 0x010000-0x0103FF */ |
---|
183 | 186 | union { |
---|
184 | | - bridge_ate_t wr; /* write-only */ |
---|
| 187 | + u64 wr; /* write-only */ |
---|
185 | 188 | struct { |
---|
186 | | - bridgereg_t _p_pad; |
---|
187 | | - bridgereg_t rd; /* read-only */ |
---|
| 189 | + u32 _p_pad; |
---|
| 190 | + u32 rd; /* read-only */ |
---|
188 | 191 | } hi; |
---|
189 | 192 | } b_int_ate_ram[128]; |
---|
190 | 193 | |
---|
.. | .. |
---|
192 | 195 | |
---|
193 | 196 | /* Internal Address Translation Entry RAM LOW 0x011000-0x0113FF */ |
---|
194 | 197 | struct { |
---|
195 | | - bridgereg_t _p_pad; |
---|
196 | | - bridgereg_t rd; /* read-only */ |
---|
| 198 | + u32 _p_pad; |
---|
| 199 | + u32 rd; /* read-only */ |
---|
197 | 200 | } b_int_ate_ram_lo[128]; |
---|
198 | 201 | |
---|
199 | 202 | char _pad_011400[0x20000 - 0x011400]; |
---|
.. | .. |
---|
212 | 215 | } f[8]; |
---|
213 | 216 | } b_type0_cfg_dev[8]; /* 0x020000 */ |
---|
214 | 217 | |
---|
215 | | - /* PCI Type 1 Configuration Space 0x028000-0x028FFF */ |
---|
| 218 | + /* PCI Type 1 Configuration Space 0x028000-0x028FFF */ |
---|
216 | 219 | union { /* make all access sizes available. */ |
---|
217 | 220 | u8 c[0x1000 / 1]; |
---|
218 | 221 | u16 s[0x1000 / 2]; |
---|
.. | .. |
---|
233 | 236 | u8 _pad_030007[0x04fff8]; /* 0x030008-0x07FFFF */ |
---|
234 | 237 | |
---|
235 | 238 | /* External Address Translation Entry RAM 0x080000-0x0FFFFF */ |
---|
236 | | - bridge_ate_t b_ext_ate_ram[0x10000]; |
---|
| 239 | + u64 b_ext_ate_ram[0x10000]; |
---|
237 | 240 | |
---|
238 | 241 | /* Reserved 0x100000-0x1FFFFF */ |
---|
239 | 242 | char _pad_100000[0x200000-0x100000]; |
---|
.. | .. |
---|
259 | 262 | u32 l[0x400000 / 4]; /* read-only */ |
---|
260 | 263 | u64 d[0x400000 / 8]; /* read-only */ |
---|
261 | 264 | } b_external_flash; /* 0xC00000 */ |
---|
262 | | -} bridge_t; |
---|
| 265 | +}; |
---|
263 | 266 | |
---|
264 | 267 | /* |
---|
265 | 268 | * Field formats for Error Command Word and Auxiliary Error Command Word |
---|
266 | 269 | * of bridge. |
---|
267 | 270 | */ |
---|
268 | | -typedef struct bridge_err_cmdword_s { |
---|
| 271 | +struct bridge_err_cmdword { |
---|
269 | 272 | union { |
---|
270 | 273 | u32 cmd_word; |
---|
271 | 274 | struct { |
---|
.. | .. |
---|
282 | 285 | rsvd:8; |
---|
283 | 286 | } berr_st; |
---|
284 | 287 | } berr_un; |
---|
285 | | -} bridge_err_cmdword_t; |
---|
| 288 | +}; |
---|
286 | 289 | |
---|
287 | 290 | #define berr_field berr_un.berr_st |
---|
288 | 291 | #endif /* !__ASSEMBLY__ */ |
---|
.. | .. |
---|
290 | 293 | /* |
---|
291 | 294 | * The values of these macros can and should be crosschecked |
---|
292 | 295 | * regularly against the offsets of the like-named fields |
---|
293 | | - * within the "bridge_t" structure above. |
---|
| 296 | + * within the bridge_regs structure above. |
---|
294 | 297 | */ |
---|
295 | 298 | |
---|
296 | 299 | /* Byte offset macros for Bridge internal registers */ |
---|
.. | .. |
---|
797 | 800 | #define PCI64_ATTR_RMF_MASK 0x00ff000000000000 |
---|
798 | 801 | #define PCI64_ATTR_RMF_SHFT 48 |
---|
799 | 802 | |
---|
800 | | -#ifndef __ASSEMBLY__ |
---|
801 | | -/* Address translation entry for mapped pci32 accesses */ |
---|
802 | | -typedef union ate_u { |
---|
803 | | - u64 ent; |
---|
804 | | - struct ate_s { |
---|
805 | | - u64 rmf:16; |
---|
806 | | - u64 addr:36; |
---|
807 | | - u64 targ:4; |
---|
808 | | - u64 reserved:3; |
---|
809 | | - u64 barrier:1; |
---|
810 | | - u64 prefetch:1; |
---|
811 | | - u64 precise:1; |
---|
812 | | - u64 coherent:1; |
---|
813 | | - u64 valid:1; |
---|
814 | | - } field; |
---|
815 | | -} ate_t; |
---|
816 | | -#endif /* !__ASSEMBLY__ */ |
---|
817 | | - |
---|
818 | | -#define ATE_V 0x01 |
---|
819 | | -#define ATE_CO 0x02 |
---|
820 | | -#define ATE_PREC 0x04 |
---|
821 | | -#define ATE_PREF 0x08 |
---|
822 | | -#define ATE_BAR 0x10 |
---|
823 | | - |
---|
824 | | -#define ATE_PFNSHIFT 12 |
---|
825 | | -#define ATE_TIDSHIFT 8 |
---|
826 | | -#define ATE_RMFSHIFT 48 |
---|
827 | | - |
---|
828 | | -#define mkate(xaddr, xid, attr) ((xaddr) & 0x0000fffffffff000ULL) | \ |
---|
829 | | - ((xid)<<ATE_TIDSHIFT) | \ |
---|
830 | | - (attr) |
---|
831 | | - |
---|
832 | | -#define BRIDGE_INTERNAL_ATES 128 |
---|
833 | | - |
---|
834 | 803 | struct bridge_controller { |
---|
835 | | - struct pci_controller pc; |
---|
836 | | - struct resource mem; |
---|
837 | | - struct resource io; |
---|
838 | 804 | struct resource busn; |
---|
839 | | - bridge_t *base; |
---|
| 805 | + struct bridge_regs *base; |
---|
| 806 | + unsigned long baddr; |
---|
| 807 | + unsigned long intr_addr; |
---|
| 808 | + struct irq_domain *domain; |
---|
| 809 | + unsigned int pci_int[8][2]; |
---|
| 810 | + unsigned int int_mapping[8][2]; |
---|
| 811 | + u32 ioc3_sid[8]; |
---|
840 | 812 | nasid_t nasid; |
---|
841 | | - unsigned int widget_id; |
---|
842 | | - unsigned int irq_cpu; |
---|
843 | | - u64 baddr; |
---|
844 | | - unsigned int pci_int[8]; |
---|
845 | 813 | }; |
---|
846 | 814 | |
---|
847 | 815 | #define BRIDGE_CONTROLLER(bus) \ |
---|
848 | 816 | ((struct bridge_controller *)((bus)->sysdata)) |
---|
849 | 817 | |
---|
850 | | -extern void register_bridge_irq(unsigned int irq); |
---|
851 | | -extern int request_bridge_irq(struct bridge_controller *bc); |
---|
852 | | - |
---|
853 | | -extern struct pci_ops bridge_pci_ops; |
---|
| 818 | +#define bridge_read(bc, reg) __raw_readl(&bc->base->reg) |
---|
| 819 | +#define bridge_write(bc, reg, val) __raw_writel(val, &bc->base->reg) |
---|
| 820 | +#define bridge_set(bc, reg, val) \ |
---|
| 821 | + __raw_writel(__raw_readl(&bc->base->reg) | (val), &bc->base->reg) |
---|
| 822 | +#define bridge_clr(bc, reg, val) \ |
---|
| 823 | + __raw_writel(__raw_readl(&bc->base->reg) & ~(val), &bc->base->reg) |
---|
854 | 824 | |
---|
855 | 825 | #endif /* _ASM_PCI_BRIDGE_H */ |
---|