]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
mtd: rawnand: arasan: Support NV-DDR interface
authorMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 5 May 2021 21:37:50 +0000 (23:37 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 26 May 2021 08:52:51 +0000 (10:52 +0200)
Add support for the NV-DDR interface.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20210505213750.257417-23-miquel.raynal@bootlin.com
drivers/mtd/nand/raw/arasan-nand-controller.c

index 307300eeb9cbfcf56d36a243d3c9558cfb2fe0ea..8c7537129674e3f24166cf9af602af8d808c2cc4 100644 (file)
@@ -879,25 +879,38 @@ static int anfc_setup_interface(struct nand_chip *chip, int target,
        struct arasan_nfc *nfc = to_anfc(chip->controller);
        struct device_node *np = nfc->dev->of_node;
        const struct nand_sdr_timings *sdr;
-
-       sdr = nand_get_sdr_timings(conf);
-       if (IS_ERR(sdr))
-               return PTR_ERR(sdr);
+       const struct nand_nvddr_timings *nvddr;
+
+       if (nand_interface_is_nvddr(conf)) {
+               nvddr = nand_get_nvddr_timings(conf);
+               if (IS_ERR(nvddr))
+                       return PTR_ERR(nvddr);
+       } else {
+               sdr = nand_get_sdr_timings(conf);
+               if (IS_ERR(sdr))
+                       return PTR_ERR(sdr);
+       }
 
        if (target < 0)
                return 0;
 
-       anand->timings = DIFACE_SDR | DIFACE_SDR_MODE(conf->timings.mode);
+       if (nand_interface_is_sdr(conf))
+               anand->timings = DIFACE_SDR |
+                                DIFACE_SDR_MODE(conf->timings.mode);
+       else
+               anand->timings = DIFACE_NVDDR |
+                                DIFACE_DDR_MODE(conf->timings.mode);
+
        anand->clk = ANFC_XLNX_SDR_DFLT_CORE_CLK;
 
        /*
         * Due to a hardware bug in the ZynqMP SoC, SDR timing modes 0-1 work
         * with f > 90MHz (default clock is 100MHz) but signals are unstable
         * with higher modes. Hence we decrease a little bit the clock rate to
-        * 80MHz when using modes 2-5 with this SoC.
+        * 80MHz when using SDR modes 2-5 with this SoC.
         */
        if (of_device_is_compatible(np, "xlnx,zynqmp-nand-controller") &&
-           conf->timings.mode >= 2)
+           nand_interface_is_sdr(conf) && conf->timings.mode >= 2)
                anand->clk = ANFC_XLNX_SDR_HS_CORE_CLK;
 
        return 0;