spi: cadence-quadspi: Add support for StarFive JH7110 QSPI
authorWilliam Qiu <william.qiu@starfivetech.com>
Thu, 2 Mar 2023 10:52:21 +0000 (18:52 +0800)
committerMark Brown <broonie@kernel.org>
Sun, 5 Mar 2023 23:38:58 +0000 (23:38 +0000)
Add QSPI reset operation in device probe and add RISCV support to
QUAD SPI Kconfig.

Co-developed-by: Ziv Xu <ziv.xu@starfivetech.com>
Signed-off-by: Ziv Xu <ziv.xu@starfivetech.com>
Signed-off-by: William Qiu <william.qiu@starfivetech.com>
Link: https://lore.kernel.org/r/20230302105221.197421-3-william.qiu@starfivetech.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/Kconfig
drivers/spi/spi-cadence-quadspi.c

index 47bbba0..839d426 100644 (file)
@@ -239,7 +239,7 @@ config SPI_CADENCE
 
 config SPI_CADENCE_QUADSPI
        tristate "Cadence Quad SPI controller"
-       depends on OF && (ARM || ARM64 || X86 || COMPILE_TEST)
+       depends on OF && (ARM || ARM64 || X86 || RISCV || COMPILE_TEST)
        help
          Enable support for the Cadence Quad SPI Flash controller.
 
index 64b6a46..c789fa9 100644 (file)
@@ -1615,7 +1615,7 @@ static int cqspi_setup_flash(struct cqspi_st *cqspi)
 static int cqspi_probe(struct platform_device *pdev)
 {
        const struct cqspi_driver_platdata *ddata;
-       struct reset_control *rstc, *rstc_ocp;
+       struct reset_control *rstc, *rstc_ocp, *rstc_ref;
        struct device *dev = &pdev->dev;
        struct spi_master *master;
        struct resource *res_ahb;
@@ -1705,6 +1705,17 @@ static int cqspi_probe(struct platform_device *pdev)
                goto probe_reset_failed;
        }
 
+       if (of_device_is_compatible(pdev->dev.of_node, "starfive,jh7110-qspi")) {
+               rstc_ref = devm_reset_control_get_optional_exclusive(dev, "rstc_ref");
+               if (IS_ERR(rstc_ref)) {
+                       ret = PTR_ERR(rstc_ref);
+                       dev_err(dev, "Cannot get QSPI REF reset.\n");
+                       goto probe_reset_failed;
+               }
+               reset_control_assert(rstc_ref);
+               reset_control_deassert(rstc_ref);
+       }
+
        reset_control_assert(rstc);
        reset_control_deassert(rstc);
 
@@ -1859,6 +1870,10 @@ static const struct cqspi_driver_platdata versal_ospi = {
        .get_dma_status = cqspi_get_versal_dma_status,
 };
 
+static const struct cqspi_driver_platdata jh7110_qspi = {
+       .quirks = CQSPI_DISABLE_DAC_MODE,
+};
+
 static const struct of_device_id cqspi_dt_ids[] = {
        {
                .compatible = "cdns,qspi-nor",
@@ -1884,6 +1899,10 @@ static const struct of_device_id cqspi_dt_ids[] = {
                .compatible = "intel,socfpga-qspi",
                .data = &socfpga_qspi,
        },
+       {
+               .compatible = "starfive,jh7110-qspi",
+               .data = &jh7110_qspi,
+       },
        { /* end of table */ }
 };