
Ashish,
Hi Vignesh, This is working now(READ, WRITE), after some change in fsl_qspi driver, where I check for 4byte op codes now. But now I see that erase is getting address as ZERO. Which in my opinion is because spi_nor_erase_sector() call write_reg which has SPI_MEM_OP_NO_ADDR?
/*
- Initiate the erasure of a single sector
*/ static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr) { u8 buf[SPI_NOR_MAX_ADDR_WIDTH]; int i;
if (nor->erase) return nor->erase(nor, addr); /* * Default implementation, if driver doesn't have a specialized HW * control */ for (i = nor->addr_width - 1; i >= 0; i--) { buf[i] = addr & 0xff; addr >>= 8; } return nor->write_reg(nor, nor->erase_opcode, buf, nor->addr_width);
}
static int spi_nor_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) { struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 1), SPI_MEM_OP_NO_ADDR, SPI_MEM_OP_NO_DUMMY, SPI_MEM_OP_DATA_OUT(len, NULL, 1));
return spi_nor_read_write_reg(nor, &op, buf);
}
Marek has posted a patch[1] which should fix erase issue for you without any driver changes. Could you test and provide a Tested-by for the patch. I will ask Jagan to pull that in for v2019.04 if it works.
[1] http://patchwork.ozlabs.org/patch/1073563/