[U-Boot] [PATCH 0/7] ARM: uniphier: misc changes for v2016.01-rc3

Masahiro Yamada (7): ARM: uniphier: add functions to get SoC model/revision ARM: uniphier: call uniphier_get_board_param() without FDT blob ARM: uniphier: split ProXstream2 board data and change DDR frequency ARM: uniphier: compile uniphier_get_board_param() for U-Boot proper ARM: uniphier: add macros and revision code for sLD11 and LD10 ARM: uniphier: display model number all the time on boot up ARM: uniphier: merge umc/ and ddrphy/ into a single directory
arch/arm/mach-uniphier/Makefile | 4 ++-- arch/arm/mach-uniphier/boards.c | 27 ++++++++++++++++++---- arch/arm/mach-uniphier/cpu_info.c | 9 ++++++-- arch/arm/mach-uniphier/ddrphy/Makefile | 7 ------ arch/arm/mach-uniphier/dram/Makefile | 10 ++++++++ .../{ddrphy => dram}/ddrphy-ph1-ld4.c | 0 .../{ddrphy => dram}/ddrphy-ph1-pro4.c | 0 .../{ddrphy => dram}/ddrphy-ph1-sld8.c | 0 .../{ddrphy => dram}/ddrphy-training.c | 0 arch/arm/mach-uniphier/{umc => dram}/umc-ph1-ld4.c | 0 .../arm/mach-uniphier/{umc => dram}/umc-ph1-pro4.c | 0 .../arm/mach-uniphier/{umc => dram}/umc-ph1-sld8.c | 0 arch/arm/mach-uniphier/include/mach/init.h | 2 +- arch/arm/mach-uniphier/include/mach/soc_info.h | 15 +++++++++++- arch/arm/mach-uniphier/init/init.c | 4 +--- arch/arm/mach-uniphier/soc_info.c | 22 ++++++++++++++++++ arch/arm/mach-uniphier/umc/Makefile | 7 ------ 17 files changed, 79 insertions(+), 28 deletions(-) delete mode 100644 arch/arm/mach-uniphier/ddrphy/Makefile create mode 100644 arch/arm/mach-uniphier/dram/Makefile rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-ld4.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-pro4.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-sld8.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-training.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-ld4.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-pro4.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-sld8.c (100%) delete mode 100644 arch/arm/mach-uniphier/umc/Makefile

We sometimes have to implement different code depending on the SoC revision. This commit adds functions to get the model/revision number.
Note: Model number: incremented on major changes of the SoC Revision number: incremented on minor changes of the SoC
The "Model 2" exists for PH1-sLD3, ProXstream2/PH1-LD6b.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/include/mach/soc_info.h | 3 +++ arch/arm/mach-uniphier/soc_info.c | 12 ++++++++++++ 2 files changed, 15 insertions(+)
diff --git a/arch/arm/mach-uniphier/include/mach/soc_info.h b/arch/arm/mach-uniphier/include/mach/soc_info.h index 623e7ef..6e25baa 100644 --- a/arch/arm/mach-uniphier/include/mach/soc_info.h +++ b/arch/arm/mach-uniphier/include/mach/soc_info.h @@ -60,4 +60,7 @@ static inline enum uniphier_soc_id uniphier_get_soc_type(void) } #endif
+int uniphier_get_soc_model(void); +int uniphier_get_soc_revision(void); + #endif /* __MACH_SOC_INFO_H__ */ diff --git a/arch/arm/mach-uniphier/soc_info.c b/arch/arm/mach-uniphier/soc_info.c index 3e8e7f4..a4010eb 100644 --- a/arch/arm/mach-uniphier/soc_info.c +++ b/arch/arm/mach-uniphier/soc_info.c @@ -59,3 +59,15 @@ enum uniphier_soc_id uniphier_get_soc_type(void) return ret; } #endif + +int uniphier_get_soc_model(void) +{ + return (readl(SG_REVISION) & SG_REVISION_MODEL_MASK) >> + SG_REVISION_MODEL_SHIFT; +} + +int uniphier_get_soc_revision(void) +{ + return (readl(SG_REVISION) & SG_REVISION_REV_MASK) >> + SG_REVISION_REV_SHIFT; +}

Move "gd->fdt_blob" from the caller to the callee so that this function can be used more easily.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/boards.c | 7 +++++-- arch/arm/mach-uniphier/include/mach/init.h | 2 +- arch/arm/mach-uniphier/init/init.c | 4 +--- 3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-uniphier/boards.c b/arch/arm/mach-uniphier/boards.c index 812c58f..f328143 100644 --- a/arch/arm/mach-uniphier/boards.c +++ b/arch/arm/mach-uniphier/boards.c @@ -4,10 +4,13 @@ * SPDX-License-Identifier: GPL-2.0+ */
+#include <common.h> #include <libfdt.h> #include <linux/kernel.h> #include <mach/init.h>
+DECLARE_GLOBAL_DATA_PTR; + #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) static const struct uniphier_board_data ph1_sld3_data = { .dram_ch0_base = 0x80000000, @@ -116,12 +119,12 @@ static const struct uniphier_board_id uniphier_boards[] = { #endif };
-const struct uniphier_board_data *uniphier_get_board_param(const void *fdt) +const struct uniphier_board_data *uniphier_get_board_param(void) { int i;
for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { - if (!fdt_node_check_compatible(fdt, 0, + if (!fdt_node_check_compatible(gd->fdt_blob, 0, uniphier_boards[i].compatible)) return uniphier_boards[i].param; } diff --git a/arch/arm/mach-uniphier/include/mach/init.h b/arch/arm/mach-uniphier/include/mach/init.h index 5108edd..27ae27d 100644 --- a/arch/arm/mach-uniphier/include/mach/init.h +++ b/arch/arm/mach-uniphier/include/mach/init.h @@ -20,7 +20,7 @@ struct uniphier_board_data { unsigned int dram_freq; };
-const struct uniphier_board_data *uniphier_get_board_param(const void *fdt); +const struct uniphier_board_data *uniphier_get_board_param(void);
int ph1_sld3_init(const struct uniphier_board_data *bd); int ph1_ld4_init(const struct uniphier_board_data *bd); diff --git a/arch/arm/mach-uniphier/init/init.c b/arch/arm/mach-uniphier/init/init.c index bbfc8e5..eda169e 100644 --- a/arch/arm/mach-uniphier/init/init.c +++ b/arch/arm/mach-uniphier/init/init.c @@ -9,13 +9,11 @@ #include <mach/init.h> #include <mach/soc_info.h>
-DECLARE_GLOBAL_DATA_PTR; - void spl_board_init(void) { const struct uniphier_board_data *param;
- param = uniphier_get_board_param(gd->fdt_blob); + param = uniphier_get_board_param(); if (!param) hang();

The DDR3 memory chips on ProXstream2 boards support up to 2133 MHz, while only up to 1866MHz on PH1-LD6b boards.
Split the board data structure and change the DDR frequency of ProXstream2 boards to 2133 MHz.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/boards.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-uniphier/boards.c b/arch/arm/mach-uniphier/boards.c index f328143..d075a11 100644 --- a/arch/arm/mach-uniphier/boards.c +++ b/arch/arm/mach-uniphier/boards.c @@ -74,8 +74,7 @@ static const struct uniphier_board_data ph1_pro5_data = { }; #endif
-#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ - defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) static const struct uniphier_board_data proxstream2_data = { .dram_ch0_base = 0x80000000, .dram_ch0_size = 0x40000000, @@ -86,6 +85,21 @@ static const struct uniphier_board_data proxstream2_data = { .dram_ch2_base = 0xe0000000, .dram_ch2_size = 0x20000000, .dram_ch2_width = 16, + .dram_freq = 2133, +}; +#endif + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) +static const struct uniphier_board_data ph1_ld6b_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x40000000, + .dram_ch0_width = 32, + .dram_ch1_base = 0xc0000000, + .dram_ch1_size = 0x20000000, + .dram_ch1_width = 32, + .dram_ch2_base = 0xe0000000, + .dram_ch2_size = 0x20000000, + .dram_ch2_width = 16, .dram_freq = 1866, }; #endif @@ -115,7 +129,7 @@ static const struct uniphier_board_id uniphier_boards[] = { { "socionext,proxstream2", &proxstream2_data, }, #endif #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) - { "socionext,ph1-ld6b", &proxstream2_data, }, + { "socionext,ph1-ld6b", &ph1_ld6b_data, }, #endif };

Compile this file for U-Boot proper as well as SPL, so that the U-Boot proper can call uniphier_get_board_param().
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index b597a13..86929a2 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -6,7 +6,6 @@ ifdef CONFIG_SPL_BUILD
obj-y += lowlevel_init.o obj-y += init_page_table.o -obj-y += boards.o
obj-y += init/ bcu/ memconf/ pll/ early-clk/ early-pinctrl/ umc/ ddrphy/ obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc/ @@ -33,6 +32,7 @@ obj-y += pinctrl/ clk/ endif
obj-y += timer.o +obj-y += boards.o obj-y += soc_info.o obj-y += boot-mode/

These are new SoCs from Socionext Inc.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/cpu_info.c | 6 ++++++ arch/arm/mach-uniphier/include/mach/soc_info.h | 12 +++++++++++- arch/arm/mach-uniphier/soc_info.c | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-uniphier/cpu_info.c b/arch/arm/mach-uniphier/cpu_info.c index 5d9ed84..acfb06d 100644 --- a/arch/arm/mach-uniphier/cpu_info.c +++ b/arch/arm/mach-uniphier/cpu_info.c @@ -43,6 +43,12 @@ int print_cpuinfo(void) case 0x2F: puts("PH1-LD6b (MN2WS0320)"); break; + case 0x31: + puts("PH1-sLD11 ()"); + break; + case 0x32: + puts("PH1-LD10 ()"); + break; default: printf("Unknown Processor ID (0x%x)\n", revision); return -1; diff --git a/arch/arm/mach-uniphier/include/mach/soc_info.h b/arch/arm/mach-uniphier/include/mach/soc_info.h index 6e25baa..3cfd1e9 100644 --- a/arch/arm/mach-uniphier/include/mach/soc_info.h +++ b/arch/arm/mach-uniphier/include/mach/soc_info.h @@ -15,6 +15,8 @@ enum uniphier_soc_id { SOC_UNIPHIER_PH1_PRO5, SOC_UNIPHIER_PROXSTREAM2, SOC_UNIPHIER_PH1_LD6B, + SOC_UNIPHIER_PH1_SLD11, + SOC_UNIPHIER_PH1_LD10, SOC_UNIPHIER_UNKNOWN, };
@@ -25,7 +27,9 @@ enum uniphier_soc_id { IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + \ IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + \ IS_ENABLED(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) + \ - IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + \ + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_SLD11) + \ + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_LD10)
#define UNIPHIER_MULTI_SOC ((UNIPHIER_NR_ENABLED_SOCS) > 1)
@@ -55,6 +59,12 @@ static inline enum uniphier_soc_id uniphier_get_soc_type(void) #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) return SOC_UNIPHIER_PH1_LD6B; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD11) + return SOC_UNIPHIER_PH1_SLD11; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD10) + return SOC_UNIPHIER_PH1_LD10; +#endif
return SOC_UNIPHIER_UNKNOWN; } diff --git a/arch/arm/mach-uniphier/soc_info.c b/arch/arm/mach-uniphier/soc_info.c index a4010eb..6cdeae6 100644 --- a/arch/arm/mach-uniphier/soc_info.c +++ b/arch/arm/mach-uniphier/soc_info.c @@ -51,6 +51,16 @@ enum uniphier_soc_id uniphier_get_soc_type(void) ret = SOC_UNIPHIER_PH1_LD6B; break; #endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_SLD11 + case 0x31: + ret = SOC_UNIPHIER_PH1_SLD11; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_LD10 + case 0x32: + ret = SOC_UNIPHIER_PH1_LD10; + break; +#endif default: ret = SOC_UNIPHIER_UNKNOWN; break;

Both "Model 1" and "Model 2" are supported for ProXstream2 and PH1-LD6b boards. It is useful to show the model number in the boot banner.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/cpu_info.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/mach-uniphier/cpu_info.c b/arch/arm/mach-uniphier/cpu_info.c index acfb06d..935b209 100644 --- a/arch/arm/mach-uniphier/cpu_info.c +++ b/arch/arm/mach-uniphier/cpu_info.c @@ -54,8 +54,7 @@ int print_cpuinfo(void) return -1; }
- if (model > 1) - printf(" model %d", model); + printf(" model %d", model);
printf(" (rev. %d)\n", rev);

The UMC (Universal Memory Controller) and the DDR PHY block are highly related to each other. It is better to have both code in the same directory.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Makefile | 2 +- arch/arm/mach-uniphier/ddrphy/Makefile | 7 ------- arch/arm/mach-uniphier/dram/Makefile | 10 ++++++++++ arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-ld4.c | 0 arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-pro4.c | 0 arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-sld8.c | 0 arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-training.c | 0 arch/arm/mach-uniphier/{umc => dram}/umc-ph1-ld4.c | 0 arch/arm/mach-uniphier/{umc => dram}/umc-ph1-pro4.c | 0 arch/arm/mach-uniphier/{umc => dram}/umc-ph1-sld8.c | 0 arch/arm/mach-uniphier/umc/Makefile | 7 ------- 11 files changed, 11 insertions(+), 15 deletions(-) delete mode 100644 arch/arm/mach-uniphier/ddrphy/Makefile create mode 100644 arch/arm/mach-uniphier/dram/Makefile rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-ld4.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-pro4.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-ph1-sld8.c (100%) rename arch/arm/mach-uniphier/{ddrphy => dram}/ddrphy-training.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-ld4.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-pro4.c (100%) rename arch/arm/mach-uniphier/{umc => dram}/umc-ph1-sld8.c (100%) delete mode 100644 arch/arm/mach-uniphier/umc/Makefile
diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index 86929a2..5b19f93 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -7,7 +7,7 @@ ifdef CONFIG_SPL_BUILD obj-y += lowlevel_init.o obj-y += init_page_table.o
-obj-y += init/ bcu/ memconf/ pll/ early-clk/ early-pinctrl/ umc/ ddrphy/ +obj-y += init/ bcu/ memconf/ pll/ early-clk/ early-pinctrl/ dram/ obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc/
obj-$(CONFIG_DEBUG_LL) += debug_ll.o diff --git a/arch/arm/mach-uniphier/ddrphy/Makefile b/arch/arm/mach-uniphier/ddrphy/Makefile deleted file mode 100644 index d0f4bd3..0000000 --- a/arch/arm/mach-uniphier/ddrphy/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += ddrphy-training.o ddrphy-ph1-ld4.o -obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += ddrphy-training.o ddrphy-ph1-pro4.o -obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += ddrphy-training.o ddrphy-ph1-sld8.o diff --git a/arch/arm/mach-uniphier/dram/Makefile b/arch/arm/mach-uniphier/dram/Makefile new file mode 100644 index 0000000..d3a767b --- /dev/null +++ b/arch/arm/mach-uniphier/dram/Makefile @@ -0,0 +1,10 @@ +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += umc-ph1-ld4.o \ + ddrphy-training.o ddrphy-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += umc-ph1-pro4.o \ + ddrphy-training.o ddrphy-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += umc-ph1-sld8.o \ + ddrphy-training.o ddrphy-ph1-sld8.o diff --git a/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-ld4.c b/arch/arm/mach-uniphier/dram/ddrphy-ph1-ld4.c similarity index 100% rename from arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-ld4.c rename to arch/arm/mach-uniphier/dram/ddrphy-ph1-ld4.c diff --git a/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-pro4.c b/arch/arm/mach-uniphier/dram/ddrphy-ph1-pro4.c similarity index 100% rename from arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-pro4.c rename to arch/arm/mach-uniphier/dram/ddrphy-ph1-pro4.c diff --git a/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-sld8.c b/arch/arm/mach-uniphier/dram/ddrphy-ph1-sld8.c similarity index 100% rename from arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-sld8.c rename to arch/arm/mach-uniphier/dram/ddrphy-ph1-sld8.c diff --git a/arch/arm/mach-uniphier/ddrphy/ddrphy-training.c b/arch/arm/mach-uniphier/dram/ddrphy-training.c similarity index 100% rename from arch/arm/mach-uniphier/ddrphy/ddrphy-training.c rename to arch/arm/mach-uniphier/dram/ddrphy-training.c diff --git a/arch/arm/mach-uniphier/umc/umc-ph1-ld4.c b/arch/arm/mach-uniphier/dram/umc-ph1-ld4.c similarity index 100% rename from arch/arm/mach-uniphier/umc/umc-ph1-ld4.c rename to arch/arm/mach-uniphier/dram/umc-ph1-ld4.c diff --git a/arch/arm/mach-uniphier/umc/umc-ph1-pro4.c b/arch/arm/mach-uniphier/dram/umc-ph1-pro4.c similarity index 100% rename from arch/arm/mach-uniphier/umc/umc-ph1-pro4.c rename to arch/arm/mach-uniphier/dram/umc-ph1-pro4.c diff --git a/arch/arm/mach-uniphier/umc/umc-ph1-sld8.c b/arch/arm/mach-uniphier/dram/umc-ph1-sld8.c similarity index 100% rename from arch/arm/mach-uniphier/umc/umc-ph1-sld8.c rename to arch/arm/mach-uniphier/dram/umc-ph1-sld8.c diff --git a/arch/arm/mach-uniphier/umc/Makefile b/arch/arm/mach-uniphier/umc/Makefile deleted file mode 100644 index 89b2dec..0000000 --- a/arch/arm/mach-uniphier/umc/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += umc-ph1-ld4.o -obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += umc-ph1-pro4.o -obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += umc-ph1-sld8.o

2015-12-17 17:47 GMT+09:00 Masahiro Yamada yamada.masahiro@socionext.com:
Masahiro Yamada (7): ARM: uniphier: add functions to get SoC model/revision ARM: uniphier: call uniphier_get_board_param() without FDT blob ARM: uniphier: split ProXstream2 board data and change DDR frequency ARM: uniphier: compile uniphier_get_board_param() for U-Boot proper ARM: uniphier: add macros and revision code for sLD11 and LD10 ARM: uniphier: display model number all the time on boot up ARM: uniphier: merge umc/ and ddrphy/ into a single directory
Series, applied to u-boot-uniphier/master.
participants (1)
-
Masahiro Yamada