1102-mtd-spi-nor-fsl-quadspi-Support-qspi-for-ls2080a.patch 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. From d2d88e3432d68b11b0add84bd15a3aadaf44f1c1 Mon Sep 17 00:00:00 2001
  2. From: Yunhui Cui <B56489@freescale.com>
  3. Date: Mon, 28 Dec 2015 18:25:56 +0800
  4. Subject: [PATCH 102/113] mtd: spi-nor: fsl-quadspi:Support qspi for ls2080a
  5. There is a hardware feature that qspi_amba_base is added
  6. internally by SOC design on ls2080a. So as to software, the driver
  7. need support to the feature.
  8. Signed-off-by: Yunhui Cui <B56489@freescale.com>
  9. Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
  10. ---
  11. drivers/mtd/spi-nor/fsl-quadspi.c | 24 ++++++++++++++++++++++--
  12. 1 file changed, 22 insertions(+), 2 deletions(-)
  13. --- a/drivers/mtd/spi-nor/fsl-quadspi.c
  14. +++ b/drivers/mtd/spi-nor/fsl-quadspi.c
  15. @@ -41,6 +41,8 @@
  16. #define QUADSPI_QUIRK_TKT253890 (1 << 2)
  17. /* Controller cannot wake up from wait mode, TKT245618 */
  18. #define QUADSPI_QUIRK_TKT245618 (1 << 3)
  19. +/* QSPI_AMBA_BASE is internally added by SOC design */
  20. +#define QUADSPI_AMBA_BASE_INTERNAL (0x10000)
  21. /* The registers */
  22. #define QUADSPI_MCR 0x00
  23. @@ -217,6 +219,7 @@ enum fsl_qspi_devtype {
  24. FSL_QUADSPI_IMX7D,
  25. FSL_QUADSPI_IMX6UL,
  26. FSL_QUADSPI_LS1021A,
  27. + FSL_QUADSPI_LS2080A,
  28. };
  29. struct fsl_qspi_devtype_data {
  30. @@ -270,6 +273,14 @@ static struct fsl_qspi_devtype_data ls10
  31. .driver_data = 0,
  32. };
  33. +static struct fsl_qspi_devtype_data ls2080a_data = {
  34. + .devtype = FSL_QUADSPI_LS2080A,
  35. + .rxfifo = 128,
  36. + .txfifo = 64,
  37. + .ahb_buf_size = 1024,
  38. + .driver_data = QUADSPI_AMBA_BASE_INTERNAL,
  39. +};
  40. +
  41. #define FSL_QSPI_MAX_CHIP 4
  42. struct fsl_qspi {
  43. struct spi_nor nor[FSL_QSPI_MAX_CHIP];
  44. @@ -312,6 +323,11 @@ static inline int needs_wakeup_wait_mode
  45. return q->devtype_data->driver_data & QUADSPI_QUIRK_TKT245618;
  46. }
  47. +static inline int has_added_amba_base_internal(struct fsl_qspi *q)
  48. +{
  49. + return q->devtype_data->driver_data & QUADSPI_AMBA_BASE_INTERNAL;
  50. +}
  51. +
  52. /*
  53. * R/W functions for big- or little-endian registers:
  54. * The qSPI controller's endian is independent of the CPU core's endian.
  55. @@ -558,8 +574,11 @@ fsl_qspi_runcmd(struct fsl_qspi *q, u8 c
  56. /* save the reg */
  57. reg = qspi_readl(q, base + QUADSPI_MCR);
  58. - qspi_writel(q, q->memmap_phy + q->chip_base_addr + addr,
  59. - base + QUADSPI_SFAR);
  60. + if (has_added_amba_base_internal(q))
  61. + qspi_writel(q, q->chip_base_addr + addr, base + QUADSPI_SFAR);
  62. + else
  63. + qspi_writel(q, q->memmap_phy + q->chip_base_addr + addr,
  64. + base + QUADSPI_SFAR);
  65. qspi_writel(q, QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS,
  66. base + QUADSPI_RBCT);
  67. qspi_writel(q, reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR);
  68. @@ -849,6 +868,7 @@ static const struct of_device_id fsl_qsp
  69. { .compatible = "fsl,imx7d-qspi", .data = (void *)&imx7d_data, },
  70. { .compatible = "fsl,imx6ul-qspi", .data = (void *)&imx6ul_data, },
  71. { .compatible = "fsl,ls1021a-qspi", .data = (void *)&ls1021a_data, },
  72. + { .compatible = "fsl,ls2080a-qspi", .data = (void *)&ls2080a_data, },
  73. { /* sentinel */ }
  74. };
  75. MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids);