fsl-imx6.c (9fc7fc4d3909817555ce0af6bcb69dff1606140d) fsl-imx6.c (db873cc5d1a4aaa67eea87768d504b2f89d88738)
1/*
2 * Copyright (c) 2015 Jean-Christophe Dubois <jcd@tribudubois.net>
3 *
4 * i.MX6 SOC emulation.
5 *
6 * Based on hw/arm/fsl-imx31.c
7 *
8 * This program is free software; you can redistribute it and/or modify it

--- 33 unchanged lines hidden (view full) ---

42 int i;
43
44 for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX6_NUM_CPUS); i++) {
45 snprintf(name, NAME_SIZE, "cpu%d", i);
46 object_initialize_child(obj, name, &s->cpu[i],
47 ARM_CPU_TYPE_NAME("cortex-a9"));
48 }
49
1/*
2 * Copyright (c) 2015 Jean-Christophe Dubois <jcd@tribudubois.net>
3 *
4 * i.MX6 SOC emulation.
5 *
6 * Based on hw/arm/fsl-imx31.c
7 *
8 * This program is free software; you can redistribute it and/or modify it

--- 33 unchanged lines hidden (view full) ---

42 int i;
43
44 for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX6_NUM_CPUS); i++) {
45 snprintf(name, NAME_SIZE, "cpu%d", i);
46 object_initialize_child(obj, name, &s->cpu[i],
47 ARM_CPU_TYPE_NAME("cortex-a9"));
48 }
49
50 sysbus_init_child_obj(obj, "a9mpcore", &s->a9mpcore, sizeof(s->a9mpcore),
51 TYPE_A9MPCORE_PRIV);
50 object_initialize_child(obj, "a9mpcore", &s->a9mpcore, TYPE_A9MPCORE_PRIV);
52
51
53 sysbus_init_child_obj(obj, "ccm", &s->ccm, sizeof(s->ccm), TYPE_IMX6_CCM);
52 object_initialize_child(obj, "ccm", &s->ccm, TYPE_IMX6_CCM);
54
53
55 sysbus_init_child_obj(obj, "src", &s->src, sizeof(s->src), TYPE_IMX6_SRC);
54 object_initialize_child(obj, "src", &s->src, TYPE_IMX6_SRC);
56
57 for (i = 0; i < FSL_IMX6_NUM_UARTS; i++) {
58 snprintf(name, NAME_SIZE, "uart%d", i + 1);
55
56 for (i = 0; i < FSL_IMX6_NUM_UARTS; i++) {
57 snprintf(name, NAME_SIZE, "uart%d", i + 1);
59 sysbus_init_child_obj(obj, name, &s->uart[i], sizeof(s->uart[i]),
60 TYPE_IMX_SERIAL);
58 object_initialize_child(obj, name, &s->uart[i], TYPE_IMX_SERIAL);
61 }
62
59 }
60
63 sysbus_init_child_obj(obj, "gpt", &s->gpt, sizeof(s->gpt), TYPE_IMX6_GPT);
61 object_initialize_child(obj, "gpt", &s->gpt, TYPE_IMX6_GPT);
64
65 for (i = 0; i < FSL_IMX6_NUM_EPITS; i++) {
66 snprintf(name, NAME_SIZE, "epit%d", i + 1);
62
63 for (i = 0; i < FSL_IMX6_NUM_EPITS; i++) {
64 snprintf(name, NAME_SIZE, "epit%d", i + 1);
67 sysbus_init_child_obj(obj, name, &s->epit[i], sizeof(s->epit[i]),
68 TYPE_IMX_EPIT);
65 object_initialize_child(obj, name, &s->epit[i], TYPE_IMX_EPIT);
69 }
70
71 for (i = 0; i < FSL_IMX6_NUM_I2CS; i++) {
72 snprintf(name, NAME_SIZE, "i2c%d", i + 1);
66 }
67
68 for (i = 0; i < FSL_IMX6_NUM_I2CS; i++) {
69 snprintf(name, NAME_SIZE, "i2c%d", i + 1);
73 sysbus_init_child_obj(obj, name, &s->i2c[i], sizeof(s->i2c[i]),
74 TYPE_IMX_I2C);
70 object_initialize_child(obj, name, &s->i2c[i], TYPE_IMX_I2C);
75 }
76
77 for (i = 0; i < FSL_IMX6_NUM_GPIOS; i++) {
78 snprintf(name, NAME_SIZE, "gpio%d", i + 1);
71 }
72
73 for (i = 0; i < FSL_IMX6_NUM_GPIOS; i++) {
74 snprintf(name, NAME_SIZE, "gpio%d", i + 1);
79 sysbus_init_child_obj(obj, name, &s->gpio[i], sizeof(s->gpio[i]),
80 TYPE_IMX_GPIO);
75 object_initialize_child(obj, name, &s->gpio[i], TYPE_IMX_GPIO);
81 }
82
83 for (i = 0; i < FSL_IMX6_NUM_ESDHCS; i++) {
84 snprintf(name, NAME_SIZE, "sdhc%d", i + 1);
76 }
77
78 for (i = 0; i < FSL_IMX6_NUM_ESDHCS; i++) {
79 snprintf(name, NAME_SIZE, "sdhc%d", i + 1);
85 sysbus_init_child_obj(obj, name, &s->esdhc[i], sizeof(s->esdhc[i]),
86 TYPE_IMX_USDHC);
80 object_initialize_child(obj, name, &s->esdhc[i], TYPE_IMX_USDHC);
87 }
88
89 for (i = 0; i < FSL_IMX6_NUM_USB_PHYS; i++) {
90 snprintf(name, NAME_SIZE, "usbphy%d", i);
81 }
82
83 for (i = 0; i < FSL_IMX6_NUM_USB_PHYS; i++) {
84 snprintf(name, NAME_SIZE, "usbphy%d", i);
91 sysbus_init_child_obj(obj, name, &s->usbphy[i], sizeof(s->usbphy[i]),
92 TYPE_IMX_USBPHY);
85 object_initialize_child(obj, name, &s->usbphy[i], TYPE_IMX_USBPHY);
93 }
94 for (i = 0; i < FSL_IMX6_NUM_USBS; i++) {
95 snprintf(name, NAME_SIZE, "usb%d", i);
86 }
87 for (i = 0; i < FSL_IMX6_NUM_USBS; i++) {
88 snprintf(name, NAME_SIZE, "usb%d", i);
96 sysbus_init_child_obj(obj, name, &s->usb[i], sizeof(s->usb[i]),
97 TYPE_CHIPIDEA);
89 object_initialize_child(obj, name, &s->usb[i], TYPE_CHIPIDEA);
98 }
99
100 for (i = 0; i < FSL_IMX6_NUM_ECSPIS; i++) {
101 snprintf(name, NAME_SIZE, "spi%d", i + 1);
90 }
91
92 for (i = 0; i < FSL_IMX6_NUM_ECSPIS; i++) {
93 snprintf(name, NAME_SIZE, "spi%d", i + 1);
102 sysbus_init_child_obj(obj, name, &s->spi[i], sizeof(s->spi[i]),
103 TYPE_IMX_SPI);
94 object_initialize_child(obj, name, &s->spi[i], TYPE_IMX_SPI);
104 }
105 for (i = 0; i < FSL_IMX6_NUM_WDTS; i++) {
106 snprintf(name, NAME_SIZE, "wdt%d", i);
95 }
96 for (i = 0; i < FSL_IMX6_NUM_WDTS; i++) {
97 snprintf(name, NAME_SIZE, "wdt%d", i);
107 sysbus_init_child_obj(obj, name, &s->wdt[i], sizeof(s->wdt[i]),
108 TYPE_IMX2_WDT);
98 object_initialize_child(obj, name, &s->wdt[i], TYPE_IMX2_WDT);
109 }
110
111
99 }
100
101
112 sysbus_init_child_obj(obj, "eth", &s->eth, sizeof(s->eth), TYPE_IMX_ENET);
102 object_initialize_child(obj, "eth", &s->eth, TYPE_IMX_ENET);
113}
114
115static void fsl_imx6_realize(DeviceState *dev, Error **errp)
116{
117 MachineState *ms = MACHINE(qdev_get_machine());
118 FslIMX6State *s = FSL_IMX6(dev);
119 uint16_t i;
120 Error *err = NULL;

--- 28 unchanged lines hidden (view full) ---

149
150 object_property_set_int(OBJECT(&s->a9mpcore), smp_cpus, "num-cpu",
151 &error_abort);
152
153 object_property_set_int(OBJECT(&s->a9mpcore),
154 FSL_IMX6_MAX_IRQ + GIC_INTERNAL, "num-irq",
155 &error_abort);
156
103}
104
105static void fsl_imx6_realize(DeviceState *dev, Error **errp)
106{
107 MachineState *ms = MACHINE(qdev_get_machine());
108 FslIMX6State *s = FSL_IMX6(dev);
109 uint16_t i;
110 Error *err = NULL;

--- 28 unchanged lines hidden (view full) ---

139
140 object_property_set_int(OBJECT(&s->a9mpcore), smp_cpus, "num-cpu",
141 &error_abort);
142
143 object_property_set_int(OBJECT(&s->a9mpcore),
144 FSL_IMX6_MAX_IRQ + GIC_INTERNAL, "num-irq",
145 &error_abort);
146
157 object_property_set_bool(OBJECT(&s->a9mpcore), true, "realized", &err);
147 sysbus_realize(SYS_BUS_DEVICE(&s->a9mpcore), &err);
158 if (err) {
159 error_propagate(errp, err);
160 return;
161 }
162 sysbus_mmio_map(SYS_BUS_DEVICE(&s->a9mpcore), 0, FSL_IMX6_A9MPCORE_ADDR);
163
164 for (i = 0; i < smp_cpus; i++) {
165 sysbus_connect_irq(SYS_BUS_DEVICE(&s->a9mpcore), i,
166 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_IRQ));
167 sysbus_connect_irq(SYS_BUS_DEVICE(&s->a9mpcore), i + smp_cpus,
168 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_FIQ));
169 }
170
148 if (err) {
149 error_propagate(errp, err);
150 return;
151 }
152 sysbus_mmio_map(SYS_BUS_DEVICE(&s->a9mpcore), 0, FSL_IMX6_A9MPCORE_ADDR);
153
154 for (i = 0; i < smp_cpus; i++) {
155 sysbus_connect_irq(SYS_BUS_DEVICE(&s->a9mpcore), i,
156 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_IRQ));
157 sysbus_connect_irq(SYS_BUS_DEVICE(&s->a9mpcore), i + smp_cpus,
158 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_FIQ));
159 }
160
171 object_property_set_bool(OBJECT(&s->ccm), true, "realized", &err);
161 sysbus_realize(SYS_BUS_DEVICE(&s->ccm), &err);
172 if (err) {
173 error_propagate(errp, err);
174 return;
175 }
176 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccm), 0, FSL_IMX6_CCM_ADDR);
177
162 if (err) {
163 error_propagate(errp, err);
164 return;
165 }
166 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccm), 0, FSL_IMX6_CCM_ADDR);
167
178 object_property_set_bool(OBJECT(&s->src), true, "realized", &err);
168 sysbus_realize(SYS_BUS_DEVICE(&s->src), &err);
179 if (err) {
180 error_propagate(errp, err);
181 return;
182 }
183 sysbus_mmio_map(SYS_BUS_DEVICE(&s->src), 0, FSL_IMX6_SRC_ADDR);
184
185 /* Initialize all UARTs */
186 for (i = 0; i < FSL_IMX6_NUM_UARTS; i++) {

--- 5 unchanged lines hidden (view full) ---

192 { FSL_IMX6_UART2_ADDR, FSL_IMX6_UART2_IRQ },
193 { FSL_IMX6_UART3_ADDR, FSL_IMX6_UART3_IRQ },
194 { FSL_IMX6_UART4_ADDR, FSL_IMX6_UART4_IRQ },
195 { FSL_IMX6_UART5_ADDR, FSL_IMX6_UART5_IRQ },
196 };
197
198 qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", serial_hd(i));
199
169 if (err) {
170 error_propagate(errp, err);
171 return;
172 }
173 sysbus_mmio_map(SYS_BUS_DEVICE(&s->src), 0, FSL_IMX6_SRC_ADDR);
174
175 /* Initialize all UARTs */
176 for (i = 0; i < FSL_IMX6_NUM_UARTS; i++) {

--- 5 unchanged lines hidden (view full) ---

182 { FSL_IMX6_UART2_ADDR, FSL_IMX6_UART2_IRQ },
183 { FSL_IMX6_UART3_ADDR, FSL_IMX6_UART3_IRQ },
184 { FSL_IMX6_UART4_ADDR, FSL_IMX6_UART4_IRQ },
185 { FSL_IMX6_UART5_ADDR, FSL_IMX6_UART5_IRQ },
186 };
187
188 qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", serial_hd(i));
189
200 object_property_set_bool(OBJECT(&s->uart[i]), true, "realized", &err);
190 sysbus_realize(SYS_BUS_DEVICE(&s->uart[i]), &err);
201 if (err) {
202 error_propagate(errp, err);
203 return;
204 }
205
206 sysbus_mmio_map(SYS_BUS_DEVICE(&s->uart[i]), 0, serial_table[i].addr);
207 sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
208 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
209 serial_table[i].irq));
210 }
211
212 s->gpt.ccm = IMX_CCM(&s->ccm);
213
191 if (err) {
192 error_propagate(errp, err);
193 return;
194 }
195
196 sysbus_mmio_map(SYS_BUS_DEVICE(&s->uart[i]), 0, serial_table[i].addr);
197 sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
198 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
199 serial_table[i].irq));
200 }
201
202 s->gpt.ccm = IMX_CCM(&s->ccm);
203
214 object_property_set_bool(OBJECT(&s->gpt), true, "realized", &err);
204 sysbus_realize(SYS_BUS_DEVICE(&s->gpt), &err);
215 if (err) {
216 error_propagate(errp, err);
217 return;
218 }
219
220 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpt), 0, FSL_IMX6_GPT_ADDR);
221 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpt), 0,
222 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 6 unchanged lines hidden (view full) ---

229 unsigned int irq;
230 } epit_table[FSL_IMX6_NUM_EPITS] = {
231 { FSL_IMX6_EPIT1_ADDR, FSL_IMX6_EPIT1_IRQ },
232 { FSL_IMX6_EPIT2_ADDR, FSL_IMX6_EPIT2_IRQ },
233 };
234
235 s->epit[i].ccm = IMX_CCM(&s->ccm);
236
205 if (err) {
206 error_propagate(errp, err);
207 return;
208 }
209
210 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpt), 0, FSL_IMX6_GPT_ADDR);
211 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpt), 0,
212 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 6 unchanged lines hidden (view full) ---

219 unsigned int irq;
220 } epit_table[FSL_IMX6_NUM_EPITS] = {
221 { FSL_IMX6_EPIT1_ADDR, FSL_IMX6_EPIT1_IRQ },
222 { FSL_IMX6_EPIT2_ADDR, FSL_IMX6_EPIT2_IRQ },
223 };
224
225 s->epit[i].ccm = IMX_CCM(&s->ccm);
226
237 object_property_set_bool(OBJECT(&s->epit[i]), true, "realized", &err);
227 sysbus_realize(SYS_BUS_DEVICE(&s->epit[i]), &err);
238 if (err) {
239 error_propagate(errp, err);
240 return;
241 }
242
243 sysbus_mmio_map(SYS_BUS_DEVICE(&s->epit[i]), 0, epit_table[i].addr);
244 sysbus_connect_irq(SYS_BUS_DEVICE(&s->epit[i]), 0,
245 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 6 unchanged lines hidden (view full) ---

252 hwaddr addr;
253 unsigned int irq;
254 } i2c_table[FSL_IMX6_NUM_I2CS] = {
255 { FSL_IMX6_I2C1_ADDR, FSL_IMX6_I2C1_IRQ },
256 { FSL_IMX6_I2C2_ADDR, FSL_IMX6_I2C2_IRQ },
257 { FSL_IMX6_I2C3_ADDR, FSL_IMX6_I2C3_IRQ }
258 };
259
228 if (err) {
229 error_propagate(errp, err);
230 return;
231 }
232
233 sysbus_mmio_map(SYS_BUS_DEVICE(&s->epit[i]), 0, epit_table[i].addr);
234 sysbus_connect_irq(SYS_BUS_DEVICE(&s->epit[i]), 0,
235 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 6 unchanged lines hidden (view full) ---

242 hwaddr addr;
243 unsigned int irq;
244 } i2c_table[FSL_IMX6_NUM_I2CS] = {
245 { FSL_IMX6_I2C1_ADDR, FSL_IMX6_I2C1_IRQ },
246 { FSL_IMX6_I2C2_ADDR, FSL_IMX6_I2C2_IRQ },
247 { FSL_IMX6_I2C3_ADDR, FSL_IMX6_I2C3_IRQ }
248 };
249
260 object_property_set_bool(OBJECT(&s->i2c[i]), true, "realized", &err);
250 sysbus_realize(SYS_BUS_DEVICE(&s->i2c[i]), &err);
261 if (err) {
262 error_propagate(errp, err);
263 return;
264 }
265
266 sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c[i]), 0, i2c_table[i].addr);
267 sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c[i]), 0,
268 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 43 unchanged lines hidden (view full) ---

312 FSL_IMX6_GPIO7_HIGH_IRQ
313 },
314 };
315
316 object_property_set_bool(OBJECT(&s->gpio[i]), true, "has-edge-sel",
317 &error_abort);
318 object_property_set_bool(OBJECT(&s->gpio[i]), true, "has-upper-pin-irq",
319 &error_abort);
251 if (err) {
252 error_propagate(errp, err);
253 return;
254 }
255
256 sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c[i]), 0, i2c_table[i].addr);
257 sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c[i]), 0,
258 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 43 unchanged lines hidden (view full) ---

302 FSL_IMX6_GPIO7_HIGH_IRQ
303 },
304 };
305
306 object_property_set_bool(OBJECT(&s->gpio[i]), true, "has-edge-sel",
307 &error_abort);
308 object_property_set_bool(OBJECT(&s->gpio[i]), true, "has-upper-pin-irq",
309 &error_abort);
320 object_property_set_bool(OBJECT(&s->gpio[i]), true, "realized", &err);
310 sysbus_realize(SYS_BUS_DEVICE(&s->gpio[i]), &err);
321 if (err) {
322 error_propagate(errp, err);
323 return;
324 }
325
326 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio[i]), 0, gpio_table[i].addr);
327 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio[i]), 0,
328 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 15 unchanged lines hidden (view full) ---

344 { FSL_IMX6_uSDHC4_ADDR, FSL_IMX6_uSDHC4_IRQ },
345 };
346
347 /* UHS-I SDIO3.0 SDR104 1.8V ADMA */
348 object_property_set_uint(OBJECT(&s->esdhc[i]), 3, "sd-spec-version",
349 &err);
350 object_property_set_uint(OBJECT(&s->esdhc[i]), IMX6_ESDHC_CAPABILITIES,
351 "capareg", &err);
311 if (err) {
312 error_propagate(errp, err);
313 return;
314 }
315
316 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio[i]), 0, gpio_table[i].addr);
317 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio[i]), 0,
318 qdev_get_gpio_in(DEVICE(&s->a9mpcore),

--- 15 unchanged lines hidden (view full) ---

334 { FSL_IMX6_uSDHC4_ADDR, FSL_IMX6_uSDHC4_IRQ },
335 };
336
337 /* UHS-I SDIO3.0 SDR104 1.8V ADMA */
338 object_property_set_uint(OBJECT(&s->esdhc[i]), 3, "sd-spec-version",
339 &err);
340 object_property_set_uint(OBJECT(&s->esdhc[i]), IMX6_ESDHC_CAPABILITIES,
341 "capareg", &err);
352 object_property_set_bool(OBJECT(&s->esdhc[i]), true, "realized", &err);
342 sysbus_realize(SYS_BUS_DEVICE(&s->esdhc[i]), &err);
353 if (err) {
354 error_propagate(errp, err);
355 return;
356 }
357 sysbus_mmio_map(SYS_BUS_DEVICE(&s->esdhc[i]), 0, esdhc_table[i].addr);
358 sysbus_connect_irq(SYS_BUS_DEVICE(&s->esdhc[i]), 0,
359 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
360 esdhc_table[i].irq));
361 }
362
363 /* USB */
364 for (i = 0; i < FSL_IMX6_NUM_USB_PHYS; i++) {
343 if (err) {
344 error_propagate(errp, err);
345 return;
346 }
347 sysbus_mmio_map(SYS_BUS_DEVICE(&s->esdhc[i]), 0, esdhc_table[i].addr);
348 sysbus_connect_irq(SYS_BUS_DEVICE(&s->esdhc[i]), 0,
349 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
350 esdhc_table[i].irq));
351 }
352
353 /* USB */
354 for (i = 0; i < FSL_IMX6_NUM_USB_PHYS; i++) {
365 object_property_set_bool(OBJECT(&s->usbphy[i]), true, "realized",
366 &error_abort);
355 sysbus_realize(SYS_BUS_DEVICE(&s->usbphy[i]), &error_abort);
367 sysbus_mmio_map(SYS_BUS_DEVICE(&s->usbphy[i]), 0,
368 FSL_IMX6_USBPHY1_ADDR + i * 0x1000);
369 }
370 for (i = 0; i < FSL_IMX6_NUM_USBS; i++) {
371 static const int FSL_IMX6_USBn_IRQ[] = {
372 FSL_IMX6_USB_OTG_IRQ,
373 FSL_IMX6_USB_HOST1_IRQ,
374 FSL_IMX6_USB_HOST2_IRQ,
375 FSL_IMX6_USB_HOST3_IRQ,
376 };
377
356 sysbus_mmio_map(SYS_BUS_DEVICE(&s->usbphy[i]), 0,
357 FSL_IMX6_USBPHY1_ADDR + i * 0x1000);
358 }
359 for (i = 0; i < FSL_IMX6_NUM_USBS; i++) {
360 static const int FSL_IMX6_USBn_IRQ[] = {
361 FSL_IMX6_USB_OTG_IRQ,
362 FSL_IMX6_USB_HOST1_IRQ,
363 FSL_IMX6_USB_HOST2_IRQ,
364 FSL_IMX6_USB_HOST3_IRQ,
365 };
366
378 object_property_set_bool(OBJECT(&s->usb[i]), true, "realized",
379 &error_abort);
367 sysbus_realize(SYS_BUS_DEVICE(&s->usb[i]), &error_abort);
380 sysbus_mmio_map(SYS_BUS_DEVICE(&s->usb[i]), 0,
381 FSL_IMX6_USBOH3_USB_ADDR + i * 0x200);
382 sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i]), 0,
383 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
384 FSL_IMX6_USBn_IRQ[i]));
385 }
386
387 /* Initialize all ECSPI */

--- 5 unchanged lines hidden (view full) ---

393 { FSL_IMX6_eCSPI1_ADDR, FSL_IMX6_ECSPI1_IRQ },
394 { FSL_IMX6_eCSPI2_ADDR, FSL_IMX6_ECSPI2_IRQ },
395 { FSL_IMX6_eCSPI3_ADDR, FSL_IMX6_ECSPI3_IRQ },
396 { FSL_IMX6_eCSPI4_ADDR, FSL_IMX6_ECSPI4_IRQ },
397 { FSL_IMX6_eCSPI5_ADDR, FSL_IMX6_ECSPI5_IRQ },
398 };
399
400 /* Initialize the SPI */
368 sysbus_mmio_map(SYS_BUS_DEVICE(&s->usb[i]), 0,
369 FSL_IMX6_USBOH3_USB_ADDR + i * 0x200);
370 sysbus_connect_irq(SYS_BUS_DEVICE(&s->usb[i]), 0,
371 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
372 FSL_IMX6_USBn_IRQ[i]));
373 }
374
375 /* Initialize all ECSPI */

--- 5 unchanged lines hidden (view full) ---

381 { FSL_IMX6_eCSPI1_ADDR, FSL_IMX6_ECSPI1_IRQ },
382 { FSL_IMX6_eCSPI2_ADDR, FSL_IMX6_ECSPI2_IRQ },
383 { FSL_IMX6_eCSPI3_ADDR, FSL_IMX6_ECSPI3_IRQ },
384 { FSL_IMX6_eCSPI4_ADDR, FSL_IMX6_ECSPI4_IRQ },
385 { FSL_IMX6_eCSPI5_ADDR, FSL_IMX6_ECSPI5_IRQ },
386 };
387
388 /* Initialize the SPI */
401 object_property_set_bool(OBJECT(&s->spi[i]), true, "realized", &err);
389 sysbus_realize(SYS_BUS_DEVICE(&s->spi[i]), &err);
402 if (err) {
403 error_propagate(errp, err);
404 return;
405 }
406
407 sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 0, spi_table[i].addr);
408 sysbus_connect_irq(SYS_BUS_DEVICE(&s->spi[i]), 0,
409 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
410 spi_table[i].irq));
411 }
412
413 qdev_set_nic_properties(DEVICE(&s->eth), &nd_table[0]);
390 if (err) {
391 error_propagate(errp, err);
392 return;
393 }
394
395 sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi[i]), 0, spi_table[i].addr);
396 sysbus_connect_irq(SYS_BUS_DEVICE(&s->spi[i]), 0,
397 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
398 spi_table[i].irq));
399 }
400
401 qdev_set_nic_properties(DEVICE(&s->eth), &nd_table[0]);
414 object_property_set_bool(OBJECT(&s->eth), true, "realized", &err);
402 sysbus_realize(SYS_BUS_DEVICE(&s->eth), &err);
415 if (err) {
416 error_propagate(errp, err);
417 return;
418 }
419 sysbus_mmio_map(SYS_BUS_DEVICE(&s->eth), 0, FSL_IMX6_ENET_ADDR);
420 sysbus_connect_irq(SYS_BUS_DEVICE(&s->eth), 0,
421 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
422 FSL_IMX6_ENET_MAC_IRQ));

--- 11 unchanged lines hidden (view full) ---

434 };
435 static const int FSL_IMX6_WDOGn_IRQ[FSL_IMX6_NUM_WDTS] = {
436 FSL_IMX6_WDOG1_IRQ,
437 FSL_IMX6_WDOG2_IRQ,
438 };
439
440 object_property_set_bool(OBJECT(&s->wdt[i]), true, "pretimeout-support",
441 &error_abort);
403 if (err) {
404 error_propagate(errp, err);
405 return;
406 }
407 sysbus_mmio_map(SYS_BUS_DEVICE(&s->eth), 0, FSL_IMX6_ENET_ADDR);
408 sysbus_connect_irq(SYS_BUS_DEVICE(&s->eth), 0,
409 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
410 FSL_IMX6_ENET_MAC_IRQ));

--- 11 unchanged lines hidden (view full) ---

422 };
423 static const int FSL_IMX6_WDOGn_IRQ[FSL_IMX6_NUM_WDTS] = {
424 FSL_IMX6_WDOG1_IRQ,
425 FSL_IMX6_WDOG2_IRQ,
426 };
427
428 object_property_set_bool(OBJECT(&s->wdt[i]), true, "pretimeout-support",
429 &error_abort);
442 object_property_set_bool(OBJECT(&s->wdt[i]), true, "realized",
443 &error_abort);
430 sysbus_realize(SYS_BUS_DEVICE(&s->wdt[i]), &error_abort);
444
445 sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0, FSL_IMX6_WDOGn_ADDR[i]);
446 sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[i]), 0,
447 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
448 FSL_IMX6_WDOGn_IRQ[i]));
449 }
450
451 /* ROM memory */

--- 60 unchanged lines hidden ---
431
432 sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0, FSL_IMX6_WDOGn_ADDR[i]);
433 sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[i]), 0,
434 qdev_get_gpio_in(DEVICE(&s->a9mpcore),
435 FSL_IMX6_WDOGn_IRQ[i]));
436 }
437
438 /* ROM memory */

--- 60 unchanged lines hidden ---