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 ---