AnsweredAssumed Answered

LS1021A, Linux 4.9 and QSPI

Question asked by Delove Alexandre on May 28, 2018
Latest reply on Jun 14, 2018 by Yiping Wang

Hello

 

I'm working on the ls1021a with the SDK Linux 4.4 and i want to use it with the Linux 4.9, however there is a problem with the qspi.

 

In fact, the fsl_quadspi driver from the SDK works with the ls1021a, but the fsl_quadspi from 4.9 returns the error "fsl-quadspi 1550000.quadspi: Unsupported cmd 0x70" when accessing the qspi. The reason is that the spi_nor driver calls:

ret = nor->read_reg(nor, SPINOR_OP_RDFSR, &val, 1);

 and SPINOR_OP_RDFSR is defined in include/linux/mtd/spi-nor.h:

#define SPINOR_OP_RDFSR        0x70    /* Read flag status register */

But then there is a difference between the fsl_quadspi driver from the SDK and linux 4.9:

In the SDK, SPINOR_OP_RDFSR is handled by the function fsl_qspi_get_seqid line 539:

    case SPINOR_OP_RDFSR:
        return SEQID_RDFSR;

In 4.9, SPINOR_OP_RDFSR isn't handled by the function fsl_qspi_get_seqid:

switch (cmd) {
    case SPINOR_OP_READ_1_1_4:
        return SEQID_QUAD_READ;
    case SPINOR_OP_WREN:
        return SEQID_WREN;
    case SPINOR_OP_WRDI:
        return SEQID_WRDI;
    case SPINOR_OP_RDSR:
        return SEQID_RDSR;
    case SPINOR_OP_SE:
        return SEQID_SE;
    case SPINOR_OP_CHIP_ERASE:
        return SEQID_CHIP_ERASE;
    case SPINOR_OP_PP:
        return SEQID_PP;
    case SPINOR_OP_RDID:
        return SEQID_RDID;
    case SPINOR_OP_WRSR:
        return SEQID_WRSR;
    case SPINOR_OP_RDCR:
        return SEQID_RDCR;
    case SPINOR_OP_EN4B:
        return SEQID_EN4B;
    case SPINOR_OP_BRWR:
        return SEQID_BRWR;
    default:
        if (cmd == q->nor[0].erase_opcode)
            return SEQID_SE;
        dev_err(q->dev, "Unsupported cmd 0x%.2x\n", cmd);
        break;

 Is there any way to patch the 4.9 fsl_quadspi driver in order to use it with the ls1021a? Or is there any SDK with linux 4.9?

 

Thanks

 

Regards

 

Alexandre Delove

Outcomes