Skip to content
Snippets Groups Projects
Forked from KED Software Projects / Miscellaneous / KED U-Boot Fork
Source project has a limited visibility.
  • Jagan Teki's avatar
    dbbdc81c
    spi: rk: Limit transfers to (64K - 1) bytes · dbbdc81c
    Jagan Teki authored
    
    The Rockchip SPI controller's length register only supports 16-bits,
    yielding a maximum length of 64KiB (the CTRLR1 register holds "length -
    1"). Trying to transfer more than that (e.g., with a large SPI flash
    read) will cause the driver to hang.
    
    Now, it seems that while theoretically we should be able to program
    CTRLR1 with 0xffff, and get a 64KiB transfer, but that also seems to
    cause the core to choke, so stick with a maximum of 64K - 1 bytes --
    i.e., 0xffff.
    
    Note, that the size is further divided into 'minus 1' while writing
    into CTRLR1.
    
    This change fixed two different read issues,
    
    1. sf read failure when with > 0x10000
    
    2. Boot from SPI flash failed during spi_flash_read call in
       common/spl/spl_spi.c
    
    Observed and Tested in
    - Rockpro64 with Gigadevice flash
    - ROC-RK3399-PC with Winbond flash
    
    Signed-off-by: default avatarJagan Teki <jagan@amarulasolutions.com>
    Reviewed-by: default avatarKever Yang <kever.yang@rock-chips.com>
    dbbdc81c
    History
    spi: rk: Limit transfers to (64K - 1) bytes
    Jagan Teki authored
    
    The Rockchip SPI controller's length register only supports 16-bits,
    yielding a maximum length of 64KiB (the CTRLR1 register holds "length -
    1"). Trying to transfer more than that (e.g., with a large SPI flash
    read) will cause the driver to hang.
    
    Now, it seems that while theoretically we should be able to program
    CTRLR1 with 0xffff, and get a 64KiB transfer, but that also seems to
    cause the core to choke, so stick with a maximum of 64K - 1 bytes --
    i.e., 0xffff.
    
    Note, that the size is further divided into 'minus 1' while writing
    into CTRLR1.
    
    This change fixed two different read issues,
    
    1. sf read failure when with > 0x10000
    
    2. Boot from SPI flash failed during spi_flash_read call in
       common/spl/spl_spi.c
    
    Observed and Tested in
    - Rockpro64 with Gigadevice flash
    - ROC-RK3399-PC with Winbond flash
    
    Signed-off-by: default avatarJagan Teki <jagan@amarulasolutions.com>
    Reviewed-by: default avatarKever Yang <kever.yang@rock-chips.com>