[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/36] hw/arm: Add AHCI/SATA controller to Allwinner R40 and Banan
|
From: |
Peter Maydell |
|
Subject: |
[PULL 08/36] hw/arm: Add AHCI/SATA controller to Allwinner R40 and Bananapi board |
|
Date: |
Fri, 26 Jan 2024 14:33:13 +0000 |
From: Guenter Roeck <linux@roeck-us.net>
Allwinner R40 supports an AHCI compliant SATA controller.
Add support for it.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Message-id: 20240115182757.1095012-3-linux@roeck-us.net
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
docs/system/arm/bananapi_m2u.rst | 1 +
include/hw/arm/allwinner-r40.h | 3 +++
hw/arm/allwinner-r40.c | 12 +++++++++++-
hw/arm/Kconfig | 1 +
4 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/docs/system/arm/bananapi_m2u.rst b/docs/system/arm/bananapi_m2u.rst
index e77c425e2cb..542310591d6 100644
--- a/docs/system/arm/bananapi_m2u.rst
+++ b/docs/system/arm/bananapi_m2u.rst
@@ -22,6 +22,7 @@ The Banana Pi M2U machine supports the following devices:
* EMAC ethernet
* GMAC ethernet
* Clock Control Unit
+ * SATA
* TWI (I2C)
* USB 2.0
diff --git a/include/hw/arm/allwinner-r40.h b/include/hw/arm/allwinner-r40.h
index ae82822d424..c589fcc1c15 100644
--- a/include/hw/arm/allwinner-r40.h
+++ b/include/hw/arm/allwinner-r40.h
@@ -22,6 +22,7 @@
#include "qom/object.h"
#include "hw/timer/allwinner-a10-pit.h"
+#include "hw/ide/ahci.h"
#include "hw/intc/arm_gic.h"
#include "hw/sd/allwinner-sdhost.h"
#include "hw/misc/allwinner-r40-ccu.h"
@@ -46,6 +47,7 @@ enum {
AW_R40_DEV_MMC1,
AW_R40_DEV_MMC2,
AW_R40_DEV_MMC3,
+ AW_R40_DEV_AHCI,
AW_R40_DEV_EHCI1,
AW_R40_DEV_OHCI1,
AW_R40_DEV_EHCI2,
@@ -112,6 +114,7 @@ struct AwR40State {
const hwaddr *memmap;
AwSRAMCState sramc;
AwA10PITState timer;
+ AllwinnerAHCIState sata;
AwSdHostState mmc[AW_R40_NUM_MMCS];
EHCISysBusState ehci[AW_R40_NUM_USB];
OHCISysBusState ohci[AW_R40_NUM_USB];
diff --git a/hw/arm/allwinner-r40.c b/hw/arm/allwinner-r40.c
index 2e8943eff74..534be4a735d 100644
--- a/hw/arm/allwinner-r40.c
+++ b/hw/arm/allwinner-r40.c
@@ -46,6 +46,7 @@ const hwaddr allwinner_r40_memmap[] = {
[AW_R40_DEV_MMC1] = 0x01c10000,
[AW_R40_DEV_MMC2] = 0x01c11000,
[AW_R40_DEV_MMC3] = 0x01c12000,
+ [AW_R40_DEV_AHCI] = 0x01c18000,
[AW_R40_DEV_EHCI1] = 0x01c19000,
[AW_R40_DEV_OHCI1] = 0x01c19400,
[AW_R40_DEV_EHCI2] = 0x01c1c000,
@@ -93,7 +94,6 @@ static struct AwR40Unimplemented r40_unimplemented[] = {
{ "usb0-host", 0x01c14000, 4 * KiB },
{ "crypto", 0x01c15000, 4 * KiB },
{ "spi2", 0x01c17000, 4 * KiB },
- { "sata", 0x01c18000, 4 * KiB },
{ "usb1-phy", 0x01c19800, 2 * KiB },
{ "sid", 0x01c1b000, 4 * KiB },
{ "usb2-phy", 0x01c1c800, 2 * KiB },
@@ -186,6 +186,7 @@ enum {
AW_R40_GIC_SPI_MMC2 = 34,
AW_R40_GIC_SPI_MMC3 = 35,
AW_R40_GIC_SPI_EMAC = 55,
+ AW_R40_GIC_SPI_AHCI = 56,
AW_R40_GIC_SPI_OHCI1 = 64,
AW_R40_GIC_SPI_OHCI2 = 65,
AW_R40_GIC_SPI_EHCI1 = 76,
@@ -285,6 +286,8 @@ static void allwinner_r40_init(Object *obj)
TYPE_AW_SDHOST_SUN50I_A64);
}
+ object_initialize_child(obj, "sata", &s->sata, TYPE_ALLWINNER_AHCI);
+
for (size_t i = 0; i < AW_R40_NUM_USB; i++) {
object_initialize_child(obj, "ehci[*]", &s->ehci[i],
TYPE_PLATFORM_EHCI);
@@ -423,6 +426,13 @@ static void allwinner_r40_realize(DeviceState *dev, Error
**errp)
sysbus_realize(SYS_BUS_DEVICE(&s->ccu), &error_fatal);
sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccu), 0, s->memmap[AW_R40_DEV_CCU]);
+ /* SATA / AHCI */
+ sysbus_realize(SYS_BUS_DEVICE(&s->sata), &error_fatal);
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->sata), 0,
+ allwinner_r40_memmap[AW_R40_DEV_AHCI]);
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->sata), 0,
+ qdev_get_gpio_in(DEVICE(&s->gic), AW_R40_GIC_SPI_AHCI));
+
/* USB */
for (size_t i = 0; i < AW_R40_NUM_USB; i++) {
g_autofree char *bus = g_strdup_printf("usb-bus.%zu", i);
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 4a2a5fca974..704517edd4f 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -408,6 +408,7 @@ config ALLWINNER_H3
config ALLWINNER_R40
bool
default y if TCG && ARM
+ select AHCI
select ALLWINNER_SRAMC
select ALLWINNER_A10_PIT
select AXP2XX_PMU
--
2.34.1
- [PULL 09/36] hw/arm: Add watchdog timer to Allwinner H40 and Bananapi board, (continued)
- [PULL 09/36] hw/arm: Add watchdog timer to Allwinner H40 and Bananapi board, Peter Maydell, 2024/01/26
- [PULL 02/36] target/arm: Fix VNCR fault detection logic, Peter Maydell, 2024/01/26
- [PULL 03/36] hw/arm/virt.c: Remove newline from error_report() string, Peter Maydell, 2024/01/26
- [PULL 06/36] hw/arm/nseries: Unconditionally map the TUSB6010 USB Host controller, Peter Maydell, 2024/01/26
- [PULL 10/36] hw/arm/exynos4210: Include missing 'exec/tswap.h' header, Peter Maydell, 2024/01/26
- [PULL 11/36] hw/arm/xilinx_zynq: Include missing 'exec/tswap.h' header, Peter Maydell, 2024/01/26
- [PULL 13/36] hw/arm/xlnx-versal: Include missing 'cpu.h' header, Peter Maydell, 2024/01/26
- [PULL 15/36] target/arm/cpregs: Include missing 'hw/registerfields.h' header, Peter Maydell, 2024/01/26
- [PULL 04/36] hw/arm/musicpal: Convert to qemu_add_kbd_event_handler(), Peter Maydell, 2024/01/26
- [PULL 12/36] hw/arm/smmuv3: Include missing 'hw/registerfields.h' header, Peter Maydell, 2024/01/26
- [PULL 08/36] hw/arm: Add AHCI/SATA controller to Allwinner R40 and Bananapi board,
Peter Maydell <=
- [PULL 20/36] target/arm: Declare ARM_CPU_TYPE_NAME/SUFFIX in 'cpu-qom.h', Peter Maydell, 2024/01/26
- [PULL 14/36] target/arm/cpu-features: Include missing 'hw/registerfields.h' header, Peter Maydell, 2024/01/26
- [PULL 16/36] target/arm/cpregs: Include missing 'kvm-consts.h' header, Peter Maydell, 2024/01/26
- [PULL 17/36] target/arm: Rename arm_cpu_mp_affinity, Peter Maydell, 2024/01/26
- [PULL 18/36] target/arm: Create arm_cpu_mp_affinity, Peter Maydell, 2024/01/26
- [PULL 19/36] target/arm: Expose arm_cpu_mp_affinity() in 'multiprocessing.h' header, Peter Maydell, 2024/01/26
- [PULL 21/36] hw/cpu/a9mpcore: Build it only once, Peter Maydell, 2024/01/26
- [PULL 23/36] hw/misc/xlnx-versal-crl: Build it only once, Peter Maydell, 2024/01/26
- [PULL 22/36] hw/misc/xlnx-versal-crl: Include generic 'cpu-qom.h' instead of 'cpu.h', Peter Maydell, 2024/01/26
- [PULL 25/36] hw/arm/armv7m: Make 'hw/intc/armv7m_nvic.h' a target agnostic header, Peter Maydell, 2024/01/26