4 * Andrew Jeffery <andrew@aj.id.au>
6 * Copyright 2016 IBM Corp.
8 * This code is licensed under the GPL version 2 or later. See
9 * the COPYING file in the top-level directory.
15 #include "hw/cpu/a15mpcore.h"
16 #include "hw/arm/armv7m.h"
17 #include "hw/intc/aspeed_vic.h"
18 #include "hw/misc/aspeed_scu.h"
19 #include "hw/adc/aspeed_adc.h"
20 #include "hw/misc/aspeed_sdmc.h"
21 #include "hw/misc/aspeed_xdma.h"
22 #include "hw/timer/aspeed_timer.h"
23 #include "hw/rtc/aspeed_rtc.h"
24 #include "hw/i2c/aspeed_i2c.h"
25 #include "hw/misc/aspeed_i3c.h"
26 #include "hw/ssi/aspeed_smc.h"
27 #include "hw/misc/aspeed_hace.h"
28 #include "hw/misc/aspeed_sbc.h"
29 #include "hw/watchdog/wdt_aspeed.h"
30 #include "hw/net/ftgmac100.h"
31 #include "target/arm/cpu.h"
32 #include "hw/gpio/aspeed_gpio.h"
33 #include "hw/sd/aspeed_sdhci.h"
34 #include "hw/usb/hcd-ehci.h"
35 #include "qom/object.h"
36 #include "hw/misc/aspeed_lpc.h"
37 #include "hw/misc/unimp.h"
38 #include "hw/misc/aspeed_peci.h"
39 #include "hw/char/serial.h"
41 #define ASPEED_SPIS_NUM 2
42 #define ASPEED_EHCIS_NUM 2
43 #define ASPEED_WDTS_NUM 4
44 #define ASPEED_CPUS_NUM 2
45 #define ASPEED_MACS_NUM 4
46 #define ASPEED_UARTS_NUM 13
47 #define ASPEED_JTAG_NUM 2
49 struct AspeedSoCState
{
53 MemoryRegion
*dram_mr
;
54 MemoryRegion dram_container
;
56 MemoryRegion spi_boot_container
;
57 MemoryRegion spi_boot
;
59 AspeedTimerCtrlState timerctrl
;
67 AspeedSMCState spi
[ASPEED_SPIS_NUM
];
68 EHCISysBusState ehci
[ASPEED_EHCIS_NUM
];
71 UnimplementedDeviceState sbc_unimplemented
;
73 AspeedWDTState wdt
[ASPEED_WDTS_NUM
];
74 FTGMAC100State ftgmac100
[ASPEED_MACS_NUM
];
75 AspeedMiiState mii
[ASPEED_MACS_NUM
];
77 AspeedGPIOState gpio_1_8v
;
78 AspeedSDHCIState sdhci
;
79 AspeedSDHCIState emmc
;
82 SerialMM uart
[ASPEED_UARTS_NUM
];
84 UnimplementedDeviceState iomem
;
85 UnimplementedDeviceState video
;
86 UnimplementedDeviceState emmc_boot_controller
;
87 UnimplementedDeviceState dpmcu
;
88 UnimplementedDeviceState pwm
;
89 UnimplementedDeviceState espi
;
90 UnimplementedDeviceState udc
;
91 UnimplementedDeviceState sgpiom
;
92 UnimplementedDeviceState jtag
[ASPEED_JTAG_NUM
];
95 #define TYPE_ASPEED_SOC "aspeed-soc"
96 OBJECT_DECLARE_TYPE(AspeedSoCState
, AspeedSoCClass
, ASPEED_SOC
)
98 struct Aspeed2400SoCState
{
99 AspeedSoCState parent
;
101 ARMCPU cpu
[ASPEED_CPUS_NUM
];
105 #define TYPE_ASPEED2400_SOC "aspeed2400-soc"
106 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2400SoCState
, ASPEED2400_SOC
)
108 struct Aspeed2600SoCState
{
109 AspeedSoCState parent
;
111 A15MPPrivState a7mpcore
;
112 ARMCPU cpu
[ASPEED_CPUS_NUM
]; /* XXX belong to a7mpcore */
115 #define TYPE_ASPEED2600_SOC "aspeed2600-soc"
116 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2600SoCState
, ASPEED2600_SOC
)
118 struct Aspeed10x0SoCState
{
119 AspeedSoCState parent
;
124 #define TYPE_ASPEED10X0_SOC "aspeed10x0-soc"
125 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState
, ASPEED10X0_SOC
)
127 struct AspeedSoCClass
{
128 DeviceClass parent_class
;
131 /** valid_cpu_types: NULL terminated array of a single CPU type. */
132 const char * const *valid_cpu_types
;
133 uint32_t silicon_rev
;
135 uint64_t secsram_size
;
142 const hwaddr
*memmap
;
144 qemu_irq (*get_irq
)(AspeedSoCState
*s
, int dev
);
147 const char *aspeed_soc_cpu_type(AspeedSoCClass
*sc
);
182 ASPEED_DEV_GPIO_1_8V
,
221 #define ASPEED_SOC_SPI_BOOT_ADDR 0x0
223 qemu_irq
aspeed_soc_get_irq(AspeedSoCState
*s
, int dev
);
224 bool aspeed_soc_uart_realize(AspeedSoCState
*s
, Error
**errp
);
225 void aspeed_soc_uart_set_chr(AspeedSoCState
*s
, int dev
, Chardev
*chr
);
226 bool aspeed_soc_dram_init(AspeedSoCState
*s
, Error
**errp
);
227 void aspeed_mmio_map(AspeedSoCState
*s
, SysBusDevice
*dev
, int n
, hwaddr addr
);
228 void aspeed_mmio_map_unimplemented(AspeedSoCState
*s
, SysBusDevice
*dev
,
229 const char *name
, hwaddr addr
,
231 void aspeed_board_init_flashes(AspeedSMCState
*s
, const char *flashtype
,
232 unsigned int count
, int unit0
);
234 #endif /* ASPEED_SOC_H */