]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mtd: nand: brcmnand: Add support for flash-dma v0
authorKamal Dasu <kdasu.kdev@gmail.com>
Sat, 11 Feb 2023 15:29:03 +0000 (16:29 +0100)
committerDario Binacchi <dario.binacchi@amarulasolutions.com>
Mon, 27 Feb 2023 15:29:39 +0000 (16:29 +0100)
This change adds support for flash dma v0.0.

Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
[Ported to U-Boot from the Linux kernel]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: William Zhang <william.zhang@broadcom.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
drivers/mtd/nand/raw/brcmnand/brcmnand.c

index 0402cb06a74b780b10247225d2fbf138e611ee54..a934373a29928c7361bd67a8fa4ad6896ca9817e 100644 (file)
@@ -120,6 +120,18 @@ enum flash_dma_reg {
 };
 
 #ifndef __UBOOT__
+/* flash_dma registers v0*/
+static const u16 flash_dma_regs_v0[] = {
+       [FLASH_DMA_REVISION]            = 0x00,
+       [FLASH_DMA_FIRST_DESC]          = 0x04,
+       [FLASH_DMA_CTRL]                = 0x08,
+       [FLASH_DMA_MODE]                = 0x0c,
+       [FLASH_DMA_STATUS]              = 0x10,
+       [FLASH_DMA_INTERRUPT_DESC]      = 0x14,
+       [FLASH_DMA_ERROR_STATUS]        = 0x18,
+       [FLASH_DMA_CURRENT_DESC]        = 0x1c,
+};
+
 /* flash_dma registers v1*/
 static const u16 flash_dma_regs_v1[] = {
        [FLASH_DMA_REVISION]            = 0x00,
@@ -614,6 +626,8 @@ static void brcmnand_flash_dma_revision_init(struct brcmnand_controller *ctrl)
        /* flash_dma register offsets */
        if (ctrl->nand_version >= 0x0703)
                ctrl->flash_dma_offsets = flash_dma_regs_v4;
+       else if (ctrl->nand_version == 0x0602)
+               ctrl->flash_dma_offsets = flash_dma_regs_v0;
        else
                ctrl->flash_dma_offsets = flash_dma_regs_v1;
 }
@@ -1645,8 +1659,11 @@ static void brcmnand_dma_run(struct brcmnand_host *host, dma_addr_t desc)
 
        flash_dma_writel(ctrl, FLASH_DMA_FIRST_DESC, lower_32_bits(desc));
        (void)flash_dma_readl(ctrl, FLASH_DMA_FIRST_DESC);
-       flash_dma_writel(ctrl, FLASH_DMA_FIRST_DESC_EXT, upper_32_bits(desc));
-       (void)flash_dma_readl(ctrl, FLASH_DMA_FIRST_DESC_EXT);
+       if (ctrl->nand_version > 0x0602) {
+               flash_dma_writel(ctrl, FLASH_DMA_FIRST_DESC_EXT,
+                                upper_32_bits(desc));
+               (void)flash_dma_readl(ctrl, FLASH_DMA_FIRST_DESC_EXT);
+       }
 
        /* Start FLASH_DMA engine */
        ctrl->dma_pending = true;