qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 08/16] hw/riscv: microchip_pfsoc: Connect a Cadence SDHCI


From: Bin Meng
Subject: Re: [PATCH v3 08/16] hw/riscv: microchip_pfsoc: Connect a Cadence SDHCI controller and an SD card
Date: Tue, 1 Sep 2020 18:27:19 +0800

Hi Philippe,

On Tue, Sep 1, 2020 at 5:42 PM Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
>
> On 9/1/20 3:39 AM, Bin Meng wrote:
> > From: Bin Meng <bin.meng@windriver.com>
> >
> > Microchip PolarFire SoC integrates one Cadence SDHCI controller.
> > On the Icicle Kit board, one eMMC chip and an external SD card
> > connect to this controller depending on different configuration.
> >
> > As QEMU does not support eMMC yet, we just emulate the SD card
> > configuration. To test this, the Hart Software Services (HSS)
> > should choose the SD card configuration:
> >
> > $ cp boards/icicle-kit-es/def_config.sdcard .config
> > $ make BOARD=icicle-kit-es
> >
> > The SD card image can be built from the Yocto BSP at:
> > https://github.com/polarfire-soc/meta-polarfire-soc-yocto-bsp
> >
> > Note the generated SD card image should be resized before use:
> > $ qemu-img resize /path/to/sdcard.img 4G
> >
> > Launch QEMU with the following command:
> > $ qemu-system-riscv64 -nographic -M microchip-icicle-kit -sd sdcard.img
> >
> > Signed-off-by: Bin Meng <bin.meng@windriver.com>
> >
> > ---
> >
> > (no changes since v2)
> >
> > Changes in v2:
> > - do not initialize TYPE_SYSBUS_SDHCI in the SoC instance_init(),
> >   instead move that to the cadence_sdhci model
> > - do not access generic-sdhci's state directly,
> >   instead move that to the cadence_sdhci model
> >
> >  include/hw/riscv/microchip_pfsoc.h |  4 ++++
> >  hw/riscv/microchip_pfsoc.c         | 23 +++++++++++++++++++++++
> >  hw/riscv/Kconfig                   |  1 +
> >  3 files changed, 28 insertions(+)
> >
> > diff --git a/include/hw/riscv/microchip_pfsoc.h 
> > b/include/hw/riscv/microchip_pfsoc.h
> > index a5efa1d..d810ee8 100644
> > --- a/include/hw/riscv/microchip_pfsoc.h
> > +++ b/include/hw/riscv/microchip_pfsoc.h
> > @@ -23,6 +23,7 @@
> >  #define HW_MICROCHIP_PFSOC_H
> >
> >  #include "hw/char/mchp_pfsoc_mmuart.h"
> > +#include "hw/sd/cadence_sdhci.h"
> >
> >  typedef struct MicrochipPFSoCState {
> >      /*< private >*/
> > @@ -39,6 +40,7 @@ typedef struct MicrochipPFSoCState {
> >      MchpPfSoCMMUartState *serial2;
> >      MchpPfSoCMMUartState *serial3;
> >      MchpPfSoCMMUartState *serial4;
> > +    CadenceSDHCIState sdhci;
> >  } MicrochipPFSoCState;
> >
> >  #define TYPE_MICROCHIP_PFSOC    "microchip.pfsoc"
> > @@ -74,6 +76,7 @@ enum {
> >      MICROCHIP_PFSOC_MMUART0,
> >      MICROCHIP_PFSOC_SYSREG,
> >      MICROCHIP_PFSOC_MPUCFG,
> > +    MICROCHIP_PFSOC_EMMC_SD,
> >      MICROCHIP_PFSOC_MMUART1,
> >      MICROCHIP_PFSOC_MMUART2,
> >      MICROCHIP_PFSOC_MMUART3,
> > @@ -85,6 +88,7 @@ enum {
> >  };
> >
> >  enum {
> > +    MICROCHIP_PFSOC_EMMC_SD_IRQ = 88,
> >      MICROCHIP_PFSOC_MMUART0_IRQ = 90,
> >      MICROCHIP_PFSOC_MMUART1_IRQ = 91,
> >      MICROCHIP_PFSOC_MMUART2_IRQ = 92,
> > diff --git a/hw/riscv/microchip_pfsoc.c b/hw/riscv/microchip_pfsoc.c
> > index cee959a..0b2e9ca 100644
> > --- a/hw/riscv/microchip_pfsoc.c
> > +++ b/hw/riscv/microchip_pfsoc.c
> > @@ -12,6 +12,7 @@
> >   * 1) PLIC (Platform Level Interrupt Controller)
> >   * 2) eNVM (Embedded Non-Volatile Memory)
> >   * 3) MMUARTs (Multi-Mode UART)
> > + * 4) Cadence eMMC/SDHC controller and an SD card connected to it
> >   *
> >   * This board currently generates devicetree dynamically that indicates at 
> > least
> >   * two harts and up to five harts.
> > @@ -75,6 +76,7 @@ static const struct MemmapEntry {
> >      [MICROCHIP_PFSOC_MMUART0] =         { 0x20000000,     0x1000 },
> >      [MICROCHIP_PFSOC_SYSREG] =          { 0x20002000,     0x2000 },
> >      [MICROCHIP_PFSOC_MPUCFG] =          { 0x20005000,     0x1000 },
> > +    [MICROCHIP_PFSOC_EMMC_SD] =         { 0x20008000,     0x1000 },
> >      [MICROCHIP_PFSOC_MMUART1] =         { 0x20100000,     0x1000 },
> >      [MICROCHIP_PFSOC_MMUART2] =         { 0x20102000,     0x1000 },
> >      [MICROCHIP_PFSOC_MMUART3] =         { 0x20104000,     0x1000 },
> > @@ -111,6 +113,9 @@ static void microchip_pfsoc_soc_instance_init(Object 
> > *obj)
> >      qdev_prop_set_string(DEVICE(&s->u_cpus), "cpu-type",
> >                           TYPE_RISCV_CPU_SIFIVE_U54);
> >      qdev_prop_set_uint64(DEVICE(&s->u_cpus), "resetvec", RESET_VECTOR);
> > +
> > +    object_initialize_child(obj, "sd-controller", &s->sdhci,
> > +                            TYPE_CADENCE_SDHCI);
> >  }
> >
> >  static void microchip_pfsoc_soc_realize(DeviceState *dev, Error **errp)
> > @@ -223,6 +228,13 @@ static void microchip_pfsoc_soc_realize(DeviceState 
> > *dev, Error **errp)
> >          memmap[MICROCHIP_PFSOC_MPUCFG].base,
> >          memmap[MICROCHIP_PFSOC_MPUCFG].size);
> >
> > +    /* SDHCI */
> > +    sysbus_realize(SYS_BUS_DEVICE(&s->sdhci), errp);
> > +    sysbus_mmio_map(SYS_BUS_DEVICE(&s->sdhci), 0,
> > +                    memmap[MICROCHIP_PFSOC_EMMC_SD].base);
> > +    sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0,
> > +        qdev_get_gpio_in(DEVICE(s->plic), MICROCHIP_PFSOC_EMMC_SD_IRQ));
> > +
> >      /* MMUARTs */
> >      s->serial0 = mchp_pfsoc_mmuart_create(system_memory,
> >          memmap[MICROCHIP_PFSOC_MMUART0].base,
> > @@ -290,6 +302,7 @@ static void 
> > microchip_icicle_kit_machine_init(MachineState *machine)
> >      MicrochipIcicleKitState *s = MICROCHIP_ICICLE_KIT_MACHINE(machine);
> >      MemoryRegion *system_memory = get_system_memory();
> >      MemoryRegion *main_mem = g_new(MemoryRegion, 1);
> > +    DriveInfo *dinfo = drive_get_next(IF_SD);
>
> Ideally this part should be in the machine, not the soc.
>
> Maybe you can alias the "drive" property as "sd-drive" in the soc,
> and move the card attach to the machine?

Thanks for the review.

I am not sure I understand your suggestion. Currently the SD card
attach codes are already in the machine codes
microchip_icicle_kit_machine_init()

>
> Can be done later if you prefer:
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Regards,
Bin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]