Hello Joel,

+ Jamin, who spent time on aspeed_smc and m25p80 models.


On 2/20/26 11:09, Joel Bueno wrote:
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.
Could you please open an issue on gitlab with all the information
you gathered ? Please cc @legoater and @jamin-aspeed.

See https://gitlab.com/qemu-project/qemu/-/issues/3290 for an example.

Thanks for the time you have dedicated to this problem.

C.





El vie, 20 feb 2026 a las 9:56, Cédric Le Goater (<[email protected] 
<mailto:[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] 
<mailto:[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