Hi Cédric, thanks for the detailed response and your time; I should've run
the tests prior to the submission; apologies for the oversight!

I've been eyeing the aspeed_smc.c file and it seems to "inflate" the dummy
clock phases:

static int aspeed_smc_flash_dummies(const AspeedSMCFlash *fl)
{
    const AspeedSMCState *s = fl->controller;
    uint32_t r_ctrl0 = s->regs[s->r_ctrl0 + fl->cs];
    uint32_t dummy_high = (r_ctrl0 >> CTRL_DUMMY_HIGH_SHIFT) & 0x1;
    uint32_t dummy_low = (r_ctrl0 >> CTRL_DUMMY_LOW_SHIFT) & 0x3;
    uint32_t dummies = ((dummy_high << 2) | dummy_low) * 8;

    if (r_ctrl0 & CTRL_IO_DUAL_ADDR_DATA) {
        dummies /= 2;
    }

    return dummies;
}

As you can see, it basically multiplies the number of "dummies" (Which is
gathered by obtaining the full value of the register) by 8.
That is, in turn, used on "aspeed_smc_flash_setup" (Only
if aspeed_smc_flash_mode(fl) == CTRL_FREADMODE) to decide how much dummy
data to push with "ssi_transfer()".

It's a bit confusing for me to compare what the actual Winbond datasheet we
have (Also cross-referenced similar product's datasheets just in case)
expects in terms of needed_bytes (Which, as per datasheet, would be just 1,
matching what, for instance, SST ones have; for reference).

The Designware SPI controller QEMU device we have sends a single byte (8
cycles in SPI) to the flash (Again, matching both Designware's and
Winbond's datasheet).

Would it be interesting to have a second set of patch series trying to
address the inconsistencies (Whilst addressing aspeed too) and making the
Winbond model with what SST currently does in terms of "naming" convention?

Thanks again for everyone's time.


El vie, 20 feb 2026 a las 9:56, Cédric Le Goater (<[email protected]>)
escribió:

> Hello,
>
> +Marcin,
>
> On 2/19/26 21:01, Peter Maydell wrote:
> > On Wed, 7 Jan 2026 at 11:30, Joel Bueno <[email protected]>
> wrote:
> >>
> >> Is there any feedback on this patch series?
> >
> > Which board model(s) does this affect? You might have
> > some luck cc'ing their maintainers.
> AFAIR (10y ago ...), the dummy cycles in m25p80 are modeled as
> extra "dummy bytes" consumed before data phase begins. So,
> in QEMU : 8 cycles = 1 dummy byte.
>
> There could be bugs in this area, but this case was supposedly
> fixed by commit 3830c7a460b8 ("m25p80: Fix WINBOND fast read
> command handling") and given the number of QEMU boards booting
> from a Winbond flash device :
>
>    tests/functional/aarch64/test_aspeed_ast2700a1.py:
> self.vm.set_machine('ast2700a1-evb,fmc-model=w25q512jv')
>    tests/functional/aarch64/test_aspeed_ast2700a2.py:
> self.vm.set_machine('ast2700a2-evb,fmc-model=w25q512jv')
>    hw/arm/aspeed_ast10x0_evb.c:    amc->fmc_model = "w25q80bl";
>    hw/arm/aspeed_ast10x0_evb.c:    amc->spi_model = "w25q256";
>    hw/arm/aspeed_ast10x0_evb.c:    amc->fmc_model = "w25q80bl";
>    hw/arm/aspeed_ast10x0_evb.c:    amc->spi_model = "w25q02jvm";
>    hw/arm/aspeed_ast2600_bletchley.c:    amc->fmc_model = "w25q01jvq";
>    hw/arm/aspeed_ast2600_catalina.c:    amc->fmc_model = "w25q01jvq";
>    hw/arm/aspeed_ast2600_evb.c:    amc->fmc_model = "w25q512jv";
>    hw/arm/aspeed_ast2600_evb.c:    amc->spi_model = "w25q512jv";
>    hw/arm/aspeed_ast27x0_evb.c:    amc->fmc_model = "w25q01jvq";
>    hw/arm/aspeed_ast27x0_evb.c:    amc->spi_model = "w25q512jv";
>    hw/arm/aspeed_ast27x0_evb.c:    amc->fmc_model = "w25q01jvq";
>    hw/arm/aspeed_ast27x0_evb.c:    amc->spi_model = "w25q512jv";
>    hw/arm/aspeed_ast27x0-fc.c:#define AST2700FC_FMC_MODEL "w25q01jvq"
>    hw/arm/aspeed_ast27x0-fc.c:#define AST2700FC_SPI_MODEL "w25q512jv"
>    hw/arm/npcm7xx_boards.c:    npcm7xx_connect_flash(&soc->fiu[0], 0,
> "w25q256", drive_get(IF_MTD, 0, 0));
>    hw/arm/npcm8xx_boards.c:    npcm8xx_connect_flash(&soc->fiu[0], 0,
> "w25q256", drive_get(IF_MTD, 0, 0));
>
> I doubt this change is correct or the issue is more complex
> than it seems. Please try to run the functional tests, all
> ast2600 machines seem to fail to boot with this patch.
>
>
> Thanks,
>
> C.
>
>
> For the records, fast read commands are used in the tests. See below.
>
>    [0x406c0641] : The second byte '6c' is the SPI operation.
>
>
> aarch64/test_aspeed_ast2600_sdk.AST2600Machine.test_arm_ast2600_evb_sdk/console.log:2026-02-11
> 13:22:45,545: [    0.510414] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2600_sdk.AST2600Machine.test_arm_ast2600_evb_sdk/console.log:2026-02-11
> 13:22:45,713: [    0.650635] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700a1.AST2x00MachineSDK.test_aarch64_ast2700a1_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:30,173: [    1.517517] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700a1.AST2x00MachineSDK.test_aarch64_ast2700a1_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:30,320: [    1.608993] spi-aspeed-smc 14000000.spi: CE1 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700a1.AST2x00MachineSDK.test_aarch64_ast2700a1_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:30,346: [    1.625580] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 2 [0x203c0641]
> aarch64/test_aspeed_ast2700a2.AST2x00MachineSDK.test_aarch64_ast2700a2_evb_ioexp_v11_00/console.log:2026-02-13
> 15:50:03,329: [    4.852499] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0041]
> aarch64/test_aspeed_ast2700a2.AST2x00MachineSDK.test_aarch64_ast2700a2_evb_ioexp_v11_00/console.log:2026-02-13
> 15:50:03,850: [    5.178221] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 1 [0x000c0041]
> aarch64/test_aspeed_ast2700a2.AST2x00MachineSDK.test_aarch64_ast2700a2_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:31,247: [    1.275618] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700a2.AST2x00MachineSDK.test_aarch64_ast2700a2_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:31,369: [    1.352064] spi-aspeed-smc 14000000.spi: CE1 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700a2.AST2x00MachineSDK.test_aarch64_ast2700a2_evb_sdk_v11_00/console.log:2026-02-13
> 11:49:31,385: [    1.361942] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 2 [0x203c0641]
> aarch64/test_aspeed_ast2700.AST2x00MachineSDK.test_aarch64_ast2700_evb_ioexp_v11_00/console.log:2026-02-10
> 16:47:50,922: [    3.123120] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0041]
> aarch64/test_aspeed_ast2700.AST2x00MachineSDK.test_aarch64_ast2700_evb_ioexp_v11_00/console.log:2026-02-10
> 16:47:51,224: [    3.312014] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 1 [0x000c0041]
> aarch64/test_aspeed_ast2700.AST2x00MachineSDK.test_aarch64_ast2700_evb_sdk_v11_00/console.log:2026-02-10
> 16:49:00,279: [    1.264763] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700.AST2x00MachineSDK.test_aarch64_ast2700_evb_sdk_v11_00/console.log:2026-02-10
> 16:49:00,408: [    1.345588] spi-aspeed-smc 14000000.spi: CE1 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700.AST2x00MachineSDK.test_aarch64_ast2700_evb_sdk_v11_00/console.log:2026-02-10
> 16:49:00,424: [    1.355559] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 2 [0x203c0641]
> aarch64/test_aspeed_ast2700fc.AST2x00MachineSDK.test_aarch64_ast2700fc_sdk_vbootrom_v11_00/console.log:2026-02-13
> 11:49:40,859: [    1.568162] spi-aspeed-smc 14000000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700fc.AST2x00MachineSDK.test_aarch64_ast2700fc_sdk_vbootrom_v11_00/console.log:2026-02-13
> 11:49:41,032: [    1.676511] spi-aspeed-smc 14000000.spi: CE1 read
> buswidth: 4 [0x406c0641]
> aarch64/test_aspeed_ast2700fc.AST2x00MachineSDK.test_aarch64_ast2700fc_sdk_vbootrom_v11_00/console.log:2026-02-13
> 11:49:41,069: [    1.699459] spi-aspeed-smc 14010000.spi: CE0 read
> buswidth: 2 [0x203c0641]
> arm/test_aspeed_ast2500_buildroot.AST2500Machine.test_arm_ast2500_evb_buildroot/console.log:2026-02-13
> 15:50:25,370: [    1.333537] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203b0641]
> arm/test_aspeed_ast2500_buildroot.AST2500Machine.test_arm_ast2500_evb_buildroot/console.log:2026-02-13
> 15:50:25,659: [    1.625199] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:2 [0x203c0041]
> arm/test_aspeed_ast2500_sdk.AST2500Machine.test_arm_ast2500_evb_sdk/console.log:2026-02-13
> 15:50:22,593: [    1.287417] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth: 2 [0x203b0641]
> arm/test_aspeed_ast2500_sdk.AST2500Machine.test_arm_ast2500_evb_sdk/console.log:2026-02-13
> 15:50:23,319: [    2.013603] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth: 2 [0x203c0741]
> arm/test_aspeed_ast2600_buildroot.AST2600Machine.test_arm_ast2600_evb_buildroot/console.log:2026-02-13
> 15:50:35,593: [    2.848343] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:4 [0x406c0641]
> arm/test_aspeed_ast2600_buildroot.AST2600Machine.test_arm_ast2600_evb_buildroot/console.log:2026-02-13
> 15:50:35,876: [    3.086504] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:4 [0x406c0041]
> arm/test_aspeed_ast2600_buildroot_tpm.AST2600Machine.test_arm_ast2600_evb_buildroot_tpm/console.log:2026-02-13
> 15:51:11,310: [    1.769397] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:4 [0x406c0641]
> arm/test_aspeed_ast2600_buildroot_tpm.AST2600Machine.test_arm_ast2600_evb_buildroot_tpm/console.log:2026-02-13
> 15:51:11,400: [    1.844341] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:4 [0x406c0041]
> arm/test_aspeed_ast2600_sdk.AST2600Machine.test_arm_ast2600_evb_sdk/console.log:2026-02-13
> 15:50:31,578: [    4.177582] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> arm/test_aspeed_ast2600_sdk.AST2600Machine.test_arm_ast2600_evb_sdk/console.log:2026-02-13
> 15:50:32,052: [    4.571849] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> arm/test_aspeed_ast2600_sdk_otp.AST2600Machine.test_arm_ast2600_otp_blockdev_device/console.log:2026-02-13
> 15:50:27,134: [    2.312565] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> arm/test_aspeed_ast2600_sdk_otp.AST2600Machine.test_arm_ast2600_otp_blockdev_device/console.log:2026-02-13
> 15:50:27,533: [    2.644716] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth: 4 [0x406c0641]
> arm/test_aspeed_bletchley.BletchleyMachine.test_arm_ast2600_bletchley_openbmc/console.log:2026-02-13
> 15:50:39,306: [    2.488488] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203c0641]
> arm/test_aspeed_bletchley.BletchleyMachine.test_arm_ast2600_bletchley_openbmc/console.log:2026-02-13
> 15:50:46,183: [    8.220262] spi-aspeed-smc 1e620000.spi: CE1 read
> buswidth:2 [0x203c0041]
> arm/test_aspeed_catalina.CatalinaMachine.test_arm_ast2600_catalina_openbmc/console.log:2026-02-13
> 15:50:34,667: [    1.470919] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203c0641]
> arm/test_aspeed_catalina.CatalinaMachine.test_arm_ast2600_catalina_openbmc/console.log:2026-02-13
> 15:50:41,745: [    7.369080] spi-aspeed-smc 1e620000.spi: CE1 read
> buswidth:2 [0x203c0041]
> arm/test_aspeed_gb200nvl_bmc.GB200Machine.test_arm_aspeed_gb200_openbmc/console.log:2026-02-13
> 15:50:22,255: [    1.277601] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:4 [0x406c0641]
> arm/test_aspeed_gb200nvl_bmc.GB200Machine.test_arm_aspeed_gb200_openbmc/console.log:2026-02-13
> 15:50:22,589: [    1.558898] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:4 [0x406c0041]
> arm/test_aspeed_palmetto.PalmettoMachine.test_arm_ast2400_palmetto_openbmc/console.log:2026-02-13
> 15:50:31,164: [    0.840722] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203b0641]
> arm/test_aspeed_palmetto.PalmettoMachine.test_arm_ast2400_palmetto_openbmc/console.log:2026-02-13
> 15:50:31,405: [    1.082523] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:2 [0x203c2041]
> arm/test_aspeed_romulus.RomulusMachine.test_arm_ast2500_romulus_openbmc/console.log:2026-02-13
> 15:50:35,622: [    1.281889] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203b0641]
> arm/test_aspeed_romulus.RomulusMachine.test_arm_ast2500_romulus_openbmc/console.log:2026-02-13
> 15:50:35,832: [    1.491569] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:2 [0x203c0041]
> arm/test_aspeed_witherspoon.WitherspoonMachine.test_arm_ast2500_witherspoon_openbmc/console.log:2026-02-13
> 15:50:44,149: [    0.885126] spi-aspeed-smc 1e620000.spi: CE0 read
> buswidth:2 [0x203c0641]
> arm/test_aspeed_witherspoon.WitherspoonMachine.test_arm_ast2500_witherspoon_openbmc/console.log:2026-02-13
> 15:50:44,193: [    0.932894] spi-aspeed-smc 1e620000.spi: CE1 read
> buswidth:2 [0x203c0041]
> arm/test_aspeed_witherspoon.WitherspoonMachine.test_arm_ast2500_witherspoon_openbmc/console.log:2026-02-13
> 15:50:44,242: [    0.982561] spi-aspeed-smc 1e630000.spi: CE0 read
> buswidth:2 [0x203c0041]
>
>

Reply via email to