qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@redhat.com>
To: Jamin Lin <jamin_lin@aspeedtech.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Steven Lee <steven_lee@aspeedtech.com>,
	Troy Lee <leetroy@gmail.com>,
	Andrew Jeffery <andrew@codeconstruct.com.au>,
	Joel Stanley <joel@jms.id.au>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	"open list:ARM TCG CPUs" <qemu-arm@nongnu.org>,
	"open list:All patches CC here" <qemu-devel@nongnu.org>
Cc: troy_lee@aspeedtech.com, nabihestefan@google.com,
	wuhaotsh@google.com, titusr@google.com
Subject: Re: [SPAM] [PATCH v4 08/14] hw/arm/aspeed_ast2600: Add PCIe RC support (RC_H only)
Date: Fri, 19 Sep 2025 10:05:49 +0200	[thread overview]
Message-ID: <bc2493e8-0e83-43a9-82de-bf85e5576d7c@redhat.com> (raw)
In-Reply-To: <20250919032431.3316764-9-jamin_lin@aspeedtech.com>

On 9/19/25 05:24, Jamin Lin wrote:
> Wire up the PCIe Root Complex in the AST2600 SoC model.
> 
> According to the AST2600 firmware driver, only the RC_H controller is
> supported. RC_H uses PCIe PHY1 at 0x1e6ed200 and the PCIe config (H2X)
> register block at 0x1e770000. The RC_H MMIO window is mapped at
> 0x70000000–0x80000000. RC_L is not modeled. The RC_H interrupt is
> wired to IRQ 168. Only RC_H is realized and connected to the SoC
> interrupt controller.
> 
> The SoC integration initializes PCIe PHY1, instantiates a single RC
> instance, wires its MMIO regions, and connects its interrupt. An alias
> region is added to map the RC MMIO space into the guest physical address
> space.
> 
> This provides enough functionality for firmware and guest drivers to
> discover and use the AST2600 RC_H Root Complex while leaving RC_L
> unimplemented.
> 
> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>


Reviewed-by: Cédric Le Goater <clg@redhat.com>

Thanks,

C.


> ---
>   include/hw/arm/aspeed_soc.h |  1 +
>   hw/arm/aspeed_ast2600.c     | 74 +++++++++++++++++++++++++++++++++++++
>   2 files changed, 75 insertions(+)
> 
> diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
> index 79fe353f83..a0cf433775 100644
> --- a/include/hw/arm/aspeed_soc.h
> +++ b/include/hw/arm/aspeed_soc.h
> @@ -62,6 +62,7 @@ struct AspeedSoCState {
>       MemoryRegion spi_boot_container;
>       MemoryRegion spi_boot;
>       MemoryRegion vbootrom;
> +    MemoryRegion pcie_mmio_alias[ASPEED_PCIE_NUM];
>       AddressSpace dram_as;
>       AspeedRtcState rtc;
>       AspeedTimerCtrlState timerctrl;
> diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
> index d12707f0ab..17c3ae8bb0 100644
> --- a/hw/arm/aspeed_ast2600.c
> +++ b/hw/arm/aspeed_ast2600.c
> @@ -48,11 +48,13 @@ static const hwaddr aspeed_soc_ast2600_memmap[] = {
>       [ASPEED_DEV_XDMA]      = 0x1E6E7000,
>       [ASPEED_DEV_ADC]       = 0x1E6E9000,
>       [ASPEED_DEV_DP]        = 0x1E6EB000,
> +    [ASPEED_DEV_PCIE_PHY1] = 0x1E6ED200,
>       [ASPEED_DEV_SBC]       = 0x1E6F2000,
>       [ASPEED_DEV_EMMC_BC]   = 0x1E6f5000,
>       [ASPEED_DEV_VIDEO]     = 0x1E700000,
>       [ASPEED_DEV_SDHCI]     = 0x1E740000,
>       [ASPEED_DEV_EMMC]      = 0x1E750000,
> +    [ASPEED_DEV_PCIE0]     = 0x1E770000,
>       [ASPEED_DEV_GPIO]      = 0x1E780000,
>       [ASPEED_DEV_GPIO_1_8V] = 0x1E780800,
>       [ASPEED_DEV_RTC]       = 0x1E781000,
> @@ -79,6 +81,7 @@ static const hwaddr aspeed_soc_ast2600_memmap[] = {
>       [ASPEED_DEV_FSI1]      = 0x1E79B000,
>       [ASPEED_DEV_FSI2]      = 0x1E79B100,
>       [ASPEED_DEV_I3C]       = 0x1E7A0000,
> +    [ASPEED_DEV_PCIE_MMIO1] = 0x70000000,
>       [ASPEED_DEV_SDRAM]     = 0x80000000,
>   };
>   
> @@ -127,6 +130,7 @@ static const int aspeed_soc_ast2600_irqmap[] = {
>       [ASPEED_DEV_LPC]       = 35,
>       [ASPEED_DEV_IBT]       = 143,
>       [ASPEED_DEV_I2C]       = 110,   /* 110 -> 125 */
> +    [ASPEED_DEV_PCIE0]     = 168,
>       [ASPEED_DEV_PECI]      = 38,
>       [ASPEED_DEV_ETH1]      = 2,
>       [ASPEED_DEV_ETH2]      = 3,
> @@ -191,6 +195,10 @@ static void aspeed_soc_ast2600_init(Object *obj)
>       snprintf(typename, sizeof(typename), "aspeed.i2c-%s", socname);
>       object_initialize_child(obj, "i2c", &s->i2c, typename);
>   
> +    object_initialize_child(obj, "pcie-cfg", &s->pcie[0], TYPE_ASPEED_PCIE_CFG);
> +    object_initialize_child(obj, "pcie-phy[*]", &s->pcie_phy[0],
> +                            TYPE_ASPEED_PCIE_PHY);
> +
>       object_initialize_child(obj, "peci", &s->peci, TYPE_ASPEED_PECI);
>   
>       snprintf(typename, sizeof(typename), "aspeed.fmc-%s", socname);
> @@ -285,6 +293,67 @@ static uint64_t aspeed_calc_affinity(int cpu)
>       return (0xf << ARM_AFF1_SHIFT) | cpu;
>   }
>   
> +/*
> + * PCIe Root Complex (RC)
> + *
> + * H2X register space (single block 0x00-0xFF):
> + *   0x00-0x7F : shared by RC_L (PCIe0) and RC_H (PCIe1)
> + *   0x80-0xBF : RC_L only
> + *   0xC0-0xFF : RC_H only
> + *
> + * Model scope / limitations:
> + *   - Firmware supports RC_H only; this QEMU model does not support RC_L.
> + *   - RC_H uses PHY1 and the MMIO window [0x70000000, 0x80000000]
> + *     (aka MMIO1).
> + *
> + * Indexing convention (this model):
> + *   - Expose a single logical instance at index 0.
> + *   - pcie[0] -> hardware RC_H (PCIe1)
> + *   - phy[0]  -> hardware PHY1
> + *   - mmio.0 -> guest address range MMIO1: 0x70000000-0x80000000
> + *   - RC_L / PCIe0 is not created and mapped.
> + */
> +static bool aspeed_soc_ast2600_pcie_realize(DeviceState *dev, Error **errp)
> +{
> +    Aspeed2600SoCState *a = ASPEED2600_SOC(dev);
> +    AspeedSoCState *s = ASPEED_SOC(dev);
> +    AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
> +    MemoryRegion *mmio_mr = NULL;
> +    qemu_irq irq;
> +
> +    if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie_phy[0]), errp)) {
> +        return false;
> +    }
> +    aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie_phy[0]), 0,
> +                    sc->memmap[ASPEED_DEV_PCIE_PHY1]);
> +
> +    object_property_set_int(OBJECT(&s->pcie[0]), "dram-base",
> +                            sc->memmap[ASPEED_DEV_SDRAM],
> +                            &error_abort);
> +    object_property_set_link(OBJECT(&s->pcie[0]), "dram", OBJECT(s->dram_mr),
> +                             &error_abort);
> +    if (!sysbus_realize(SYS_BUS_DEVICE(&s->pcie[0]), errp)) {
> +        return false;
> +    }
> +    aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->pcie[0]), 0,
> +                    sc->memmap[ASPEED_DEV_PCIE0]);
> +
> +    irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
> +                           sc->irqmap[ASPEED_DEV_PCIE0]);
> +    sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie[0].rc), 0, irq);
> +
> +    mmio_mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->pcie[0].rc), 1);
> +    memory_region_init_alias(&s->pcie_mmio_alias[0], OBJECT(&s->pcie[0].rc),
> +                             "aspeed.pcie-mmio", mmio_mr,
> +                             sc->memmap[ASPEED_DEV_PCIE_MMIO1],
> +                             0x10000000);
> +    memory_region_add_subregion(s->memory,
> +                                sc->memmap[ASPEED_DEV_PCIE_MMIO1],
> +                                &s->pcie_mmio_alias[0]);
> +
> +    return true;
> +}
> +
>   static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
>   {
>       int i;
> @@ -438,6 +507,11 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
>       sysbus_connect_irq(SYS_BUS_DEVICE(&s->peci), 0,
>                          aspeed_soc_get_irq(s, ASPEED_DEV_PECI));
>   
> +    /* PCIe Root Complex (RC) */
> +    if (!aspeed_soc_ast2600_pcie_realize(dev, errp)) {
> +        return;
> +    }
> +
>       /* FMC, The number of CS is set at the board level */
>       object_property_set_link(OBJECT(&s->fmc), "dram", OBJECT(s->dram_mr),
>                                &error_abort);



  reply	other threads:[~2025-09-19  8:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-19  3:24 [PATCH v4 00/14] Support PCIe RC to AST2600 and AST2700 Jamin Lin via
2025-09-19  3:24 ` [PATCH v4 01/14] hw/pci/pci_ids: Add PCI vendor ID for ASPEED Jamin Lin via
2025-09-19  3:24 ` [PATCH v4 02/14] hw/pci-host/aspeed: Add AST2600 PCIe PHY model Jamin Lin via
2025-09-19  7:13   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 03/14] hw/pci-host/aspeed: Add AST2600 PCIe config space and host bridge Jamin Lin via
2025-09-19  7:13   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 04/14] hw/pci-host/aspeed: Add AST2600 PCIe Root Device support Jamin Lin via
2025-09-19  8:05   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 05/14] hw/pci-host/aspeed: Add AST2600 PCIe Root Port and make address configurable Jamin Lin via
2025-09-19  8:05   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 06/14] hw/pci-host/aspeed: Add MSI support and per-RC IOMMU address space Jamin Lin via
2025-09-19  8:06   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 07/14] hw/arm/aspeed: Wire up PCIe devices in SoC model Jamin Lin via
2025-09-19  3:24 ` [PATCH v4 08/14] hw/arm/aspeed_ast2600: Add PCIe RC support (RC_H only) Jamin Lin via
2025-09-19  8:05   ` Cédric Le Goater [this message]
2025-09-19  3:24 ` [PATCH v4 09/14] hw/pci-host/aspeed: Add AST2700 PCIe PHY Jamin Lin via
2025-09-19  8:06   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 10/14] hw/pci-host/aspeed: Add AST2700 PCIe config with dedicated H2X blocks Jamin Lin via
2025-09-19  8:57   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 11/14] hw/pci-host/aspeed: Disable Root Device and place Root Port at 00:00.0 to AST2700 Jamin Lin via
2025-09-19  8:55   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 12/14] hw/arm/aspeed_ast27x0: Introduce 3 PCIe RCs for AST2700 Jamin Lin via
2025-09-19  8:53   ` [SPAM] " Cédric Le Goater
2025-09-19  8:58     ` Jamin Lin
2025-09-19  3:24 ` [PATCH v4 13/14] tests/functional/arm/test_aspeed_ast2600: Add PCIe and network test Jamin Lin via
2025-09-19  8:05   ` [SPAM] " Cédric Le Goater
2025-09-19  3:24 ` [PATCH v4 14/14] tests/functional/aarch64/aspeed_ast2700: Add PCIe and network tests Jamin Lin via
2025-09-19  8:56   ` [SPAM] " Cédric Le Goater

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bc2493e8-0e83-43a9-82de-bf85e5576d7c@redhat.com \
    --to=clg@redhat.com \
    --cc=andrew@codeconstruct.com.au \
    --cc=jamin_lin@aspeedtech.com \
    --cc=joel@jms.id.au \
    --cc=leetroy@gmail.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=nabihestefan@google.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=steven_lee@aspeedtech.com \
    --cc=titusr@google.com \
    --cc=troy_lee@aspeedtech.com \
    --cc=wuhaotsh@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).