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
{
54 ARMCPU cpu
[ASPEED_CPUS_NUM
];
55 A15MPPrivState a7mpcore
;
58 MemoryRegion
*dram_mr
;
59 MemoryRegion dram_container
;
61 MemoryRegion spi_boot_container
;
62 MemoryRegion spi_boot
;
65 AspeedTimerCtrlState timerctrl
;
73 AspeedSMCState spi
[ASPEED_SPIS_NUM
];
74 EHCISysBusState ehci
[ASPEED_EHCIS_NUM
];
77 UnimplementedDeviceState sbc_unimplemented
;
79 AspeedWDTState wdt
[ASPEED_WDTS_NUM
];
80 FTGMAC100State ftgmac100
[ASPEED_MACS_NUM
];
81 AspeedMiiState mii
[ASPEED_MACS_NUM
];
83 AspeedGPIOState gpio_1_8v
;
84 AspeedSDHCIState sdhci
;
85 AspeedSDHCIState emmc
;
88 SerialMM uart
[ASPEED_UARTS_NUM
];
90 UnimplementedDeviceState iomem
;
91 UnimplementedDeviceState video
;
92 UnimplementedDeviceState emmc_boot_controller
;
93 UnimplementedDeviceState dpmcu
;
94 UnimplementedDeviceState pwm
;
95 UnimplementedDeviceState espi
;
96 UnimplementedDeviceState udc
;
97 UnimplementedDeviceState sgpiom
;
98 UnimplementedDeviceState jtag
[ASPEED_JTAG_NUM
];
101 #define TYPE_ASPEED_SOC "aspeed-soc"
102 OBJECT_DECLARE_TYPE(AspeedSoCState
, AspeedSoCClass
, ASPEED_SOC
)
104 struct Aspeed2400SoCState
{
105 AspeedSoCState parent
;
108 #define TYPE_ASPEED2400_SOC "aspeed2400-soc"
109 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2400SoCState
, ASPEED2400_SOC
)
111 struct Aspeed2600SoCState
{
112 AspeedSoCState parent
;
115 #define TYPE_ASPEED2600_SOC "aspeed2600-soc"
116 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2600SoCState
, ASPEED2600_SOC
)
118 struct Aspeed10x0SoCState
{
119 AspeedSoCState parent
;
122 #define TYPE_ASPEED10X0_SOC "aspeed10x0-soc"
123 OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState
, ASPEED10X0_SOC
)
125 struct AspeedSoCClass
{
126 DeviceClass parent_class
;
129 const char *cpu_type
;
130 uint32_t silicon_rev
;
132 uint64_t secsram_size
;
139 const hwaddr
*memmap
;
141 qemu_irq (*get_irq
)(AspeedSoCState
*s
, int dev
);
178 ASPEED_DEV_GPIO_1_8V
,
217 #define ASPEED_SOC_SPI_BOOT_ADDR 0x0
219 qemu_irq
aspeed_soc_get_irq(AspeedSoCState
*s
, int dev
);
220 bool aspeed_soc_uart_realize(AspeedSoCState
*s
, Error
**errp
);
221 void aspeed_soc_uart_set_chr(AspeedSoCState
*s
, int dev
, Chardev
*chr
);
222 bool aspeed_soc_dram_init(AspeedSoCState
*s
, Error
**errp
);
223 void aspeed_mmio_map(AspeedSoCState
*s
, SysBusDevice
*dev
, int n
, hwaddr addr
);
224 void aspeed_mmio_map_unimplemented(AspeedSoCState
*s
, SysBusDevice
*dev
,
225 const char *name
, hwaddr addr
,
227 void aspeed_board_init_flashes(AspeedSMCState
*s
, const char *flashtype
,
228 unsigned int count
, int unit0
);
230 #endif /* ASPEED_SOC_H */