• M
    spi/fsl_spi: add eSPI controller support · 8b60d6c2
    Mingkai Hu 提交于
    Add eSPI controller support based on the library code spi_fsl_lib.c.
    
    The eSPI controller is newer controller 85xx/Pxxx devices supported.
    There're some differences comparing to the SPI controller:
    
    1. Has different register map and different bit definition
       So leave the code operated the register to the driver code, not
       the common code.
    
    2. Support 4 dedicated chip selects
       The software can't controll the chip selects directly, The SPCOM[CS]
       field is used to select which chip selects is used, and the
       SPCOM[TRANLEN] field is set to tell the controller how long the CS
       signal need to be asserted. So the driver doesn't need the chipselect
       related function when transfering data, just set corresponding register
       fields to controll the chipseclect.
    
    3. Different Transmit/Receive FIFO access register behavior
       For SPI controller, the Tx/Rx FIFO access register can hold only
       one character regardless of the character length, but for eSPI
       controller, the register can hold 4 or 2 characters according to
       the character lengths. Access the Tx/Rx FIFO access register of the
       eSPI controller will shift out/in 4/2 characters one time. For SPI
       subsystem, the command and data are put into different transfers, so
       we need to combine all the transfers to one transfer in order to pass
       the transfer to eSPI controller.
    
    4. The max transaction length limitation
       The max transaction length one time is limitted by the SPCOM[TRANSLEN]
       field which is 0xFFFF. When used mkfs.ext2 command to create ext2
       filesystem on the flash, the read length will exceed the max value of
       the SPCOM[TRANSLEN] field.
    Signed-off-by: NMingkai Hu <Mingkai.hu@freescale.com>
    Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
    8b60d6c2
spi_fsl_espi.c 17.7 KB