lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 662/717] spi: atmel-quadspi: Fix AHB memory accesses
    Date
    From: Tudor Ambarus <tudor.ambarus@microchip.com>

    commit cac8c821059639b015586abf61623c62cc549a13 upstream.

    Following error was seen when mounting a 16MByte ubifs:
    UBIFS error (ubi0:0 pid 1893): check_lpt_type.constprop.6: invalid type (15) in LPT node type

    QSPI_IFR.TFRTYP was not set correctly. When data transfer is enabled
    and one wants to access the serial memory through AHB in order to:
    - read in the serial memory, but not a memory data, for example
    a JEDEC-ID, QSPI_IFR.TFRTYP must be written to '0' (both sama5d2
    and sam9x60).
    - read in the serial memory, and particularly a memory data,
    TFRTYP must be written to '1' (both sama5d2 and sam9x60).
    - write in the serial memory, but not a memory data, for example
    writing the configuration or the QSPI_SR, TFRTYP must be written
    to '2' for sama5d2 and to '0' for sam9x60.
    - write in the serial memory in particular to program a memory data,
    TFRTYP must be written to '3' for sama5d2 and to '1' for sam9x60.

    Fix the setting of the QSPI_IFR.TFRTYP field.

    Fixes: 2d30ac5ed633 ("mtd: spi-nor: atmel-quadspi: Use spi-mem interface for atmel-quadspi driver")
    Cc: <stable@vger.kernel.org> # v5.0+
    Reported-by: Tom Burkart <tom@aussec.com>
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20201207135959.154124-2-tudor.ambarus@microchip.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/spi/atmel-quadspi.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/spi/atmel-quadspi.c
    +++ b/drivers/spi/atmel-quadspi.c
    @@ -365,10 +365,14 @@ static int atmel_qspi_set_cfg(struct atm
    if (dummy_cycles)
    ifr |= QSPI_IFR_NBDUM(dummy_cycles);

    - /* Set data enable */
    - if (op->data.nbytes)
    + /* Set data enable and data transfer type. */
    + if (op->data.nbytes) {
    ifr |= QSPI_IFR_DATAEN;

    + if (op->addr.nbytes)
    + ifr |= QSPI_IFR_TFRTYP_MEM;
    + }
    +
    /*
    * If the QSPI controller is set in regular SPI mode, set it in
    * Serial Memory Mode (SMM).
    @@ -393,7 +397,7 @@ static int atmel_qspi_set_cfg(struct atm
    atmel_qspi_write(icr, aq, QSPI_WICR);
    atmel_qspi_write(ifr, aq, QSPI_IFR);
    } else {
    - if (op->data.dir == SPI_MEM_DATA_OUT)
    + if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT)
    ifr |= QSPI_IFR_SAMA5D2_WRITE_TRSFR;

    /* Set QSPI Instruction Frame registers */

    \
     
     \ /
      Last update: 2020-12-28 15:39    [W:2.243 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site