]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
spi: intel: Take possible chip address into account in intel_spi_read/write_reg()
authorMika Westerberg <mika.westerberg@linux.intel.com>
Tue, 25 Oct 2022 06:46:22 +0000 (09:46 +0300)
committerMark Brown <broonie@kernel.org>
Fri, 25 Nov 2022 19:34:05 +0000 (19:34 +0000)
The SPI-NOR operation can have non-zero chip address as well so take
this into account in intel_spi_read/write_reg().

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Link: https://lore.kernel.org/r/20221025064623.22808-4-mika.westerberg@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-intel.c

index 431a6f97daf2076c099a6f5c97e6f007c45b19d7..4d8fda991e7b73fd127961609dfcb61d797405c4 100644 (file)
@@ -457,11 +457,12 @@ static int intel_spi_read_reg(struct intel_spi *ispi, const struct spi_mem *mem,
                              const struct intel_spi_mem_op *iop,
                              const struct spi_mem_op *op)
 {
+       u32 addr = intel_spi_chip_addr(ispi, mem) + op->addr.val;
        size_t nbytes = op->data.nbytes;
        u8 opcode = op->cmd.opcode;
        int ret;
 
-       writel(intel_spi_chip_addr(ispi, mem), ispi->base + FADDR);
+       writel(addr, ispi->base + FADDR);
 
        if (ispi->swseq_reg)
                ret = intel_spi_sw_cycle(ispi, opcode, nbytes,
@@ -479,6 +480,7 @@ static int intel_spi_write_reg(struct intel_spi *ispi, const struct spi_mem *mem
                               const struct intel_spi_mem_op *iop,
                               const struct spi_mem_op *op)
 {
+       u32 addr = intel_spi_chip_addr(ispi, mem) + op->addr.val;
        size_t nbytes = op->data.nbytes;
        u8 opcode = op->cmd.opcode;
        int ret;
@@ -522,7 +524,7 @@ static int intel_spi_write_reg(struct intel_spi *ispi, const struct spi_mem *mem
        if (opcode == SPINOR_OP_WRDI)
                return 0;
 
-       writel(intel_spi_chip_addr(ispi, mem), ispi->base + FADDR);
+       writel(addr, ispi->base + FADDR);
 
        /* Write the value beforehand */
        ret = intel_spi_write_block(ispi, op->data.buf.out, nbytes);