[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 06/12] aspeed/smc: Wire CS lines at reset
From: |
Joel Stanley |
Subject: |
Re: [PATCH v2 06/12] aspeed/smc: Wire CS lines at reset |
Date: |
Wed, 7 Jun 2023 10:49:27 +0000 |
On Wed, 7 Jun 2023 at 04:40, Cédric Le Goater <clg@kaod.org> wrote:
>
> Currently, a set of default flash devices is created at machine init
> and drives defined on the QEMU command line are associated to the FMC
> and SPI controllers in sequence :
>
> -drive file<file>,format=raw,if=mtd
> -drive file<file1>,format=raw,if=mtd
>
> The CS lines are wired in the same creation loop. This makes a strong
> assumption on the ordering and is not very flexible since only a
> limited set of flash devices can be defined : 1 FMC + 1 or 2 SPI,
> which is less than what the SoC really supports.
>
> A better alternative would be to define the flash devices on the
> command line using a blockdev attached to a CS line of a SSI bus :
>
> -blockdev node-name=fmc0,driver=file,filename=./flash.img
> -device mx66u51235f,addr=0x0,bus=ssi.0,drive=fmc0
I don't like the idea of making the command line more complicated.
That is not a comment on this patch though, but it would be nice if we
could head towards decreasing the complexity.
> However, user created flash devices are not correctly wired to their
> SPI controller and consequently can not be used by the machine. Fix
> that and wire the CS lines of all available devices when the SSI bus
> is reset.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Joel Stanley <joel@jms.id.au>
> ---
> hw/arm/aspeed.c | 5 +----
> hw/ssi/aspeed_smc.c | 8 ++++++++
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
> index 76a1e7303de1..e5a49bb0b1a7 100644
> --- a/hw/arm/aspeed.c
> +++ b/hw/arm/aspeed.c
> @@ -299,17 +299,14 @@ void aspeed_board_init_flashes(AspeedSMCState *s, const
> char *flashtype,
>
> for (i = 0; i < count; ++i) {
> DriveInfo *dinfo = drive_get(IF_MTD, 0, unit0 + i);
> - qemu_irq cs_line;
> DeviceState *dev;
>
> dev = qdev_new(flashtype);
> if (dinfo) {
> qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo));
> }
> + qdev_prop_set_uint8(dev, "addr", i);
> qdev_realize_and_unref(dev, BUS(s->spi), &error_fatal);
> -
> - cs_line = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0);
> - qdev_connect_gpio_out_named(DEVICE(s), "cs", i, cs_line);
> }
> }
>
> diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c
> index 72811693224d..2a4001b774a2 100644
> --- a/hw/ssi/aspeed_smc.c
> +++ b/hw/ssi/aspeed_smc.c
> @@ -692,6 +692,14 @@ static void aspeed_smc_reset(DeviceState *d)
> memset(s->regs, 0, sizeof s->regs);
> }
>
> + for (i = 0; i < asc->cs_num_max; i++) {
> + DeviceState *dev = ssi_get_cs(s->spi, i);
> + if (dev) {
> + qemu_irq cs_line = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0);
> + qdev_connect_gpio_out_named(DEVICE(s), "cs", i, cs_line);
> + }
> + }
> +
> /* Unselect all peripherals */
> for (i = 0; i < asc->cs_num_max; ++i) {
> s->regs[s->r_ctrl0 + i] |= CTRL_CE_STOP_ACTIVE;
> --
> 2.40.1
>
- Re: [PATCH v2 03/12] aspeed: Use the boot_rom region of the fby35 machine, (continued)
[PATCH v2 05/12] hw/ssi: Introduce a ssi_get_cs() helper, Cédric Le Goater, 2023/06/07
[PATCH v2 06/12] aspeed/smc: Wire CS lines at reset, Cédric Le Goater, 2023/06/07
[PATCH v2 07/12] hw/ssi: Check for duplicate addresses, Cédric Le Goater, 2023/06/07
[PATCH v2 09/12] m25p80: Introduce an helper to retrieve the BlockBackend of a device, Cédric Le Goater, 2023/06/07
[PATCH v2 08/12] aspeed: Create flash devices only when defaults are enabled, Cédric Le Goater, 2023/06/07
[PATCH v2 10/12] aspeed: Get the BlockBackend of FMC0 from the flash device, Cédric Le Goater, 2023/06/07
[PATCH v2 11/12] aspeed: Introduce a "bmc-console" machine option, Cédric Le Goater, 2023/06/07