bcm2835_peripherals.c (0074fce61fecf40326845fa859119bbdd96df620) | bcm2835_peripherals.c (db873cc5d1a4aaa67eea87768d504b2f89d88738) |
---|---|
1/* 2 * Raspberry Pi emulation (c) 2012 Gregory Estrade 3 * Upstreaming code cleanup [including bcm2835_*] (c) 2013 Jan Petrous 4 * 5 * Rasperry Pi 2 emulation and refactoring Copyright (c) 2015, Microsoft 6 * Written by Andrew Baumann 7 * 8 * This work is licensed under the terms of the GNU GPL, version 2 or later. --- 39 unchanged lines hidden (view full) --- 48 49 /* Internal memory region for request/response communication with 50 * mailbox-addressable peripherals (not exported) 51 */ 52 memory_region_init(&s->mbox_mr, obj, "bcm2835-mbox", 53 MBOX_CHAN_COUNT << MBOX_AS_CHAN_SHIFT); 54 55 /* Interrupt Controller */ | 1/* 2 * Raspberry Pi emulation (c) 2012 Gregory Estrade 3 * Upstreaming code cleanup [including bcm2835_*] (c) 2013 Jan Petrous 4 * 5 * Rasperry Pi 2 emulation and refactoring Copyright (c) 2015, Microsoft 6 * Written by Andrew Baumann 7 * 8 * This work is licensed under the terms of the GNU GPL, version 2 or later. --- 39 unchanged lines hidden (view full) --- 48 49 /* Internal memory region for request/response communication with 50 * mailbox-addressable peripherals (not exported) 51 */ 52 memory_region_init(&s->mbox_mr, obj, "bcm2835-mbox", 53 MBOX_CHAN_COUNT << MBOX_AS_CHAN_SHIFT); 54 55 /* Interrupt Controller */ |
56 sysbus_init_child_obj(obj, "ic", &s->ic, sizeof(s->ic), TYPE_BCM2835_IC); | 56 object_initialize_child(obj, "ic", &s->ic, TYPE_BCM2835_IC); |
57 58 /* SYS Timer */ | 57 58 /* SYS Timer */ |
59 sysbus_init_child_obj(obj, "systimer", &s->systmr, sizeof(s->systmr), 60 TYPE_BCM2835_SYSTIMER); | 59 object_initialize_child(obj, "systimer", &s->systmr, 60 TYPE_BCM2835_SYSTIMER); |
61 62 /* UART0 */ | 61 62 /* UART0 */ |
63 sysbus_init_child_obj(obj, "uart0", &s->uart0, sizeof(s->uart0), 64 TYPE_PL011); | 63 object_initialize_child(obj, "uart0", &s->uart0, TYPE_PL011); |
65 66 /* AUX / UART1 */ | 64 65 /* AUX / UART1 */ |
67 sysbus_init_child_obj(obj, "aux", &s->aux, sizeof(s->aux), 68 TYPE_BCM2835_AUX); | 66 object_initialize_child(obj, "aux", &s->aux, TYPE_BCM2835_AUX); |
69 70 /* Mailboxes */ | 67 68 /* Mailboxes */ |
71 sysbus_init_child_obj(obj, "mbox", &s->mboxes, sizeof(s->mboxes), 72 TYPE_BCM2835_MBOX); | 69 object_initialize_child(obj, "mbox", &s->mboxes, TYPE_BCM2835_MBOX); |
73 74 object_property_add_const_link(OBJECT(&s->mboxes), "mbox-mr", 75 OBJECT(&s->mbox_mr)); 76 77 /* Framebuffer */ | 70 71 object_property_add_const_link(OBJECT(&s->mboxes), "mbox-mr", 72 OBJECT(&s->mbox_mr)); 73 74 /* Framebuffer */ |
78 sysbus_init_child_obj(obj, "fb", &s->fb, sizeof(s->fb), TYPE_BCM2835_FB); | 75 object_initialize_child(obj, "fb", &s->fb, TYPE_BCM2835_FB); |
79 object_property_add_alias(obj, "vcram-size", OBJECT(&s->fb), "vcram-size"); 80 81 object_property_add_const_link(OBJECT(&s->fb), "dma-mr", 82 OBJECT(&s->gpu_bus_mr)); 83 84 /* Property channel */ | 76 object_property_add_alias(obj, "vcram-size", OBJECT(&s->fb), "vcram-size"); 77 78 object_property_add_const_link(OBJECT(&s->fb), "dma-mr", 79 OBJECT(&s->gpu_bus_mr)); 80 81 /* Property channel */ |
85 sysbus_init_child_obj(obj, "property", &s->property, sizeof(s->property), 86 TYPE_BCM2835_PROPERTY); | 82 object_initialize_child(obj, "property", &s->property, 83 TYPE_BCM2835_PROPERTY); |
87 object_property_add_alias(obj, "board-rev", OBJECT(&s->property), 88 "board-rev"); 89 90 object_property_add_const_link(OBJECT(&s->property), "fb", 91 OBJECT(&s->fb)); 92 object_property_add_const_link(OBJECT(&s->property), "dma-mr", 93 OBJECT(&s->gpu_bus_mr)); 94 95 /* Random Number Generator */ | 84 object_property_add_alias(obj, "board-rev", OBJECT(&s->property), 85 "board-rev"); 86 87 object_property_add_const_link(OBJECT(&s->property), "fb", 88 OBJECT(&s->fb)); 89 object_property_add_const_link(OBJECT(&s->property), "dma-mr", 90 OBJECT(&s->gpu_bus_mr)); 91 92 /* Random Number Generator */ |
96 sysbus_init_child_obj(obj, "rng", &s->rng, sizeof(s->rng), 97 TYPE_BCM2835_RNG); | 93 object_initialize_child(obj, "rng", &s->rng, TYPE_BCM2835_RNG); |
98 99 /* Extended Mass Media Controller */ | 94 95 /* Extended Mass Media Controller */ |
100 sysbus_init_child_obj(obj, "sdhci", &s->sdhci, sizeof(s->sdhci), 101 TYPE_SYSBUS_SDHCI); | 96 object_initialize_child(obj, "sdhci", &s->sdhci, TYPE_SYSBUS_SDHCI); |
102 103 /* SDHOST */ | 97 98 /* SDHOST */ |
104 sysbus_init_child_obj(obj, "sdhost", &s->sdhost, sizeof(s->sdhost), 105 TYPE_BCM2835_SDHOST); | 99 object_initialize_child(obj, "sdhost", &s->sdhost, TYPE_BCM2835_SDHOST); |
106 107 /* DMA Channels */ | 100 101 /* DMA Channels */ |
108 sysbus_init_child_obj(obj, "dma", &s->dma, sizeof(s->dma), 109 TYPE_BCM2835_DMA); | 102 object_initialize_child(obj, "dma", &s->dma, TYPE_BCM2835_DMA); |
110 111 object_property_add_const_link(OBJECT(&s->dma), "dma-mr", 112 OBJECT(&s->gpu_bus_mr)); 113 114 /* Thermal */ | 103 104 object_property_add_const_link(OBJECT(&s->dma), "dma-mr", 105 OBJECT(&s->gpu_bus_mr)); 106 107 /* Thermal */ |
115 sysbus_init_child_obj(obj, "thermal", &s->thermal, sizeof(s->thermal), 116 TYPE_BCM2835_THERMAL); | 108 object_initialize_child(obj, "thermal", &s->thermal, TYPE_BCM2835_THERMAL); |
117 118 /* GPIO */ | 109 110 /* GPIO */ |
119 sysbus_init_child_obj(obj, "gpio", &s->gpio, sizeof(s->gpio), 120 TYPE_BCM2835_GPIO); | 111 object_initialize_child(obj, "gpio", &s->gpio, TYPE_BCM2835_GPIO); |
121 122 object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhci", 123 OBJECT(&s->sdhci.sdbus)); 124 object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhost", 125 OBJECT(&s->sdhost.sdbus)); 126 127 /* Mphi */ | 112 113 object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhci", 114 OBJECT(&s->sdhci.sdbus)); 115 object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhost", 116 OBJECT(&s->sdhost.sdbus)); 117 118 /* Mphi */ |
128 sysbus_init_child_obj(obj, "mphi", &s->mphi, sizeof(s->mphi), 129 TYPE_BCM2835_MPHI); | 119 object_initialize_child(obj, "mphi", &s->mphi, TYPE_BCM2835_MPHI); |
130 131 /* DWC2 */ | 120 121 /* DWC2 */ |
132 sysbus_init_child_obj(obj, "dwc2", &s->dwc2, sizeof(s->dwc2), 133 TYPE_DWC2_USB); | 122 object_initialize_child(obj, "dwc2", &s->dwc2, TYPE_DWC2_USB); |
134 135 object_property_add_const_link(OBJECT(&s->dwc2), "dma-mr", 136 OBJECT(&s->gpu_bus_mr)); 137} 138 139static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp) 140{ 141 BCM2835PeripheralState *s = BCM2835_PERIPHERALS(dev); --- 25 unchanged lines hidden (view full) --- 167 for (n = 0; n < 4; n++) { 168 memory_region_init_alias(&s->ram_alias[n], OBJECT(s), 169 "bcm2835-gpu-ram-alias[*]", ram, 0, ram_size); 170 memory_region_add_subregion_overlap(&s->gpu_bus_mr, (hwaddr)n << 30, 171 &s->ram_alias[n], 0); 172 } 173 174 /* Interrupt Controller */ | 123 124 object_property_add_const_link(OBJECT(&s->dwc2), "dma-mr", 125 OBJECT(&s->gpu_bus_mr)); 126} 127 128static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp) 129{ 130 BCM2835PeripheralState *s = BCM2835_PERIPHERALS(dev); --- 25 unchanged lines hidden (view full) --- 156 for (n = 0; n < 4; n++) { 157 memory_region_init_alias(&s->ram_alias[n], OBJECT(s), 158 "bcm2835-gpu-ram-alias[*]", ram, 0, ram_size); 159 memory_region_add_subregion_overlap(&s->gpu_bus_mr, (hwaddr)n << 30, 160 &s->ram_alias[n], 0); 161 } 162 163 /* Interrupt Controller */ |
175 object_property_set_bool(OBJECT(&s->ic), true, "realized", &err); | 164 sysbus_realize(SYS_BUS_DEVICE(&s->ic), &err); |
176 if (err) { 177 error_propagate(errp, err); 178 return; 179 } 180 181 memory_region_add_subregion(&s->peri_mr, ARMCTRL_IC_OFFSET, 182 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->ic), 0)); 183 sysbus_pass_irq(SYS_BUS_DEVICE(s), SYS_BUS_DEVICE(&s->ic)); 184 185 /* Sys Timer */ | 165 if (err) { 166 error_propagate(errp, err); 167 return; 168 } 169 170 memory_region_add_subregion(&s->peri_mr, ARMCTRL_IC_OFFSET, 171 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->ic), 0)); 172 sysbus_pass_irq(SYS_BUS_DEVICE(s), SYS_BUS_DEVICE(&s->ic)); 173 174 /* Sys Timer */ |
186 object_property_set_bool(OBJECT(&s->systmr), true, "realized", &err); | 175 sysbus_realize(SYS_BUS_DEVICE(&s->systmr), &err); |
187 if (err) { 188 error_propagate(errp, err); 189 return; 190 } 191 memory_region_add_subregion(&s->peri_mr, ST_OFFSET, 192 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->systmr), 0)); 193 sysbus_connect_irq(SYS_BUS_DEVICE(&s->systmr), 0, 194 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_ARM_IRQ, 195 INTERRUPT_ARM_TIMER)); 196 197 /* UART0 */ 198 qdev_prop_set_chr(DEVICE(&s->uart0), "chardev", serial_hd(0)); | 176 if (err) { 177 error_propagate(errp, err); 178 return; 179 } 180 memory_region_add_subregion(&s->peri_mr, ST_OFFSET, 181 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->systmr), 0)); 182 sysbus_connect_irq(SYS_BUS_DEVICE(&s->systmr), 0, 183 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_ARM_IRQ, 184 INTERRUPT_ARM_TIMER)); 185 186 /* UART0 */ 187 qdev_prop_set_chr(DEVICE(&s->uart0), "chardev", serial_hd(0)); |
199 object_property_set_bool(OBJECT(&s->uart0), true, "realized", &err); | 188 sysbus_realize(SYS_BUS_DEVICE(&s->uart0), &err); |
200 if (err) { 201 error_propagate(errp, err); 202 return; 203 } 204 205 memory_region_add_subregion(&s->peri_mr, UART0_OFFSET, 206 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->uart0), 0)); 207 sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart0), 0, 208 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 209 INTERRUPT_UART0)); 210 211 /* AUX / UART1 */ 212 qdev_prop_set_chr(DEVICE(&s->aux), "chardev", serial_hd(1)); 213 | 189 if (err) { 190 error_propagate(errp, err); 191 return; 192 } 193 194 memory_region_add_subregion(&s->peri_mr, UART0_OFFSET, 195 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->uart0), 0)); 196 sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart0), 0, 197 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 198 INTERRUPT_UART0)); 199 200 /* AUX / UART1 */ 201 qdev_prop_set_chr(DEVICE(&s->aux), "chardev", serial_hd(1)); 202 |
214 object_property_set_bool(OBJECT(&s->aux), true, "realized", &err); | 203 sysbus_realize(SYS_BUS_DEVICE(&s->aux), &err); |
215 if (err) { 216 error_propagate(errp, err); 217 return; 218 } 219 220 memory_region_add_subregion(&s->peri_mr, AUX_OFFSET, 221 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->aux), 0)); 222 sysbus_connect_irq(SYS_BUS_DEVICE(&s->aux), 0, 223 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 224 INTERRUPT_AUX)); 225 226 /* Mailboxes */ | 204 if (err) { 205 error_propagate(errp, err); 206 return; 207 } 208 209 memory_region_add_subregion(&s->peri_mr, AUX_OFFSET, 210 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->aux), 0)); 211 sysbus_connect_irq(SYS_BUS_DEVICE(&s->aux), 0, 212 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 213 INTERRUPT_AUX)); 214 215 /* Mailboxes */ |
227 object_property_set_bool(OBJECT(&s->mboxes), true, "realized", &err); | 216 sysbus_realize(SYS_BUS_DEVICE(&s->mboxes), &err); |
228 if (err) { 229 error_propagate(errp, err); 230 return; 231 } 232 233 memory_region_add_subregion(&s->peri_mr, ARMCTRL_0_SBM_OFFSET, 234 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mboxes), 0)); 235 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mboxes), 0, --- 9 unchanged lines hidden (view full) --- 245 246 object_property_set_uint(OBJECT(&s->fb), ram_size - vcram_size, 247 "vcram-base", &err); 248 if (err) { 249 error_propagate(errp, err); 250 return; 251 } 252 | 217 if (err) { 218 error_propagate(errp, err); 219 return; 220 } 221 222 memory_region_add_subregion(&s->peri_mr, ARMCTRL_0_SBM_OFFSET, 223 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mboxes), 0)); 224 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mboxes), 0, --- 9 unchanged lines hidden (view full) --- 234 235 object_property_set_uint(OBJECT(&s->fb), ram_size - vcram_size, 236 "vcram-base", &err); 237 if (err) { 238 error_propagate(errp, err); 239 return; 240 } 241 |
253 object_property_set_bool(OBJECT(&s->fb), true, "realized", &err); | 242 sysbus_realize(SYS_BUS_DEVICE(&s->fb), &err); |
254 if (err) { 255 error_propagate(errp, err); 256 return; 257 } 258 259 memory_region_add_subregion(&s->mbox_mr, MBOX_CHAN_FB << MBOX_AS_CHAN_SHIFT, 260 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->fb), 0)); 261 sysbus_connect_irq(SYS_BUS_DEVICE(&s->fb), 0, 262 qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_FB)); 263 264 /* Property channel */ | 243 if (err) { 244 error_propagate(errp, err); 245 return; 246 } 247 248 memory_region_add_subregion(&s->mbox_mr, MBOX_CHAN_FB << MBOX_AS_CHAN_SHIFT, 249 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->fb), 0)); 250 sysbus_connect_irq(SYS_BUS_DEVICE(&s->fb), 0, 251 qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_FB)); 252 253 /* Property channel */ |
265 object_property_set_bool(OBJECT(&s->property), true, "realized", &err); | 254 sysbus_realize(SYS_BUS_DEVICE(&s->property), &err); |
266 if (err) { 267 error_propagate(errp, err); 268 return; 269 } 270 271 memory_region_add_subregion(&s->mbox_mr, 272 MBOX_CHAN_PROPERTY << MBOX_AS_CHAN_SHIFT, 273 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->property), 0)); 274 sysbus_connect_irq(SYS_BUS_DEVICE(&s->property), 0, 275 qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_PROPERTY)); 276 277 /* Random Number Generator */ | 255 if (err) { 256 error_propagate(errp, err); 257 return; 258 } 259 260 memory_region_add_subregion(&s->mbox_mr, 261 MBOX_CHAN_PROPERTY << MBOX_AS_CHAN_SHIFT, 262 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->property), 0)); 263 sysbus_connect_irq(SYS_BUS_DEVICE(&s->property), 0, 264 qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_PROPERTY)); 265 266 /* Random Number Generator */ |
278 object_property_set_bool(OBJECT(&s->rng), true, "realized", &err); | 267 sysbus_realize(SYS_BUS_DEVICE(&s->rng), &err); |
279 if (err) { 280 error_propagate(errp, err); 281 return; 282 } 283 284 memory_region_add_subregion(&s->peri_mr, RNG_OFFSET, 285 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->rng), 0)); 286 --- 12 unchanged lines hidden (view full) --- 299 &err); 300 object_property_set_bool(OBJECT(&s->sdhci), true, "pending-insert-quirk", 301 &err); 302 if (err) { 303 error_propagate(errp, err); 304 return; 305 } 306 | 268 if (err) { 269 error_propagate(errp, err); 270 return; 271 } 272 273 memory_region_add_subregion(&s->peri_mr, RNG_OFFSET, 274 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->rng), 0)); 275 --- 12 unchanged lines hidden (view full) --- 288 &err); 289 object_property_set_bool(OBJECT(&s->sdhci), true, "pending-insert-quirk", 290 &err); 291 if (err) { 292 error_propagate(errp, err); 293 return; 294 } 295 |
307 object_property_set_bool(OBJECT(&s->sdhci), true, "realized", &err); | 296 sysbus_realize(SYS_BUS_DEVICE(&s->sdhci), &err); |
308 if (err) { 309 error_propagate(errp, err); 310 return; 311 } 312 313 memory_region_add_subregion(&s->peri_mr, EMMC1_OFFSET, 314 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sdhci), 0)); 315 sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0, 316 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 317 INTERRUPT_ARASANSDIO)); 318 319 /* SDHOST */ | 297 if (err) { 298 error_propagate(errp, err); 299 return; 300 } 301 302 memory_region_add_subregion(&s->peri_mr, EMMC1_OFFSET, 303 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sdhci), 0)); 304 sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0, 305 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 306 INTERRUPT_ARASANSDIO)); 307 308 /* SDHOST */ |
320 object_property_set_bool(OBJECT(&s->sdhost), true, "realized", &err); | 309 sysbus_realize(SYS_BUS_DEVICE(&s->sdhost), &err); |
321 if (err) { 322 error_propagate(errp, err); 323 return; 324 } 325 326 memory_region_add_subregion(&s->peri_mr, MMCI0_OFFSET, 327 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sdhost), 0)); 328 sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhost), 0, 329 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 330 INTERRUPT_SDIO)); 331 332 /* DMA Channels */ | 310 if (err) { 311 error_propagate(errp, err); 312 return; 313 } 314 315 memory_region_add_subregion(&s->peri_mr, MMCI0_OFFSET, 316 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sdhost), 0)); 317 sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhost), 0, 318 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 319 INTERRUPT_SDIO)); 320 321 /* DMA Channels */ |
333 object_property_set_bool(OBJECT(&s->dma), true, "realized", &err); | 322 sysbus_realize(SYS_BUS_DEVICE(&s->dma), &err); |
334 if (err) { 335 error_propagate(errp, err); 336 return; 337 } 338 339 memory_region_add_subregion(&s->peri_mr, DMA_OFFSET, 340 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dma), 0)); 341 memory_region_add_subregion(&s->peri_mr, DMA15_OFFSET, 342 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dma), 1)); 343 344 for (n = 0; n <= 12; n++) { 345 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dma), n, 346 qdev_get_gpio_in_named(DEVICE(&s->ic), 347 BCM2835_IC_GPU_IRQ, 348 INTERRUPT_DMA0 + n)); 349 } 350 351 /* THERMAL */ | 323 if (err) { 324 error_propagate(errp, err); 325 return; 326 } 327 328 memory_region_add_subregion(&s->peri_mr, DMA_OFFSET, 329 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dma), 0)); 330 memory_region_add_subregion(&s->peri_mr, DMA15_OFFSET, 331 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dma), 1)); 332 333 for (n = 0; n <= 12; n++) { 334 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dma), n, 335 qdev_get_gpio_in_named(DEVICE(&s->ic), 336 BCM2835_IC_GPU_IRQ, 337 INTERRUPT_DMA0 + n)); 338 } 339 340 /* THERMAL */ |
352 object_property_set_bool(OBJECT(&s->thermal), true, "realized", &err); | 341 sysbus_realize(SYS_BUS_DEVICE(&s->thermal), &err); |
353 if (err) { 354 error_propagate(errp, err); 355 return; 356 } 357 memory_region_add_subregion(&s->peri_mr, THERMAL_OFFSET, 358 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->thermal), 0)); 359 360 /* GPIO */ | 342 if (err) { 343 error_propagate(errp, err); 344 return; 345 } 346 memory_region_add_subregion(&s->peri_mr, THERMAL_OFFSET, 347 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->thermal), 0)); 348 349 /* GPIO */ |
361 object_property_set_bool(OBJECT(&s->gpio), true, "realized", &err); | 350 sysbus_realize(SYS_BUS_DEVICE(&s->gpio), &err); |
362 if (err) { 363 error_propagate(errp, err); 364 return; 365 } 366 367 memory_region_add_subregion(&s->peri_mr, GPIO_OFFSET, 368 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->gpio), 0)); 369 370 object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->gpio), "sd-bus"); 371 372 /* Mphi */ | 351 if (err) { 352 error_propagate(errp, err); 353 return; 354 } 355 356 memory_region_add_subregion(&s->peri_mr, GPIO_OFFSET, 357 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->gpio), 0)); 358 359 object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->gpio), "sd-bus"); 360 361 /* Mphi */ |
373 object_property_set_bool(OBJECT(&s->mphi), true, "realized", &err); | 362 sysbus_realize(SYS_BUS_DEVICE(&s->mphi), &err); |
374 if (err) { 375 error_propagate(errp, err); 376 return; 377 } 378 379 memory_region_add_subregion(&s->peri_mr, MPHI_OFFSET, 380 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mphi), 0)); 381 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mphi), 0, 382 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 383 INTERRUPT_HOSTPORT)); 384 385 /* DWC2 */ | 363 if (err) { 364 error_propagate(errp, err); 365 return; 366 } 367 368 memory_region_add_subregion(&s->peri_mr, MPHI_OFFSET, 369 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mphi), 0)); 370 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mphi), 0, 371 qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ, 372 INTERRUPT_HOSTPORT)); 373 374 /* DWC2 */ |
386 object_property_set_bool(OBJECT(&s->dwc2), true, "realized", &err); | 375 sysbus_realize(SYS_BUS_DEVICE(&s->dwc2), &err); |
387 if (err) { 388 error_propagate(errp, err); 389 return; 390 } 391 392 memory_region_add_subregion(&s->peri_mr, USB_OTG_OFFSET, 393 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dwc2), 0)); 394 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dwc2), 0, --- 40 unchanged lines hidden --- | 376 if (err) { 377 error_propagate(errp, err); 378 return; 379 } 380 381 memory_region_add_subregion(&s->peri_mr, USB_OTG_OFFSET, 382 sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dwc2), 0)); 383 sysbus_connect_irq(SYS_BUS_DEVICE(&s->dwc2), 0, --- 40 unchanged lines hidden --- |