]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge git://git.denx.de/u-boot-rockchip
authorTom Rini <trini@konsulko.com>
Mon, 18 Sep 2017 19:44:57 +0000 (15:44 -0400)
committerTom Rini <trini@konsulko.com>
Mon, 18 Sep 2017 19:44:57 +0000 (15:44 -0400)
arch/arm/mach-uniphier/Kconfig
arch/arm/mach-uniphier/clk/clk-ld11.c
arch/arm/mach-uniphier/clk/clk-ld20.c
arch/arm/mach-uniphier/clk/clk-pxs3.c
arch/arm/mach-uniphier/sc64-regs.h
configs/uniphier_pro4_defconfig [deleted file]
configs/uniphier_v7_defconfig [moved from configs/uniphier_pxs2_ld6b_defconfig with 93% similarity]
doc/README.uniphier
drivers/mtd/nand/denali.c
drivers/mtd/nand/denali.h
drivers/mtd/nand/denali_dt.c

index ee2211241235210573341bf3366d5093d6501f1d..c8b5ab4d3284e3b06a77833d14dcf246f23649f8 100644 (file)
@@ -12,18 +12,14 @@ config ARCH_UNIPHIER_32BIT
 
 choice
         prompt "UniPhier SoC select"
-        default ARCH_UNIPHIER_PRO4
+        default ARCH_UNIPHIER_V8_MULTI
 
 config ARCH_UNIPHIER_LD4_SLD8
        bool "UniPhier LD4/sLD8 SoCs"
        select ARCH_UNIPHIER_32BIT
 
-config ARCH_UNIPHIER_PRO4
-       bool "UniPhier Pro4 SoC"
-       select ARCH_UNIPHIER_32BIT
-
-config ARCH_UNIPHIER_PRO5_PXS2_LD6B
-       bool "UniPhier Pro5/PXs2/LD6b SoCs"
+config ARCH_UNIPHIER_V7_MULTI
+       bool "UniPhier Pro4/Pro5/PXs2/LD6b SoCs"
        select ARCH_UNIPHIER_32BIT
 
 config ARCH_UNIPHIER_V8_MULTI
@@ -44,19 +40,24 @@ config ARCH_UNIPHIER_SLD8
        depends on ARCH_UNIPHIER_LD4_SLD8
        default y
 
+config ARCH_UNIPHIER_PRO4
+       bool "Enable UniPhier Pro4 SoC support"
+       depends on ARCH_UNIPHIER_V7_MULTI
+       default y
+
 config ARCH_UNIPHIER_PRO5
        bool "Enable UniPhier Pro5 SoC support"
-       depends on ARCH_UNIPHIER_PRO5_PXS2_LD6B
+       depends on ARCH_UNIPHIER_V7_MULTI
        default y
 
 config ARCH_UNIPHIER_PXS2
        bool "Enable UniPhier Pxs2 SoC support"
-       depends on ARCH_UNIPHIER_PRO5_PXS2_LD6B
+       depends on ARCH_UNIPHIER_V7_MULTI
        default y
 
 config ARCH_UNIPHIER_LD6B
        bool "Enable UniPhier LD6b SoC support"
-       depends on ARCH_UNIPHIER_PRO5_PXS2_LD6B
+       depends on ARCH_UNIPHIER_V7_MULTI
        default y
 
 config ARCH_UNIPHIER_LD11
index 0266e7e66b79d849d29d1fdca11d59a004795e3f..a4b7419e5404f21cd8541874e4707a981c3b1978 100644 (file)
@@ -40,7 +40,7 @@ void uniphier_ld11_clk_init(void)
                int ch;
 
                tmp = readl(SC_CLKCTRL4);
-               tmp |= SC_CLKCTRL4_MIO | SC_CLKCTRL4_STDMAC;
+               tmp |= BIT(10) | BIT(8);        /* MIO, STDMAC */
                writel(tmp, SC_CLKCTRL4);
 
                for (ch = 0; ch < 3; ch++) {
index 5bb560cafe1d2bf4101b706ea09a6ccd7966dfe1..f79fb38535cdffde48967ad50292da063fd13708 100644 (file)
@@ -4,14 +4,26 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
+#include <linux/bitops.h>
 #include <linux/io.h>
 
 #include "../init.h"
+#include "../sc64-regs.h"
 
 #define SDCTRL_EMMC_HW_RESET   0x59810280
 
 void uniphier_ld20_clk_init(void)
 {
+       u32 tmp;
+
+       tmp = readl(SC_RSTCTRL6);
+       tmp |= BIT(8);                  /* Mali */
+       writel(tmp, SC_RSTCTRL6);
+
+       tmp = readl(SC_CLKCTRL6);
+       tmp |= BIT(8);                  /* Mali */
+       writel(tmp, SC_CLKCTRL6);
+
        /* TODO: use "mmc-pwrseq-emmc" */
        writel(1, SDCTRL_EMMC_HW_RESET);
 }
index 2dee857a18c8d17cd201c7b04f9eeda8bb1620b0..3b9cc626f1414fe5c8e8fbdf6be11db497f1bb2b 100644 (file)
@@ -4,14 +4,26 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
+#include <linux/bitops.h>
 #include <linux/io.h>
 
 #include "../init.h"
+#include "../sc64-regs.h"
 
 #define SDCTRL_EMMC_HW_RESET   0x59810280
 
 void uniphier_pxs3_clk_init(void)
 {
+       u32 tmp;
+
+       tmp = readl(SC_RSTCTRL6);
+       tmp |= BIT(8);                  /* Mali */
+       writel(tmp, SC_RSTCTRL6);
+
+       tmp = readl(SC_CLKCTRL6);
+       tmp |= BIT(8);                  /* Mali */
+       writel(tmp, SC_CLKCTRL6);
+
        /* TODO: use "mmc-pwrseq-emmc" */
        writel(1, SDCTRL_EMMC_HW_RESET);
 }
index d0a51f239c3808c2beede8c86631089d3b5bed59..80efb4e4e37f48f27adb00fa3f0139f44eb8c5d6 100644 (file)
 #define SC_RSTCTRL             (SC_BASE_ADDR | 0x2000)
 #define SC_RSTCTRL3            (SC_BASE_ADDR | 0x2008)
 #define SC_RSTCTRL4            (SC_BASE_ADDR | 0x200c)
-#define   SC_RSTCTRL4_ETHER            (1 << 6)
-#define   SC_RSTCTRL4_NAND             (1 << 0)
 #define SC_RSTCTRL5            (SC_BASE_ADDR | 0x2010)
 #define SC_RSTCTRL6            (SC_BASE_ADDR | 0x2014)
 #define SC_RSTCTRL7            (SC_BASE_ADDR | 0x2018)
-#define   SC_RSTCTRL7_UMCSB            (1 << 16)
-#define   SC_RSTCTRL7_UMCA2            (1 << 10)
-#define   SC_RSTCTRL7_UMCA1            (1 << 9)
-#define   SC_RSTCTRL7_UMCA0            (1 << 8)
-#define   SC_RSTCTRL7_UMC32            (1 << 2)
-#define   SC_RSTCTRL7_UMC31            (1 << 1)
-#define   SC_RSTCTRL7_UMC30            (1 << 0)
 
 #define SC_CLKCTRL             (SC_BASE_ADDR | 0x2100)
 #define SC_CLKCTRL3            (SC_BASE_ADDR | 0x2108)
 #define SC_CLKCTRL4            (SC_BASE_ADDR | 0x210c)
-#define   SC_CLKCTRL4_MIO              (1 << 10)
-#define   SC_CLKCTRL4_STDMAC           (1 << 8)
-#define   SC_CLKCTRL4_PERI             (1 << 7)
-#define   SC_CLKCTRL4_ETHER            (1 << 6)
-#define   SC_CLKCTRL4_NAND             (1 << 0)
 #define SC_CLKCTRL5            (SC_BASE_ADDR | 0x2110)
 #define SC_CLKCTRL6            (SC_BASE_ADDR | 0x2114)
 #define SC_CLKCTRL7            (SC_BASE_ADDR | 0x2118)
-#define   SC_CLKCTRL7_UMCSB            (1 << 16)
-#define   SC_CLKCTRL7_UMC32            (1 << 2)
-#define   SC_CLKCTRL7_UMC31            (1 << 1)
-#define   SC_CLKCTRL7_UMC30            (1 << 0)
 
 #define SC_CA72_GEARST         (SC_BASE_ADDR | 0x8000)
 #define SC_CA72_GEARSET                (SC_BASE_ADDR | 0x8004)
diff --git a/configs/uniphier_pro4_defconfig b/configs/uniphier_pro4_defconfig
deleted file mode 100644 (file)
index 7348675..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-CONFIG_ARM=y
-CONFIG_ARCH_UNIPHIER=y
-CONFIG_SYS_TEXT_BASE=0x84000000
-CONFIG_SYS_MALLOC_F_LEN=0x2000
-CONFIG_SPL_MMC_SUPPORT=y
-CONFIG_SPL_SERIAL_SUPPORT=y
-CONFIG_SPL_NAND_SUPPORT=y
-CONFIG_MICRO_SUPPORT_CARD=y
-CONFIG_DEFAULT_DEVICE_TREE="uniphier-pro4-ref"
-# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
-CONFIG_SPL=y
-CONFIG_SPL_NOR_SUPPORT=y
-CONFIG_HUSH_PARSER=y
-CONFIG_CMD_CONFIG=y
-CONFIG_CMD_BOOTZ=y
-# CONFIG_CMD_XIMG is not set
-# CONFIG_CMD_ENV_EXISTS is not set
-# CONFIG_CMD_FPGA is not set
-CONFIG_CMD_GPIO=y
-CONFIG_CMD_GPT=y
-CONFIG_CMD_I2C=y
-CONFIG_CMD_MMC=y
-CONFIG_CMD_USB=y
-CONFIG_CMD_TFTPPUT=y
-CONFIG_CMD_PING=y
-CONFIG_CMD_CACHE=y
-CONFIG_CMD_TIME=y
-# CONFIG_CMD_MISC is not set
-CONFIG_CMD_FAT=y
-CONFIG_CMD_FS_GENERIC=y
-# CONFIG_SPL_DOS_PARTITION is not set
-# CONFIG_SPL_EFI_PARTITION is not set
-CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_GPIO_UNIPHIER=y
-CONFIG_MISC=y
-CONFIG_I2C_EEPROM=y
-CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=10
-CONFIG_MMC_UNIPHIER=y
-CONFIG_NAND=y
-CONFIG_NAND_DENALI=y
-CONFIG_NAND_DENALI_DT=y
-CONFIG_SYS_NAND_DENALI_64BIT=y
-CONFIG_NAND_DENALI_SPARE_AREA_SKIP_BYTES=8
-CONFIG_SPL_NAND_DENALI=y
-CONFIG_USB=y
-CONFIG_USB_XHCI_HCD=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_GENERIC=y
-CONFIG_USB_STORAGE=y
similarity index 93%
rename from configs/uniphier_pxs2_ld6b_defconfig
rename to configs/uniphier_v7_defconfig
index c242776d9c671a5ff8ed37fb5914b702618fb521..3c254849391ca2a18a9121fa9552d835f3ccf19d 100644 (file)
@@ -5,7 +5,7 @@ CONFIG_SYS_MALLOC_F_LEN=0x2000
 CONFIG_SPL_MMC_SUPPORT=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_NAND_SUPPORT=y
-CONFIG_ARCH_UNIPHIER_PRO5_PXS2_LD6B=y
+CONFIG_ARCH_UNIPHIER_V7_MULTI=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-pxs2-vodka"
 # CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
@@ -45,4 +45,6 @@ CONFIG_NAND_DENALI_SPARE_AREA_SKIP_BYTES=8
 CONFIG_SPL_NAND_DENALI=y
 CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_GENERIC=y
 CONFIG_USB_STORAGE=y
index fa1f9bcc966773838a944f6c1f93703b930cc86a..e4fd9a3e3fc98c5d1061b309a11dd26ff187cd10 100644 (file)
@@ -27,17 +27,17 @@ The following tables show <defconfig> and <device-tree> for each board.
 
 32bit SoC boards:
 
- Board         | <defconfig>                  | <device-tree>
----------------|------------------------------|------------------------------
-LD4 reference  | uniphier_ld4_sld8_defconfig  | uniphier-ld4-ref (default)
-sld8 reference | uniphier_ld4_sld8_defconfig  | uniphier-sld8-def
-Pro4 reference | uniphier_pro4_defconfig      | uniphier-pro4-ref (default)
-Pro4 Ace       | uniphier_pro4_defconfig      | uniphier-pro4-ace
-Pro4 Sanji     | uniphier_pro4_defconfig      | uniphier-pro4-sanji
-Pro5 4KBOX     | uniphier_pxs2_ld6b_defconfig | uniphier-pro5-4kbox
-PXs2 Gentil    | uniphier_pxs2_ld6b_defconfig | uniphier-pxs2-gentil
-PXs2 Vodka     | uniphier_pxs2_ld6b_defconfig | uniphier-pxs2-vodka (default)
-LD6b reference | uniphier_pxs2_ld6b_defconfig | uniphier-ld6b-ref
+ Board         | <defconfig>                 | <device-tree>
+---------------|-----------------------------|------------------------------
+LD4 reference  | uniphier_ld4_sld8_defconfig | uniphier-ld4-ref (default)
+sld8 reference | uniphier_ld4_sld8_defconfig | uniphier-sld8-def
+Pro4 reference | uniphier_v7_defconfig       | uniphier-pro4-ref
+Pro4 Ace       | uniphier_v7_defconfig       | uniphier-pro4-ace
+Pro4 Sanji     | uniphier_v7_defconfig       | uniphier-pro4-sanji
+Pro5 4KBOX     | uniphier_v7_defconfig       | uniphier-pro5-4kbox
+PXs2 Gentil    | uniphier_v7_defconfig       | uniphier-pxs2-gentil
+PXs2 Vodka     | uniphier_v7_defconfig       | uniphier-pxs2-vodka (default)
+LD6b reference | uniphier_v7_defconfig       | uniphier-ld6b-ref
 
 64bit SoC boards:
 
@@ -47,17 +47,18 @@ LD11 reference | uniphier_v8_defconfig | uniphier-ld11-ref
 LD11 Global    | uniphier_v8_defconfig | uniphier-ld11-global
 LD20 reference | uniphier_v8_defconfig | uniphier-ld20-ref (default)
 LD20 Global    | uniphier_v8_defconfig | uniphier-ld20-global
+PXs3 reference | uniphier_v8_defconfig | uniphier-pxs3-ref
 
 For example, to compile the source for PXs2 Vodka board, run the following:
 
-    $ make uniphier_pxs2_ld6b_defconfig
+    $ make uniphier_v7_defconfig
     $ make CROSS_COMPILE=arm-linux-gnueabihf- DEVICE_TREE=uniphier-pxs2-vodka
 
 The device tree marked as (default) can be omitted.  `uniphier-pxs2-vodka` is
-the default device tree for the configuration `uniphier_pxs2_ld6b_defconfig`,
-so the following gives the same result.
+the default device tree for the configuration `uniphier_v7_defconfig`, so the
+following gives the same result.
 
-    $ make uniphier_pxs2_ld6b_defconfig
+    $ make uniphier_v7_defconfig
     $ make CROSS_COMPILE=arm-linux-gnueabihf-
 
 
@@ -178,4 +179,4 @@ newer SoCs.  Even if it is, EA[25] is not connected on most of the boards.
 
 --
 Masahiro Yamada <yamada.masahiro@socionext.com>
-Jul. 2017
+Sep. 2017
index 47cf37d1d9b7d2934d1c5e04a0aef0361758c907..54718f418c669f6bc50fe91385c7dee09f0d06be 100644 (file)
@@ -10,7 +10,7 @@
 #include <malloc.h>
 #include <nand.h>
 #include <linux/errno.h>
-#include <asm/io.h>
+#include <linux/io.h>
 
 #include "denali.h"
 
@@ -433,17 +433,13 @@ static void find_valid_banks(struct denali_nand_info *denali)
  */
 static void detect_max_banks(struct denali_nand_info *denali)
 {
-       uint32_t features = readl(denali->flash_reg + FEATURES);
-       /*
-        * Read the revision register, so we can calculate the max_banks
-        * properly: the encoding changed from rev 5.0 to 5.1
-        */
-       u32 revision = MAKE_COMPARABLE_REVISION(
-                               readl(denali->flash_reg + REVISION));
-       if (revision < REVISION_5_1)
-               denali->max_banks = 2 << (features & FEATURES__N_BANKS);
-       else
-               denali->max_banks = 1 << (features & FEATURES__N_BANKS);
+       uint32_t features = ioread32(denali->flash_reg + FEATURES);
+
+       denali->max_banks = 1 << (features & FEATURES__N_BANKS);
+
+       /* the encoding changed from rev 5.0 to 5.1 */
+       if (denali->revision < 0x0501)
+               denali->max_banks <<= 1;
 }
 
 static void detect_partition_feature(struct denali_nand_info *denali)
@@ -1153,6 +1149,13 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,
 /* Initialization code to bring the device up to a known good state */
 static void denali_hw_init(struct denali_nand_info *denali)
 {
+       /*
+        * The REVISION register may not be reliable.  Platforms are allowed to
+        * override it.
+        */
+       if (!denali->revision)
+               denali->revision = swab16(ioread32(denali->flash_reg + REVISION));
+
        /*
         * tell driver how many bit controller will skip before writing
         * ECC code in OOB. This is normally used for bad block marker
index 694bce53a955f272891a81b43e5cec3f8f394c50..08db48843da357ee1ef0412e7a9e5a200b70c4c8 100644 (file)
 
 #define REVISION                               0x370
 #define     REVISION__VALUE                            0xffff
-#define MAKE_COMPARABLE_REVISION(x)            swab16((x) & REVISION__VALUE)
-#define REVISION_5_1                           0x00000501
 
 #define ONFI_DEVICE_FEATURES                   0x380
 #define     ONFI_DEVICE_FEATURES__VALUE                        0x003f
@@ -462,8 +460,13 @@ struct denali_nand_info {
        uint32_t blksperchip;
        uint32_t bbtskipbytes;
        uint32_t max_banks;
+       unsigned int revision;
+       unsigned int caps;
 };
 
+#define DENALI_CAP_HW_ECC_FIXUP                        BIT(0)
+#define DENALI_CAP_DMA_64BIT                   BIT(1)
+
 int denali_init(struct denali_nand_info *denali);
 
 #endif /* __DENALI_H__ */
index 0a6155c748c493f80e677289f2434bb8182bdf35..4afd679a04b2c9eeb559d3e22ed65b09513979ec 100644 (file)
 
 #include "denali.h"
 
+struct denali_dt_data {
+       unsigned int revision;
+       unsigned int caps;
+};
+
+static const struct denali_dt_data denali_socfpga_data = {
+       .caps = DENALI_CAP_HW_ECC_FIXUP,
+};
+
+static const struct denali_dt_data denali_uniphier_v5a_data = {
+       .caps = DENALI_CAP_HW_ECC_FIXUP |
+               DENALI_CAP_DMA_64BIT,
+};
+
+static const struct denali_dt_data denali_uniphier_v5b_data = {
+       .revision = 0x0501,
+       .caps = DENALI_CAP_HW_ECC_FIXUP |
+               DENALI_CAP_DMA_64BIT,
+};
+
 static const struct udevice_id denali_nand_dt_ids[] = {
        {
                .compatible = "altr,socfpga-denali-nand",
+               .data = (unsigned long)&denali_socfpga_data,
        },
        {
                .compatible = "socionext,uniphier-denali-nand-v5a",
+               .data = (unsigned long)&denali_uniphier_v5a_data,
        },
        {
                .compatible = "socionext,uniphier-denali-nand-v5b",
+               .data = (unsigned long)&denali_uniphier_v5b_data,
        },
        { /* sentinel */ }
 };
@@ -28,9 +51,16 @@ static const struct udevice_id denali_nand_dt_ids[] = {
 static int denali_dt_probe(struct udevice *dev)
 {
        struct denali_nand_info *denali = dev_get_priv(dev);
+       const struct denali_dt_data *data;
        struct resource res;
        int ret;
 
+       data = (void *)dev_get_driver_data(dev);
+       if (data) {
+               denali->revision = data->revision;
+               denali->caps = data->caps;
+       }
+
        ret = dev_read_resource_byname(dev, "denali_reg", &res);
        if (ret)
                return ret;