allwinner-h3.c (82e4838249b23c3fe20cee295f9c1b3e6abd68d1) | allwinner-h3.c (29d08975d1cc2ec668d9eb430c507a4fee515ea5) |
---|---|
1/* 2 * Allwinner H3 System on Chip emulation 3 * 4 * Copyright (C) 2019 Niek Linnenbank <nieklinnenbank@gmail.com> 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 2 of the License, or --- 40 unchanged lines hidden (view full) --- 49 [AW_H3_EHCI3] = 0x01c1d000, 50 [AW_H3_OHCI3] = 0x01c1d400, 51 [AW_H3_CCU] = 0x01c20000, 52 [AW_H3_PIT] = 0x01c20c00, 53 [AW_H3_UART0] = 0x01c28000, 54 [AW_H3_UART1] = 0x01c28400, 55 [AW_H3_UART2] = 0x01c28800, 56 [AW_H3_UART3] = 0x01c28c00, | 1/* 2 * Allwinner H3 System on Chip emulation 3 * 4 * Copyright (C) 2019 Niek Linnenbank <nieklinnenbank@gmail.com> 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 2 of the License, or --- 40 unchanged lines hidden (view full) --- 49 [AW_H3_EHCI3] = 0x01c1d000, 50 [AW_H3_OHCI3] = 0x01c1d400, 51 [AW_H3_CCU] = 0x01c20000, 52 [AW_H3_PIT] = 0x01c20c00, 53 [AW_H3_UART0] = 0x01c28000, 54 [AW_H3_UART1] = 0x01c28400, 55 [AW_H3_UART2] = 0x01c28800, 56 [AW_H3_UART3] = 0x01c28c00, |
57 [AW_H3_EMAC] = 0x01c30000, |
|
57 [AW_H3_GIC_DIST] = 0x01c81000, 58 [AW_H3_GIC_CPU] = 0x01c82000, 59 [AW_H3_GIC_HYP] = 0x01c84000, 60 [AW_H3_GIC_VCPU] = 0x01c86000, 61 [AW_H3_CPUCFG] = 0x01f01c00, 62 [AW_H3_SDRAM] = 0x40000000 63}; 64 --- 36 unchanged lines hidden (view full) --- 101 { "uart0", 0x01c28000, 1 * KiB }, 102 { "uart1", 0x01c28400, 1 * KiB }, 103 { "uart2", 0x01c28800, 1 * KiB }, 104 { "uart3", 0x01c28c00, 1 * KiB }, 105 { "twi0", 0x01c2ac00, 1 * KiB }, 106 { "twi1", 0x01c2b000, 1 * KiB }, 107 { "twi2", 0x01c2b400, 1 * KiB }, 108 { "scr", 0x01c2c400, 1 * KiB }, | 58 [AW_H3_GIC_DIST] = 0x01c81000, 59 [AW_H3_GIC_CPU] = 0x01c82000, 60 [AW_H3_GIC_HYP] = 0x01c84000, 61 [AW_H3_GIC_VCPU] = 0x01c86000, 62 [AW_H3_CPUCFG] = 0x01f01c00, 63 [AW_H3_SDRAM] = 0x40000000 64}; 65 --- 36 unchanged lines hidden (view full) --- 102 { "uart0", 0x01c28000, 1 * KiB }, 103 { "uart1", 0x01c28400, 1 * KiB }, 104 { "uart2", 0x01c28800, 1 * KiB }, 105 { "uart3", 0x01c28c00, 1 * KiB }, 106 { "twi0", 0x01c2ac00, 1 * KiB }, 107 { "twi1", 0x01c2b000, 1 * KiB }, 108 { "twi2", 0x01c2b400, 1 * KiB }, 109 { "scr", 0x01c2c400, 1 * KiB }, |
109 { "emac", 0x01c30000, 64 * KiB }, | |
110 { "gpu", 0x01c40000, 64 * KiB }, 111 { "hstmr", 0x01c60000, 4 * KiB }, 112 { "dramcom", 0x01c62000, 4 * KiB }, 113 { "dramctl0", 0x01c63000, 4 * KiB }, 114 { "dramphy0", 0x01c65000, 4 * KiB }, 115 { "spi0", 0x01c68000, 4 * KiB }, 116 { "spi1", 0x01c69000, 4 * KiB }, 117 { "csi", 0x01cb0000, 320 * KiB }, --- 39 unchanged lines hidden (view full) --- 157 AW_H3_GIC_SPI_EHCI0 = 72, 158 AW_H3_GIC_SPI_OHCI0 = 73, 159 AW_H3_GIC_SPI_EHCI1 = 74, 160 AW_H3_GIC_SPI_OHCI1 = 75, 161 AW_H3_GIC_SPI_EHCI2 = 76, 162 AW_H3_GIC_SPI_OHCI2 = 77, 163 AW_H3_GIC_SPI_EHCI3 = 78, 164 AW_H3_GIC_SPI_OHCI3 = 79, | 110 { "gpu", 0x01c40000, 64 * KiB }, 111 { "hstmr", 0x01c60000, 4 * KiB }, 112 { "dramcom", 0x01c62000, 4 * KiB }, 113 { "dramctl0", 0x01c63000, 4 * KiB }, 114 { "dramphy0", 0x01c65000, 4 * KiB }, 115 { "spi0", 0x01c68000, 4 * KiB }, 116 { "spi1", 0x01c69000, 4 * KiB }, 117 { "csi", 0x01cb0000, 320 * KiB }, --- 39 unchanged lines hidden (view full) --- 157 AW_H3_GIC_SPI_EHCI0 = 72, 158 AW_H3_GIC_SPI_OHCI0 = 73, 159 AW_H3_GIC_SPI_EHCI1 = 74, 160 AW_H3_GIC_SPI_OHCI1 = 75, 161 AW_H3_GIC_SPI_EHCI2 = 76, 162 AW_H3_GIC_SPI_OHCI2 = 77, 163 AW_H3_GIC_SPI_EHCI3 = 78, 164 AW_H3_GIC_SPI_OHCI3 = 79, |
165 AW_H3_GIC_SPI_EMAC = 82 |
|
165}; 166 167/* Allwinner H3 general constants */ 168enum { 169 AW_H3_GIC_NUM_SPI = 128 170}; 171 172static void allwinner_h3_init(Object *obj) --- 29 unchanged lines hidden (view full) --- 202 203 sysbus_init_child_obj(obj, "sid", &s->sid, sizeof(s->sid), 204 TYPE_AW_SID); 205 object_property_add_alias(obj, "identifier", OBJECT(&s->sid), 206 "identifier", &error_abort); 207 208 sysbus_init_child_obj(obj, "mmc0", &s->mmc0, sizeof(s->mmc0), 209 TYPE_AW_SDHOST_SUN5I); | 166}; 167 168/* Allwinner H3 general constants */ 169enum { 170 AW_H3_GIC_NUM_SPI = 128 171}; 172 173static void allwinner_h3_init(Object *obj) --- 29 unchanged lines hidden (view full) --- 203 204 sysbus_init_child_obj(obj, "sid", &s->sid, sizeof(s->sid), 205 TYPE_AW_SID); 206 object_property_add_alias(obj, "identifier", OBJECT(&s->sid), 207 "identifier", &error_abort); 208 209 sysbus_init_child_obj(obj, "mmc0", &s->mmc0, sizeof(s->mmc0), 210 TYPE_AW_SDHOST_SUN5I); |
211 212 sysbus_init_child_obj(obj, "emac", &s->emac, sizeof(s->emac), 213 TYPE_AW_SUN8I_EMAC); |
|
210} 211 212static void allwinner_h3_realize(DeviceState *dev, Error **errp) 213{ 214 AwH3State *s = AW_H3(dev); 215 unsigned i; 216 217 /* CPUs */ --- 114 unchanged lines hidden (view full) --- 332 qdev_init_nofail(DEVICE(&s->mmc0)); 333 sysbus_mmio_map(SYS_BUS_DEVICE(&s->mmc0), 0, s->memmap[AW_H3_MMC0]); 334 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mmc0), 0, 335 qdev_get_gpio_in(DEVICE(&s->gic), AW_H3_GIC_SPI_MMC0)); 336 337 object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->mmc0), 338 "sd-bus", &error_abort); 339 | 214} 215 216static void allwinner_h3_realize(DeviceState *dev, Error **errp) 217{ 218 AwH3State *s = AW_H3(dev); 219 unsigned i; 220 221 /* CPUs */ --- 114 unchanged lines hidden (view full) --- 336 qdev_init_nofail(DEVICE(&s->mmc0)); 337 sysbus_mmio_map(SYS_BUS_DEVICE(&s->mmc0), 0, s->memmap[AW_H3_MMC0]); 338 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mmc0), 0, 339 qdev_get_gpio_in(DEVICE(&s->gic), AW_H3_GIC_SPI_MMC0)); 340 341 object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->mmc0), 342 "sd-bus", &error_abort); 343 |
344 /* EMAC */ 345 if (nd_table[0].used) { 346 qemu_check_nic_model(&nd_table[0], TYPE_AW_SUN8I_EMAC); 347 qdev_set_nic_properties(DEVICE(&s->emac), &nd_table[0]); 348 } 349 qdev_init_nofail(DEVICE(&s->emac)); 350 sysbus_mmio_map(SYS_BUS_DEVICE(&s->emac), 0, s->memmap[AW_H3_EMAC]); 351 sysbus_connect_irq(SYS_BUS_DEVICE(&s->emac), 0, 352 qdev_get_gpio_in(DEVICE(&s->gic), AW_H3_GIC_SPI_EMAC)); 353 |
|
340 /* Universal Serial Bus */ 341 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI0], 342 qdev_get_gpio_in(DEVICE(&s->gic), 343 AW_H3_GIC_SPI_EHCI0)); 344 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI1], 345 qdev_get_gpio_in(DEVICE(&s->gic), 346 AW_H3_GIC_SPI_EHCI1)); 347 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI2], --- 67 unchanged lines hidden --- | 354 /* Universal Serial Bus */ 355 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI0], 356 qdev_get_gpio_in(DEVICE(&s->gic), 357 AW_H3_GIC_SPI_EHCI0)); 358 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI1], 359 qdev_get_gpio_in(DEVICE(&s->gic), 360 AW_H3_GIC_SPI_EHCI1)); 361 sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI2], --- 67 unchanged lines hidden --- |