[U-Boot] [PATCH v2 00/14] ARM: uniphier: clean-up, refactor, and then new SoCs support

Masahiro Yamada (14): ARM: uniphier: remove unused header file ARM: uniphier: remove useless wrapper functions ARM: uniphier: refactor LED function ARM: uniphier: move CONFIG_SUPPORT_CARD_* macros to local file ARM: uniphier: allow to disable CONFIG_MICRO_SUPPORT_CARD ARM: uniphier: rename CONFIG_MACH_* to CONFIG_ARCH_UNIPHIER_* ARM: uniphier: delete unneeded input enable for low-level debug ARM: uniphier: fix glitch signal problem for low-level debug ARM: uniphier: unify low-level debug init code ARM: uniphier: remove kernel parameter settings from environment ARM: uniphier: allow to enable multiple SoCs ARM: uniphier: add PH1-Pro5 support ARM: uniphier: add ProXstream2 and PH1-LD6b support ARM: uniphier: fix init page table for ProXstream2/PH1-LD6b USB boot
arch/arm/dts/Makefile | 5 +- arch/arm/dts/uniphier-ph1-ld6b-ref.dts | 1 + arch/arm/dts/uniphier-ph1-pro5-4kbox.dts | 64 +++++++ arch/arm/dts/uniphier-proxstream2-gentil.dts | 62 +++++++ arch/arm/dts/uniphier-proxstream2-vodka.dts | 62 +++++++ arch/arm/mach-uniphier/Kconfig | 76 +++++---- arch/arm/mach-uniphier/Makefile | 20 ++- arch/arm/mach-uniphier/bcu/Makefile | 3 + .../{ph1-ld4/bcu_init.c => bcu/bcu-ph1-ld4.c} | 8 +- .../{ph1-sld3/bcu_init.c => bcu/bcu-ph1-sld3.c} | 8 +- arch/arm/mach-uniphier/board_common.c | 11 +- arch/arm/mach-uniphier/board_early_init_f.c | 73 ++++++-- arch/arm/mach-uniphier/board_early_init_r.c | 7 +- arch/arm/mach-uniphier/boards.c | 130 +++++++++++++++ arch/arm/mach-uniphier/boot-mode/Makefile | 9 + .../boot-mode.c => boot-mode/boot-mode-ph1-ld4.c} | 21 ++- .../mach-uniphier/boot-mode/boot-mode-ph1-pro5.c | 75 +++++++++ .../boot-mode.c => boot-mode/boot-mode-ph1-sld3.c} | 23 ++- .../boot-mode/boot-mode-proxstream2.c | 75 +++++++++ arch/arm/mach-uniphier/boot-mode/boot-mode.c | 45 +++++ arch/arm/mach-uniphier/clk/Makefile | 7 + .../{ph1-ld4/clkrst_init.c => clk/clk-ph1-ld4.c} | 3 +- .../{ph1-pro4/clkrst_init.c => clk/clk-ph1-pro4.c} | 3 +- arch/arm/mach-uniphier/clk/clk-ph1-pro5.c | 44 +++++ arch/arm/mach-uniphier/clk/clk-proxstream2.c | 50 ++++++ arch/arm/mach-uniphier/cmd_pinmon.c | 43 +++-- arch/arm/mach-uniphier/ddrphy/Makefile | 3 + .../ddrphy_init.c => ddrphy/ddrphy-ph1-ld4.c} | 4 +- .../ddrphy_init.c => ddrphy/ddrphy-ph1-pro4.c} | 4 +- .../ddrphy_init.c => ddrphy/ddrphy-ph1-sld8.c} | 4 +- .../ddrphy-training.c} | 0 arch/arm/mach-uniphier/debug_ll.S | 185 +++++++++++++++++++++ arch/arm/mach-uniphier/early-clk/Makefile | 7 + .../early-clk-ph1-ld4.c} | 5 +- .../mach-uniphier/early-clk/early-clk-ph1-pro5.c | 39 +++++ .../early-clk/early-clk-proxstream2.c | 44 +++++ arch/arm/mach-uniphier/early-pinctrl/Makefile | 1 + .../early-pinctrl-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/include/mach/boot-device.h | 15 +- arch/arm/mach-uniphier/include/mach/ddrphy-regs.h | 7 +- arch/arm/mach-uniphier/include/mach/debug-uart.S | 23 --- arch/arm/mach-uniphier/include/mach/init.h | 99 +++++++++++ arch/arm/mach-uniphier/include/mach/led.h | 100 ----------- .../include/mach/{board.h => micro-support-card.h} | 23 ++- arch/arm/mach-uniphier/include/mach/platdevice.h | 24 --- arch/arm/mach-uniphier/include/mach/sc-regs.h | 25 ++- arch/arm/mach-uniphier/include/mach/sg-regs.h | 10 +- arch/arm/mach-uniphier/include/mach/soc_info.h | 63 +++++++ arch/arm/mach-uniphier/init/Makefile | 9 + arch/arm/mach-uniphier/init/init-ph1-ld4.c | 60 +++++++ arch/arm/mach-uniphier/init/init-ph1-pro4.c | 58 +++++++ arch/arm/mach-uniphier/init/init-ph1-pro5.c | 42 +++++ arch/arm/mach-uniphier/init/init-ph1-sld3.c | 53 ++++++ arch/arm/mach-uniphier/init/init-ph1-sld8.c | 60 +++++++ arch/arm/mach-uniphier/init/init-proxstream2.c | 41 +++++ arch/arm/mach-uniphier/init/init.c | 58 +++++++ arch/arm/mach-uniphier/init_page_table.S | 2 +- arch/arm/mach-uniphier/lowlevel_init.S | 3 +- arch/arm/mach-uniphier/memconf.c | 103 ------------ arch/arm/mach-uniphier/memconf/Makefile | 4 + arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c | 59 +++++++ .../mach-uniphier/memconf/memconf-proxstream2.c | 64 +++++++ arch/arm/mach-uniphier/memconf/memconf.c | 104 ++++++++++++ .../{support_card.c => micro-support-card.c} | 86 +++++++++- arch/arm/mach-uniphier/ph1-ld4/Makefile | 14 -- arch/arm/mach-uniphier/ph1-ld4/boot-mode.c | 1 - arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S | 29 ---- arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c | 1 - arch/arm/mach-uniphier/ph1-pro4/Makefile | 14 -- arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S | 39 ----- arch/arm/mach-uniphier/ph1-sld3/Makefile | 14 -- arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c | 1 - .../arm/mach-uniphier/ph1-sld3/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S | 33 ---- arch/arm/mach-uniphier/ph1-sld3/memconf.c | 52 ------ arch/arm/mach-uniphier/ph1-sld3/sg_init.c | 9 - arch/arm/mach-uniphier/ph1-sld3/umc_init.c | 15 -- arch/arm/mach-uniphier/ph1-sld8/Makefile | 1 - arch/arm/mach-uniphier/ph1-sld8/bcu_init.c | 1 - arch/arm/mach-uniphier/ph1-sld8/boot-mode.c | 1 - arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c | 1 - .../arm/mach-uniphier/ph1-sld8/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S | 29 ---- arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c | 1 - arch/arm/mach-uniphier/ph1-sld8/sbc_init.c | 1 - arch/arm/mach-uniphier/pinctrl/Makefile | 7 + .../pinctrl.c => pinctrl/pinctrl-ph1-ld4.c} | 3 +- arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c | 45 +++++ .../pinctrl.c => pinctrl/pinctrl-ph1-pro4.c} | 3 +- arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c | 43 +++++ .../pinctrl.c => pinctrl/pinctrl-ph1-sld3.c} | 3 +- .../pinctrl.c => pinctrl/pinctrl-ph1-sld8.c} | 3 +- .../mach-uniphier/pinctrl/pinctrl-proxstream2.c | 45 +++++ arch/arm/mach-uniphier/pll/Makefile | 8 + .../{ph1-ld4/pll_init.c => pll/pll-init-ph1-ld4.c} | 34 ++-- .../pll_init.c => pll/pll-init-ph1-pro4.c} | 36 ++-- .../pll_init.c => pll/pll-init-ph1-sld3.c} | 5 +- .../pll_init.c => pll/pll-init-ph1-sld8.c} | 5 +- .../pll_spectrum.c => pll/pll-spectrum-ph1-ld4.c} | 6 +- .../pll_spectrum.c => pll/pll-spectrum-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/print_misc_info.c | 2 +- arch/arm/mach-uniphier/sbc/Makefile | 7 + .../{ph1-ld4/sbc_init.c => sbc/sbc-ph1-ld4.c} | 5 +- .../{ph1-pro4/sbc_init.c => sbc/sbc-ph1-pro4.c} | 5 +- .../{ph1-sld3/sbc_init.c => sbc/sbc-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/sbc/sbc-proxstream2.c | 48 ++++++ arch/arm/mach-uniphier/soc_info.c | 61 +++++++ arch/arm/mach-uniphier/spl.c | 83 --------- arch/arm/mach-uniphier/umc/Makefile | 3 + .../{ph1-ld4/umc_init.c => umc/umc-ph1-ld4.c} | 30 ++-- .../{ph1-pro4/umc_init.c => umc/umc-ph1-pro4.c} | 36 ++-- .../{ph1-sld8/umc_init.c => umc/umc-ph1-sld8.c} | 30 ++-- configs/ph1_ld4_defconfig | 2 +- configs/ph1_ld6b_defconfig | 30 ++++ configs/ph1_pro4_defconfig | 1 + configs/ph1_pro5_defconfig | 30 ++++ configs/ph1_sld3_defconfig | 2 +- configs/ph1_sld8_defconfig | 2 +- doc/README.uniphier | 12 ++ drivers/pinctrl/uniphier/Kconfig | 12 +- include/configs/uniphier.h | 90 ++-------- 122 files changed, 2542 insertions(+), 889 deletions(-) create mode 100644 arch/arm/dts/uniphier-ph1-pro5-4kbox.dts create mode 100644 arch/arm/dts/uniphier-proxstream2-gentil.dts create mode 100644 arch/arm/dts/uniphier-proxstream2-vodka.dts create mode 100644 arch/arm/mach-uniphier/bcu/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/bcu_init.c => bcu/bcu-ph1-ld4.c} (84%) rename arch/arm/mach-uniphier/{ph1-sld3/bcu_init.c => bcu/bcu-ph1-sld3.c} (84%) create mode 100644 arch/arm/mach-uniphier/boards.c create mode 100644 arch/arm/mach-uniphier/boot-mode/Makefile rename arch/arm/mach-uniphier/{ph1-pro4/boot-mode.c => boot-mode/boot-mode-ph1-ld4.c} (88%) create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-pro5.c rename arch/arm/mach-uniphier/{ph1-sld3/boot-mode.c => boot-mode/boot-mode-ph1-sld3.c} (89%) create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode-proxstream2.c create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode.c create mode 100644 arch/arm/mach-uniphier/clk/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/clkrst_init.c => clk/clk-ph1-ld4.c} (94%) rename arch/arm/mach-uniphier/{ph1-pro4/clkrst_init.c => clk/clk-ph1-pro4.c} (96%) create mode 100644 arch/arm/mach-uniphier/clk/clk-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/clk/clk-proxstream2.c create mode 100644 arch/arm/mach-uniphier/ddrphy/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/ddrphy_init.c => ddrphy/ddrphy-ph1-ld4.c} (95%) rename arch/arm/mach-uniphier/{ph1-pro4/ddrphy_init.c => ddrphy/ddrphy-ph1-pro4.c} (95%) rename arch/arm/mach-uniphier/{ph1-sld8/ddrphy_init.c => ddrphy/ddrphy-ph1-sld8.c} (95%) rename arch/arm/mach-uniphier/{ddrphy_training.c => ddrphy/ddrphy-training.c} (100%) create mode 100644 arch/arm/mach-uniphier/debug_ll.S create mode 100644 arch/arm/mach-uniphier/early-clk/Makefile rename arch/arm/mach-uniphier/{ph1-pro4/early_clkrst_init.c => early-clk/early-clk-ph1-ld4.c} (86%) create mode 100644 arch/arm/mach-uniphier/early-clk/early-clk-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/early-clk/early-clk-proxstream2.c create mode 100644 arch/arm/mach-uniphier/early-pinctrl/Makefile rename arch/arm/mach-uniphier/{ph1-sld3/early_pinctrl.c => early-pinctrl/early-pinctrl-ph1-sld3.c} (82%) delete mode 100644 arch/arm/mach-uniphier/include/mach/debug-uart.S create mode 100644 arch/arm/mach-uniphier/include/mach/init.h delete mode 100644 arch/arm/mach-uniphier/include/mach/led.h rename arch/arm/mach-uniphier/include/mach/{board.h => micro-support-card.h} (55%) delete mode 100644 arch/arm/mach-uniphier/include/mach/platdevice.h create mode 100644 arch/arm/mach-uniphier/include/mach/soc_info.h create mode 100644 arch/arm/mach-uniphier/init/Makefile create mode 100644 arch/arm/mach-uniphier/init/init-ph1-ld4.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-pro4.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-sld3.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-sld8.c create mode 100644 arch/arm/mach-uniphier/init/init-proxstream2.c create mode 100644 arch/arm/mach-uniphier/init/init.c delete mode 100644 arch/arm/mach-uniphier/memconf.c create mode 100644 arch/arm/mach-uniphier/memconf/Makefile create mode 100644 arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c create mode 100644 arch/arm/mach-uniphier/memconf/memconf-proxstream2.c create mode 100644 arch/arm/mach-uniphier/memconf/memconf.c rename arch/arm/mach-uniphier/{support_card.c => micro-support-card.c} (67%) delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/boot-mode.c delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c delete mode 100644 arch/arm/mach-uniphier/ph1-pro4/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/memconf.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/sg_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/umc_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/bcu_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/boot-mode.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/sbc_init.c create mode 100644 arch/arm/mach-uniphier/pinctrl/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/pinctrl.c => pinctrl/pinctrl-ph1-ld4.c} (97%) create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c rename arch/arm/mach-uniphier/{ph1-pro4/pinctrl.c => pinctrl/pinctrl-ph1-pro4.c} (97%) create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c rename arch/arm/mach-uniphier/{ph1-sld3/pinctrl.c => pinctrl/pinctrl-ph1-sld3.c} (91%) rename arch/arm/mach-uniphier/{ph1-sld8/pinctrl.c => pinctrl/pinctrl-ph1-sld8.c} (96%) create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-proxstream2.c create mode 100644 arch/arm/mach-uniphier/pll/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/pll_init.c => pll/pll-init-ph1-ld4.c} (90%) rename arch/arm/mach-uniphier/{ph1-pro4/pll_init.c => pll/pll-init-ph1-pro4.c} (88%) rename arch/arm/mach-uniphier/{ph1-sld3/pll_init.c => pll/pll-init-ph1-sld3.c} (62%) rename arch/arm/mach-uniphier/{ph1-sld8/pll_init.c => pll/pll-init-ph1-sld8.c} (97%) rename arch/arm/mach-uniphier/{ph1-sld3/pll_spectrum.c => pll/pll-spectrum-ph1-ld4.c} (72%) rename arch/arm/mach-uniphier/{ph1-pro4/pll_spectrum.c => pll/pll-spectrum-ph1-sld3.c} (73%) create mode 100644 arch/arm/mach-uniphier/sbc/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/sbc_init.c => sbc/sbc-ph1-ld4.c} (92%) rename arch/arm/mach-uniphier/{ph1-pro4/sbc_init.c => sbc/sbc-ph1-pro4.c} (91%) rename arch/arm/mach-uniphier/{ph1-sld3/sbc_init.c => sbc/sbc-ph1-sld3.c} (92%) create mode 100644 arch/arm/mach-uniphier/sbc/sbc-proxstream2.c create mode 100644 arch/arm/mach-uniphier/soc_info.c delete mode 100644 arch/arm/mach-uniphier/spl.c create mode 100644 arch/arm/mach-uniphier/umc/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/umc_init.c => umc/umc-ph1-ld4.c} (88%) rename arch/arm/mach-uniphier/{ph1-pro4/umc_init.c => umc/umc-ph1-pro4.c} (85%) rename arch/arm/mach-uniphier/{ph1-sld8/umc_init.c => umc/umc-ph1-sld8.c} (87%) create mode 100644 configs/ph1_ld6b_defconfig create mode 100644 configs/ph1_pro5_defconfig

This has been unused since commit f4e190e317b8 ("ARM: uniphier: enable SPL_OF_CONTROL").
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/include/mach/platdevice.h | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 arch/arm/mach-uniphier/include/mach/platdevice.h
diff --git a/arch/arm/mach-uniphier/include/mach/platdevice.h b/arch/arm/mach-uniphier/include/mach/platdevice.h deleted file mode 100644 index cdf7d13..0000000 --- a/arch/arm/mach-uniphier/include/mach/platdevice.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#ifndef ARCH_PLATDEVICE_H -#define ARCH_PLATDEVICE_H - -#include <dm/platdata.h> -#include <dm/platform_data/serial-uniphier.h> - -#define SERIAL_DEVICE(n, ba, clk) \ -static struct uniphier_serial_platform_data serial_device##n = { \ - .base = ba, \ - .uartclk = clk \ -}; \ -U_BOOT_DEVICE(serial##n) = { \ - .name = DRIVER_NAME, \ - .platdata = &serial_device##n \ -}; - -#endif /* ARCH_PLATDEVICE_H */

The wrapper functions, uniphier_board_*, are just making function calls complex. Remove them.
Also, use empty inline functions in case CONFIG_MICRO_SUPPORT_CARD is disabled, so that prototype checking works.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/board_early_init_r.c | 5 ++--- arch/arm/mach-uniphier/include/mach/board.h | 18 ++++++------------ arch/arm/mach-uniphier/spl.c | 4 ++-- 3 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/arch/arm/mach-uniphier/board_early_init_r.c b/arch/arm/mach-uniphier/board_early_init_r.c index 579fe70..7d4830a 100644 --- a/arch/arm/mach-uniphier/board_early_init_r.c +++ b/arch/arm/mach-uniphier/board_early_init_r.c @@ -1,6 +1,5 @@ /* - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com + * Copyright (C) 2014-2015 Masahiro Yamada yamada.masahiro@socionext.com * * SPDX-License-Identifier: GPL-2.0+ */ @@ -10,6 +9,6 @@
int board_early_init_r(void) { - uniphier_board_late_init(); + support_card_late_init(); return 0; } diff --git a/arch/arm/mach-uniphier/include/mach/board.h b/arch/arm/mach-uniphier/include/mach/board.h index c039d80..5b9af22 100644 --- a/arch/arm/mach-uniphier/include/mach/board.h +++ b/arch/arm/mach-uniphier/include/mach/board.h @@ -13,28 +13,22 @@ void support_card_init(void); void support_card_late_init(void); int check_support_card(void); #else -#define support_card_reset() do {} while (0) -#define support_card_init() do {} while (0) -#define support_card_late_init() do {} while (0) -static inline int check_support_card(void) +static inline void support_card_reset(void) { - return 0; } -#endif
-static inline void uniphier_board_reset(void) +static inline void support_card_init(void) { - support_card_reset(); }
-static inline void uniphier_board_init(void) +static inline void support_card_late_init(void) { - support_card_init(); }
-static inline void uniphier_board_late_init(void) +static inline int check_support_card(void) { - support_card_late_init(); + return 0; } +#endif
#endif /* ARCH_BOARD_H */ diff --git a/arch/arm/mach-uniphier/spl.c b/arch/arm/mach-uniphier/spl.c index 78534fc..661d73a 100644 --- a/arch/arm/mach-uniphier/spl.c +++ b/arch/arm/mach-uniphier/spl.c @@ -40,11 +40,11 @@ void spl_board_init(void)
sg_init();
- uniphier_board_reset(); + support_card_reset();
pll_init();
- uniphier_board_init(); + support_card_init();
led_write(L, 0, , );

The macro, led_write(), is now only used in C sources. There is no more reason to keep the tricky assembly macro. Replace it with a new C function led_puts().
Also, rename board.h to micro-support-card.h.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/board_common.c | 11 +-- arch/arm/mach-uniphier/board_early_init_f.c | 12 ++- arch/arm/mach-uniphier/board_early_init_r.c | 2 +- arch/arm/mach-uniphier/include/mach/led.h | 100 --------------------- .../include/mach/{board.h => micro-support-card.h} | 5 ++ arch/arm/mach-uniphier/lowlevel_init.S | 1 - arch/arm/mach-uniphier/print_misc_info.c | 2 +- arch/arm/mach-uniphier/spl.c | 18 ++-- arch/arm/mach-uniphier/support_card.c | 73 ++++++++++++++- 9 files changed, 96 insertions(+), 128 deletions(-) delete mode 100644 arch/arm/mach-uniphier/include/mach/led.h rename arch/arm/mach-uniphier/include/mach/{board.h => micro-support-card.h} (88%)
diff --git a/arch/arm/mach-uniphier/board_common.c b/arch/arm/mach-uniphier/board_common.c index 967fa6c..198004b 100644 --- a/arch/arm/mach-uniphier/board_common.c +++ b/arch/arm/mach-uniphier/board_common.c @@ -1,20 +1,15 @@ /* - * Copyright (C) 2012-2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com + * Copyright (C) 2012-2015 Masahiro Yamada yamada.masahiro@socionext.com * * SPDX-License-Identifier: GPL-2.0+ */
#include <common.h> -#include <mach/led.h> +#include <mach/micro-support-card.h>
-/* - * Routine: board_init - * Description: Early hardware init. - */ int board_init(void) { - led_write(U, B, O, O); + led_puts("Uboo");
return 0; } diff --git a/arch/arm/mach-uniphier/board_early_init_f.c b/arch/arm/mach-uniphier/board_early_init_f.c index 7108740..45f5cea 100644 --- a/arch/arm/mach-uniphier/board_early_init_f.c +++ b/arch/arm/mach-uniphier/board_early_init_f.c @@ -1,27 +1,25 @@ /* - * Copyright (C) 2012-2015 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com + * Copyright (C) 2012-2015 Masahiro Yamada yamada.masahiro@socionext.com * * SPDX-License-Identifier: GPL-2.0+ */
-#include <mach/led.h> -#include <mach/board.h> +#include <mach/micro-support-card.h>
void pin_init(void); void clkrst_init(void);
int board_early_init_f(void) { - led_write(U, 0, , ); + led_puts("U0");
pin_init();
- led_write(U, 1, , ); + led_puts("U1");
clkrst_init();
- led_write(U, 2, , ); + led_puts("U2");
return 0; } diff --git a/arch/arm/mach-uniphier/board_early_init_r.c b/arch/arm/mach-uniphier/board_early_init_r.c index 7d4830a..28c7f82 100644 --- a/arch/arm/mach-uniphier/board_early_init_r.c +++ b/arch/arm/mach-uniphier/board_early_init_r.c @@ -5,7 +5,7 @@ */
#include <common.h> -#include <mach/board.h> +#include <mach/micro-support-card.h>
int board_early_init_r(void) { diff --git a/arch/arm/mach-uniphier/include/mach/led.h b/arch/arm/mach-uniphier/include/mach/led.h deleted file mode 100644 index f7749b4..0000000 --- a/arch/arm/mach-uniphier/include/mach/led.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2012-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#ifndef ARCH_LED_H -#define ARCH_LED_H - -#include <config.h> - -#define LED_CHAR_0 0x7e -#define LED_CHAR_1 0x0c -#define LED_CHAR_2 0xb6 -#define LED_CHAR_3 0x9e -#define LED_CHAR_4 0xcc -#define LED_CHAR_5 0xda -#define LED_CHAR_6 0xfa -#define LED_CHAR_7 0x4e -#define LED_CHAR_8 0xfe -#define LED_CHAR_9 0xde - -#define LED_CHAR_A 0xee -#define LED_CHAR_B 0xf8 -#define LED_CHAR_C 0x72 -#define LED_CHAR_D 0xbc -#define LED_CHAR_E 0xf2 -#define LED_CHAR_F 0xe2 -#define LED_CHAR_G 0x7a -#define LED_CHAR_H 0xe8 -#define LED_CHAR_I 0x08 -#define LED_CHAR_J 0x3c -#define LED_CHAR_K 0xea -#define LED_CHAR_L 0x70 -#define LED_CHAR_M 0x6e -#define LED_CHAR_N 0xa8 -#define LED_CHAR_O 0xb8 -#define LED_CHAR_P 0xe6 -#define LED_CHAR_Q 0xce -#define LED_CHAR_R 0xa0 -#define LED_CHAR_S 0xc8 -#define LED_CHAR_T 0x8c -#define LED_CHAR_U 0x7c -#define LED_CHAR_V 0x54 -#define LED_CHAR_W 0xfc -#define LED_CHAR_X 0xec -#define LED_CHAR_Y 0xdc -#define LED_CHAR_Z 0xa4 - -#define LED_CHAR_SPACE 0x00 -#define LED_CHAR_DOT 0x01 - -#define LED_CHAR_ (LED_CHAR_SPACE) - -/** Macro to translate 4 characters into integer to display led */ -#define LED_C2I(C0, C1, C2, C3) \ - (~( \ - (LED_CHAR_##C0 << 24) | \ - (LED_CHAR_##C1 << 16) | \ - (LED_CHAR_##C2 << 8) | \ - (LED_CHAR_##C3) \ - )) - -#if defined(CONFIG_SUPPORT_CARD_LED_BASE) - -#define LED_ADDR CONFIG_SUPPORT_CARD_LED_BASE - -#ifdef __ASSEMBLY__ - -#define led_write(C0, C1, C2, C3) raw_led_write LED_C2I(C0, C1, C2, C3) -.macro raw_led_write data - ldr r0, =\data - ldr r1, =LED_ADDR - str r0, [r1] -.endm - -#else /* __ASSEMBLY__ */ - -#include <linux/io.h> - -#define led_write(C0, C1, C2, C3) \ -do { \ - raw_led_write(LED_C2I(C0, C1, C2, C3)); \ -} while (0) - -static inline void raw_led_write(u32 data) -{ - writel(data, LED_ADDR); -} - -#endif /* __ASSEMBLY__ */ - -#else /* CONFIG_SUPPORT_CARD_LED_BASE */ - -#define led_write(C0, C1, C2, C3) -#define raw_led_write(x) - -#endif /* CONFIG_SUPPORT_CARD_LED_BASE */ - -#endif /* ARCH_LED_H */ diff --git a/arch/arm/mach-uniphier/include/mach/board.h b/arch/arm/mach-uniphier/include/mach/micro-support-card.h similarity index 88% rename from arch/arm/mach-uniphier/include/mach/board.h rename to arch/arm/mach-uniphier/include/mach/micro-support-card.h index 5b9af22..5da0ada 100644 --- a/arch/arm/mach-uniphier/include/mach/board.h +++ b/arch/arm/mach-uniphier/include/mach/micro-support-card.h @@ -12,6 +12,7 @@ void support_card_reset(void); void support_card_init(void); void support_card_late_init(void); int check_support_card(void); +void led_puts(const char *s); #else static inline void support_card_reset(void) { @@ -29,6 +30,10 @@ static inline int check_support_card(void) { return 0; } + +static inline void led_puts(const char *s) +{ +} #endif
#endif /* ARCH_BOARD_H */ diff --git a/arch/arm/mach-uniphier/lowlevel_init.S b/arch/arm/mach-uniphier/lowlevel_init.S index fd34a4a..9259baf 100644 --- a/arch/arm/mach-uniphier/lowlevel_init.S +++ b/arch/arm/mach-uniphier/lowlevel_init.S @@ -8,7 +8,6 @@ #include <linux/linkage.h> #include <linux/sizes.h> #include <asm/system.h> -#include <mach/led.h> #include <mach/arm-mpcore.h> #include <mach/sbc-regs.h> #include <mach/ssc-regs.h> diff --git a/arch/arm/mach-uniphier/print_misc_info.c b/arch/arm/mach-uniphier/print_misc_info.c index 22ea512..5140b0c 100644 --- a/arch/arm/mach-uniphier/print_misc_info.c +++ b/arch/arm/mach-uniphier/print_misc_info.c @@ -5,7 +5,7 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#include <mach/board.h> +#include <mach/micro-support-card.h>
int misc_init_f(void) { diff --git a/arch/arm/mach-uniphier/spl.c b/arch/arm/mach-uniphier/spl.c index 661d73a..f0df9b1 100644 --- a/arch/arm/mach-uniphier/spl.c +++ b/arch/arm/mach-uniphier/spl.c @@ -7,8 +7,7 @@ #include <common.h> #include <spl.h> #include <linux/compiler.h> -#include <mach/led.h> -#include <mach/board.h> +#include <mach/micro-support-card.h>
void __weak bcu_init(void) { @@ -46,25 +45,25 @@ void spl_board_init(void)
support_card_init();
- led_write(L, 0, , ); + led_puts("L0");
memconf_init();
- led_write(L, 1, , ); + led_puts("L1");
early_clkrst_init();
- led_write(L, 2, , ); + led_puts("L2");
early_pin_init();
- led_write(L, 3, , ); + led_puts("L3");
#ifdef CONFIG_SPL_SERIAL_SUPPORT preloader_console_init(); #endif
- led_write(L, 4, , ); + led_puts("L4");
{ int res; @@ -75,9 +74,10 @@ void spl_board_init(void) ; } } - led_write(L, 5, , ); + + led_puts("L5");
enable_dpll_ssc();
- led_write(L, 6, , ); + led_puts("L6"); } diff --git a/arch/arm/mach-uniphier/support_card.c b/arch/arm/mach-uniphier/support_card.c index ef4576d..f833306 100644 --- a/arch/arm/mach-uniphier/support_card.c +++ b/arch/arm/mach-uniphier/support_card.c @@ -5,8 +5,9 @@ */
#include <common.h> +#include <linux/ctype.h> #include <linux/io.h> -#include <mach/board.h> +#include <mach/micro-support-card.h>
#define MICRO_SUPPORT_CARD_RESET \ ((CONFIG_SUPPORT_CARD_BASE) + 0x000D0034) @@ -155,3 +156,73 @@ void support_card_late_init(void) { detect_num_flash_banks(); } + +static const u8 ledval_num[] = { + 0x7e, /* 0 */ + 0x0c, /* 1 */ + 0xb6, /* 2 */ + 0x9e, /* 3 */ + 0xcc, /* 4 */ + 0xda, /* 5 */ + 0xfa, /* 6 */ + 0x4e, /* 7 */ + 0xfe, /* 8 */ + 0xde, /* 9 */ +}; + +static const u8 ledval_alpha[] = { + 0xee, /* A */ + 0xf8, /* B */ + 0x72, /* C */ + 0xbc, /* D */ + 0xf2, /* E */ + 0xe2, /* F */ + 0x7a, /* G */ + 0xe8, /* H */ + 0x08, /* I */ + 0x3c, /* J */ + 0xea, /* K */ + 0x70, /* L */ + 0x6e, /* M */ + 0xa8, /* N */ + 0xb8, /* O */ + 0xe6, /* P */ + 0xce, /* Q */ + 0xa0, /* R */ + 0xc8, /* S */ + 0x8c, /* T */ + 0x7c, /* U */ + 0x54, /* V */ + 0xfc, /* W */ + 0xec, /* X */ + 0xdc, /* Y */ + 0xa4, /* Z */ +}; + +static u8 char2ledval(char c) +{ + if (isdigit(c)) + return ledval_num[c - '0']; + else if (isalpha(c)) + return ledval_alpha[toupper(c) - 'A']; + + return 0; +} + +void led_puts(const char *s) +{ + int i; + u32 val = 0; + + if (!s) + return; + + for (i = 0; i < 4; i++) { + val <<= 8; + val |= char2ledval(*s); + if (*s != '\0') + s++; + } + + writel(~val, CONFIG_SUPPORT_CARD_LED_BASE); +}

It is no longer necessary to define CONFIG_SUPPORT_CARD_* globally. Move them to a C file as local macros. Also, rename the C file.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Makefile | 2 +- .../{support_card.c => micro-support-card.c} | 15 +++++++++------ include/configs/uniphier.h | 11 ++--------- 3 files changed, 12 insertions(+), 16 deletions(-) rename arch/arm/mach-uniphier/{support_card.c => micro-support-card.c} (90%)
diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index 5f17557..df6a569 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -29,7 +29,7 @@ endif
obj-y += timer.o
-obj-$(CONFIG_MICRO_SUPPORT_CARD) += support_card.o +obj-$(CONFIG_MICRO_SUPPORT_CARD) += micro-support-card.o
obj-$(CONFIG_MACH_PH1_SLD3) += ph1-sld3/ obj-$(CONFIG_MACH_PH1_LD4) += ph1-ld4/ diff --git a/arch/arm/mach-uniphier/support_card.c b/arch/arm/mach-uniphier/micro-support-card.c similarity index 90% rename from arch/arm/mach-uniphier/support_card.c rename to arch/arm/mach-uniphier/micro-support-card.c index f833306..4c34748 100644 --- a/arch/arm/mach-uniphier/support_card.c +++ b/arch/arm/mach-uniphier/micro-support-card.c @@ -9,10 +9,13 @@ #include <linux/io.h> #include <mach/micro-support-card.h>
-#define MICRO_SUPPORT_CARD_RESET \ - ((CONFIG_SUPPORT_CARD_BASE) + 0x000D0034) -#define MICRO_SUPPORT_CARD_REVISION \ - ((CONFIG_SUPPORT_CARD_BASE) + 0x000D00E0) +#define MICRO_SUPPORT_CARD_BASE 0x43f00000 +#define SMC911X_BASE ((MICRO_SUPPORT_CARD_BASE) + 0x00000) +#define LED_BASE ((MICRO_SUPPORT_CARD_BASE) + 0x90000) +#define NS16550A_BASE ((MICRO_SUPPORT_CARD_BASE) + 0xb0000) +#define MICRO_SUPPORT_CARD_RESET ((MICRO_SUPPORT_CARD_BASE) + 0xd0034) +#define MICRO_SUPPORT_CARD_REVISION ((MICRO_SUPPORT_CARD_BASE) + 0xd00E0) + /* * 0: reset deassert, 1: reset * @@ -60,7 +63,7 @@ void support_card_init(void)
int board_eth_init(bd_t *bis) { - return smc911x_initialize(0, CONFIG_SMC911X_BASE); + return smc911x_initialize(0, SMC911X_BASE); } #endif
@@ -224,5 +227,5 @@ void led_puts(const char *s) s++; }
- writel(~val, CONFIG_SUPPORT_CARD_LED_BASE); + writel(~val, LED_BASE); } diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h index a15838b..6405961 100644 --- a/include/configs/uniphier.h +++ b/include/configs/uniphier.h @@ -59,14 +59,6 @@ #define CONFIG_I2C_EEPROM #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10
-/* - * Support card address map - */ -#define CONFIG_SUPPORT_CARD_BASE 0x43f00000 -#define CONFIG_SUPPORT_CARD_ETHER_BASE (CONFIG_SUPPORT_CARD_BASE + 0x00000000) -#define CONFIG_SUPPORT_CARD_LED_BASE (CONFIG_SUPPORT_CARD_BASE + 0x00090000) -#define CONFIG_SUPPORT_CARD_UART_BASE (CONFIG_SUPPORT_CARD_BASE + 0x000b0000) - #ifdef CONFIG_SYS_NS16550_SERIAL #define CONFIG_SYS_NS16550 #define CONFIG_SYS_NS16550_COM1 CONFIG_SUPPORT_CARD_UART_BASE @@ -81,7 +73,8 @@
#define CONFIG_SMC911X
-#define CONFIG_SMC911X_BASE CONFIG_SUPPORT_CARD_ETHER_BASE +/* dummy: referenced by examples/standalone/smc911x_eeprom.c */ +#define CONFIG_SMC911X_BASE 0 #define CONFIG_SMC911X_32_BIT
/*-----------------------------------------------------------------------

Without this, build fails if CONFIG_MICRO_SUPPORT_CARD is disabled.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/spl.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/arch/arm/mach-uniphier/spl.c b/arch/arm/mach-uniphier/spl.c index f0df9b1..4c3cad3 100644 --- a/arch/arm/mach-uniphier/spl.c +++ b/arch/arm/mach-uniphier/spl.c @@ -13,6 +13,10 @@ void __weak bcu_init(void) { };
+void __weak sbc_init(void) +{ +}; + void __weak sg_init(void) { };

I want these prefixed with CONFIG_ARCH_UNIPHIER_ to clarify they belong to UniPhier SoC family.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Kconfig | 14 +++++++------- arch/arm/mach-uniphier/Makefile | 8 ++++---- arch/arm/mach-uniphier/include/mach/ddrphy-regs.h | 3 ++- arch/arm/mach-uniphier/include/mach/sc-regs.h | 2 +- arch/arm/mach-uniphier/ph1-pro4/pll_init.c | 2 -- configs/ph1_ld4_defconfig | 2 +- configs/ph1_sld3_defconfig | 2 +- configs/ph1_sld8_defconfig | 2 +- drivers/pinctrl/uniphier/Kconfig | 12 ++++++------ include/configs/uniphier.h | 17 +++++++++-------- 10 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/arch/arm/mach-uniphier/Kconfig b/arch/arm/mach-uniphier/Kconfig index 28d574f..d7a19c6 100644 --- a/arch/arm/mach-uniphier/Kconfig +++ b/arch/arm/mach-uniphier/Kconfig @@ -8,20 +8,20 @@ config UNIPHIER_SMP
choice prompt "UniPhier SoC select" - default MACH_PH1_PRO4 + default ARCH_UNIPHIER_PH1_PRO4
-config MACH_PH1_SLD3 +config ARCH_UNIPHIER_PH1_SLD3 bool "PH1-sLD3" select UNIPHIER_SMP
-config MACH_PH1_LD4 +config ARCH_UNIPHIER_PH1_LD4 bool "PH1-LD4"
-config MACH_PH1_PRO4 +config ARCH_UNIPHIER_PH1_PRO4 bool "PH1-Pro4" select UNIPHIER_SMP
-config MACH_PH1_SLD8 +config ARCH_UNIPHIER_PH1_SLD8 bool "PH1-sLD8"
endchoice @@ -53,11 +53,11 @@ choice
config DDR_FREQ_1600 bool "DDR3 1600" - depends on MACH_PH1_SLD3 || MACH_PH1_LD4 || MACH_PH1_PRO4 + depends on ARCH_UNIPHIER_PH1_SLD3 || ARCH_UNIPHIER_PH1_LD4 || ARCH_UNIPHIER_PH1_PRO4
config DDR_FREQ_1333 bool "DDR3 1333" - depends on MACH_PH1_SLD3 || MACH_PH1_LD4 || MACH_PH1_SLD8 + depends on ARCH_UNIPHIER_PH1_SLD3 || ARCH_UNIPHIER_PH1_LD4 || ARCH_UNIPHIER_PH1_SLD8
endchoice
diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index df6a569..d30cc27 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -31,7 +31,7 @@ obj-y += timer.o
obj-$(CONFIG_MICRO_SUPPORT_CARD) += micro-support-card.o
-obj-$(CONFIG_MACH_PH1_SLD3) += ph1-sld3/ -obj-$(CONFIG_MACH_PH1_LD4) += ph1-ld4/ -obj-$(CONFIG_MACH_PH1_PRO4) += ph1-pro4/ -obj-$(CONFIG_MACH_PH1_SLD8) += ph1-sld8/ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += ph1-sld3/ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += ph1-ld4/ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += ph1-pro4/ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += ph1-sld8/ diff --git a/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h b/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h index fce0c01..01f5c52 100644 --- a/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h +++ b/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h @@ -156,7 +156,8 @@ struct ddrphy { /* SoC-specific parameters */ #define NR_DATX8_PER_DDRPHY 2
-#if defined(CONFIG_MACH_PH1_LD4) || defined(CONFIG_MACH_PH1_SLD8) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) #define NR_DDRPHY_PER_CH 1 #else #define NR_DDRPHY_PER_CH 2 diff --git a/arch/arm/mach-uniphier/include/mach/sc-regs.h b/arch/arm/mach-uniphier/include/mach/sc-regs.h index df50294..9d697b1 100644 --- a/arch/arm/mach-uniphier/include/mach/sc-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sc-regs.h @@ -9,7 +9,7 @@ #ifndef ARCH_SC_REGS_H #define ARCH_SC_REGS_H
-#if defined(CONFIG_MACH_PH1_SLD3) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) #define SC_BASE_ADDR 0xf1840000 #else #define SC_BASE_ADDR 0x61840000 diff --git a/arch/arm/mach-uniphier/ph1-pro4/pll_init.c b/arch/arm/mach-uniphier/ph1-pro4/pll_init.c index d693368..8ae8ed6 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/pll_init.c +++ b/arch/arm/mach-uniphier/ph1-pro4/pll_init.c @@ -54,12 +54,10 @@ static void vpll_init(void) tmp = readl(SG_PINMON0); clk_mode_axosel = tmp & SG_PINMON0_CLK_MODE_AXOSEL_MASK;
-#if defined(CONFIG_MACH_PH1_PRO4) /* 25MHz or 6.25MHz is default for Pro4R, no need to set VPLLA/B */ if (clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_25000KHZ || clk_mode_axosel == SG_PINMON0_CLK_MODE_AXOSEL_6250KHZ) return; -#endif
/* Disable write protect of VPLL27ACTRL[2-7]*, VPLL27BCTRL[2-8] */ tmp = readl(SC_VPLL27ACTRL); diff --git a/configs/ph1_ld4_defconfig b/configs/ph1_ld4_defconfig index 899a723..e1665c0 100644 --- a/configs/ph1_ld4_defconfig +++ b/configs/ph1_ld4_defconfig @@ -1,7 +1,7 @@ CONFIG_ARM=y CONFIG_ARCH_UNIPHIER=y CONFIG_SYS_MALLOC_F_LEN=0x2000 -CONFIG_MACH_PH1_LD4=y +CONFIG_ARCH_UNIPHIER_PH1_LD4=y CONFIG_MICRO_SUPPORT_CARD=y CONFIG_SYS_TEXT_BASE=0x84000000 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-ld4-ref" diff --git a/configs/ph1_sld3_defconfig b/configs/ph1_sld3_defconfig index 79ce0e2..4b871d0 100644 --- a/configs/ph1_sld3_defconfig +++ b/configs/ph1_sld3_defconfig @@ -1,6 +1,6 @@ CONFIG_ARM=y CONFIG_ARCH_UNIPHIER=y -CONFIG_MACH_PH1_SLD3=y +CONFIG_ARCH_UNIPHIER_PH1_SLD3=y CONFIG_MICRO_SUPPORT_CARD=y CONFIG_SYS_TEXT_BASE=0x84000000 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-sld3-ref" diff --git a/configs/ph1_sld8_defconfig b/configs/ph1_sld8_defconfig index 216d49b..00917fb 100644 --- a/configs/ph1_sld8_defconfig +++ b/configs/ph1_sld8_defconfig @@ -1,7 +1,7 @@ CONFIG_ARM=y CONFIG_ARCH_UNIPHIER=y CONFIG_SYS_MALLOC_F_LEN=0x2000 -CONFIG_MACH_PH1_SLD8=y +CONFIG_ARCH_UNIPHIER_PH1_SLD8=y CONFIG_MICRO_SUPPORT_CARD=y CONFIG_SYS_TEXT_BASE=0x84000000 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-sld8-ref" diff --git a/drivers/pinctrl/uniphier/Kconfig b/drivers/pinctrl/uniphier/Kconfig index 757edce..2ff616e 100644 --- a/drivers/pinctrl/uniphier/Kconfig +++ b/drivers/pinctrl/uniphier/Kconfig @@ -5,37 +5,37 @@ config PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PH1_LD4 bool "UniPhier PH1-LD4 SoC pinctrl driver" - depends on MACH_PH1_LD4 + depends on ARCH_UNIPHIER_PH1_LD4 default y select PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PH1_PRO4 bool "UniPhier PH1-Pro4 SoC pinctrl driver" - depends on MACH_PH1_PRO4 + depends on ARCH_UNIPHIER_PH1_PRO4 default y select PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PH1_SLD8 bool "UniPhier PH1-sLD8 SoC pinctrl driver" - depends on MACH_PH1_SLD8 + depends on ARCH_UNIPHIER_PH1_SLD8 default y select PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PH1_PRO5 bool "UniPhier PH1-Pro5 SoC pinctrl driver" - depends on MACH_PH1_PRO5 + depends on ARCH_UNIPHIER_PH1_PRO5 default y select PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PROXSTREAM2 bool "UniPhier ProXstream2 SoC pinctrl driver" - depends on MACH_PROXSTREAM2 + depends on ARCH_UNIPHIER_PROXSTREAM2 default y select PINCTRL_UNIPHIER_CORE
config PINCTRL_UNIPHIER_PH1_LD6B bool "UniPhier PH1-LD6b SoC pinctrl driver" - depends on MACH_PH1_LD6B + depends on ARCH_UNIPHIER_PH1_LD6B default y select PINCTRL_UNIPHIER_CORE
diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h index 6405961..bd0769e 100644 --- a/include/configs/uniphier.h +++ b/include/configs/uniphier.h @@ -9,7 +9,7 @@ #ifndef __CONFIG_UNIPHIER_COMMON_H__ #define __CONFIG_UNIPHIER_COMMON_H__
-#if defined(CONFIG_MACH_PH1_SLD3) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) #define CONFIG_DDR_NUM_CH0 2 #define CONFIG_DDR_NUM_CH1 1 #define CONFIG_DDR_NUM_CH2 1 @@ -23,7 +23,7 @@ #define CONFIG_SDRAM2_SIZE 0x10000000 #endif
-#if defined(CONFIG_MACH_PH1_LD4) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) #define CONFIG_DDR_NUM_CH0 1 #define CONFIG_DDR_NUM_CH1 1
@@ -34,7 +34,7 @@ #define CONFIG_SDRAM1_SIZE 0x10000000 #endif
-#if defined(CONFIG_MACH_PH1_PRO4) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) #define CONFIG_DDR_NUM_CH0 2 #define CONFIG_DDR_NUM_CH1 2
@@ -45,7 +45,7 @@ #define CONFIG_SDRAM1_SIZE 0x20000000 #endif
-#if defined(CONFIG_MACH_PH1_SLD8) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) #define CONFIG_DDR_NUM_CH0 1 #define CONFIG_DDR_NUM_CH1 1
@@ -175,7 +175,7 @@
#define CONFIG_NAND_DENALI_ECC_SIZE 1024
-#ifdef CONFIG_MACH_PH1_SLD3 +#ifdef CONFIG_ARCH_UNIPHIER_PH1_SLD3 #define CONFIG_SYS_NAND_REGS_BASE 0xf8100000 #define CONFIG_SYS_NAND_DATA_BASE 0xf8000000 #else @@ -291,11 +291,12 @@ #define CONFIG_SYS_SDRAM_BASE 0x80000000 #define CONFIG_NR_DRAM_BANKS 2
-#if defined(CONFIG_MACH_PH1_SLD3) || defined(CONFIG_MACH_PH1_LD4) || \ - defined(CONFIG_MACH_PH1_SLD8) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) #define CONFIG_SPL_TEXT_BASE 0x00040000 #endif -#if defined(CONFIG_MACH_PH1_PRO4) +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) #define CONFIG_SPL_TEXT_BASE 0x00100000 #endif

The UART I/O ports for PH1-Pro4 has no input enable controlling. This code is useless.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S | 5 ----- 1 file changed, 5 deletions(-)
diff --git a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S index 19bef2a..ce5dd4b 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S +++ b/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S @@ -30,10 +30,5 @@ ENTRY(setup_lowlevel_debug) mov r1, #1 str r1, [r0]
- ldr r0, =SG_IECTRL - ldr r1, [r0] - orr r1, r1, #1 - str r1, [r0] - mov pc, lr ENDPROC(setup_lowlevel_debug)

Currently, IECTRL is enabled after pin-mux settings for the low-level debugging for PH1-LD4 and PH1-sLD8. While IECTRL is disabled, input signals are pulled-down, i.e. glitch signal (Low to High transition) problem occurs if pin-mux is set up first. As a result, one invalid character is input to the UART block and the auto-boot counting is terminated immediately.
The correct initialization procedure is: [1] Enable IECTRL (if IECTRL exists for the pins) [2] Set up pin-muxing [3] Deassert the reset of the hardware block
Currently, the low-level debugging is working for PH1-sLD3 and PH1-Pro4, but just in case, follow the sequence for all the SoCs.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S | 10 +++++----- arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S | 14 +++++++------- arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S | 6 +++--- arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S index fd393dc..c0f14e0 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S +++ b/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S @@ -14,16 +14,16 @@ #include <mach/debug-uart.S>
ENTRY(setup_lowlevel_debug) - init_debug_uart r0, r1, r2 + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0]
/* UART Port 0 */ sg_set_pinsel 85, 1, 8, 4, r0, r1 sg_set_pinsel 88, 1, 8, 4, r0, r1
- ldr r0, =SG_IECTRL - ldr r1, [r0] - orr r1, r1, #1 - str r1, [r0] + init_debug_uart r0, r1, r2
mov pc, lr ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S index ce5dd4b..56f3851 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S +++ b/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S @@ -15,13 +15,6 @@ #include <mach/debug-uart.S>
ENTRY(setup_lowlevel_debug) - ldr r0, =SC_CLKCTRL - ldr r1, [r0] - orr r1, r1, #SC_CLKCTRL_CEN_PERI - str r1, [r0] - - init_debug_uart r0, r1, r2 - /* UART Port 0 */ sg_set_pinsel 127, 0, 4, 8, r0, r1 sg_set_pinsel 128, 0, 4, 8, r0, r1 @@ -30,5 +23,12 @@ ENTRY(setup_lowlevel_debug) mov r1, #1 str r1, [r0]
+ ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + init_debug_uart r0, r1, r2 + mov pc, lr ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S index ee2eae6..f4eccb4 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S +++ b/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S @@ -15,6 +15,9 @@ #include <mach/debug-uart.S>
ENTRY(setup_lowlevel_debug) + sg_set_pinsel 63, 0, 4, 4, r0, r1 + sg_set_pinsel 64, 1, 4, 4, r0, r1 + ldr r0, =BCSCR5 ldr r1, =0x24440000 str r1, [r0] @@ -26,8 +29,5 @@ ENTRY(setup_lowlevel_debug)
init_debug_uart r0, r1, r2
- sg_set_pinsel 63, 0, 4, 4, r0, r1 - sg_set_pinsel 64, 1, 4, 4, r0, r1 - mov pc, lr ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S index 3ada4c9..571ce60 100644 --- a/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S +++ b/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S @@ -14,16 +14,16 @@ #include <mach/debug-uart.S>
ENTRY(setup_lowlevel_debug) - init_debug_uart r0, r1, r2 + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0]
/* UART Port 0 */ sg_set_pinsel 70, 3, 8, 4, r0, r1 sg_set_pinsel 71, 3, 8, 4, r0, r1
- ldr r0, =SG_IECTRL - ldr r1, [r0] - orr r1, r1, #1 - str r1, [r0] + init_debug_uart r0, r1, r2
mov pc, lr ENDPROC(setup_lowlevel_debug)

Move init code of low-level debug into a single file. This is helpful to create an image that runs on multiple SoCs.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Makefile | 2 + arch/arm/mach-uniphier/debug_ll.S | 112 +++++++++++++++++++++++ arch/arm/mach-uniphier/include/mach/debug-uart.S | 23 ----- arch/arm/mach-uniphier/lowlevel_init.S | 2 +- arch/arm/mach-uniphier/ph1-ld4/Makefile | 1 - arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S | 29 ------ arch/arm/mach-uniphier/ph1-pro4/Makefile | 1 - arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S | 34 ------- arch/arm/mach-uniphier/ph1-sld3/Makefile | 1 - arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S | 33 ------- arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S | 29 ------ 11 files changed, 115 insertions(+), 152 deletions(-) create mode 100644 arch/arm/mach-uniphier/debug_ll.S delete mode 100644 arch/arm/mach-uniphier/include/mach/debug-uart.S delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S
diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index d30cc27..5c2ccbd 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -10,6 +10,8 @@ obj-y += spl.o obj-y += memconf.o obj-y += ddrphy_training.o
+obj-$(CONFIG_DEBUG_LL) += debug_ll.o + else
obj-y += late_lowlevel_init.o diff --git a/arch/arm/mach-uniphier/debug_ll.S b/arch/arm/mach-uniphier/debug_ll.S new file mode 100644 index 0000000..d5ccad3 --- /dev/null +++ b/arch/arm/mach-uniphier/debug_ll.S @@ -0,0 +1,112 @@ +/* + * On-chip UART initializaion for low-level debugging + * + * Copyright (C) 2014-2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/serial_reg.h> +#include <linux/linkage.h> +#include <mach/bcu-regs.h> +#include <mach/sc-regs.h> +#include <mach/sg-regs.h> + +#if !defined(CONFIG_DEBUG_SEMIHOSTING) +#include CONFIG_DEBUG_LL_INCLUDE +#endif + +#define BAUDRATE 115200 +#define DIV_ROUND(x, d) (((x) + ((d) / 2)) / (d)) + +ENTRY(debug_ll_init) + ldr r0, =SG_REVISION + ldr r1, [r0] + and r1, r1, #SG_REVISION_TYPE_MASK + mov r1, r1, lsr #SG_REVISION_TYPE_SHIFT + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) +#define PH1_SLD3_UART_CLK 36864000 + cmp r1, #0x25 + bne ph1_sld3_end + + sg_set_pinsel 64, 1, 4, 4, r0, r1 @ TXD0 -> TXD0 + + ldr r0, =BCSCR5 + ldr r1, =0x24440000 + str r1, [r0] + + ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + ldr r3, =DIV_ROUND(PH1_SLD3_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_sld3_end: +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) +#define PH1_LD4_UART_CLK 36864000 + cmp r1, #0x26 + bne ph1_ld4_end + + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0] + + sg_set_pinsel 88, 1, 8, 4, r0, r1 @ HSDOUT6 -> TXD0 + + ldr r3, =DIV_ROUND(PH1_LD4_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_ld4_end: +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) +#define PH1_PRO4_UART_CLK 73728000 + cmp r1, #0x28 + bne ph1_pro4_end + + sg_set_pinsel 128, 0, 4, 8, r0, r1 @ TXD0 -> TXD0 + + ldr r0, =SG_LOADPINCTRL + mov r1, #1 + str r1, [r0] + + ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + ldr r3, =DIV_ROUND(PH1_PRO4_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_pro4_end: +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) +#define PH1_SLD8_UART_CLK 80000000 + cmp r1, #0x29 + bne ph1_sld8_end + + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0] + + sg_set_pinsel 70, 3, 8, 4, r0, r1 @ HSDOUT0 -> TXD0 + + ldr r3, =DIV_ROUND(PH1_SLD8_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_sld8_end: +#endif + +init_uart: + addruart r0, r1, r2 + mov r1, #UART_LCR_WLEN8 << 8 + str r1, [r0, #0x10] + str r3, [r0, #0x24] + + mov pc, lr +ENDPROC(debug_ll_init) diff --git a/arch/arm/mach-uniphier/include/mach/debug-uart.S b/arch/arm/mach-uniphier/include/mach/debug-uart.S deleted file mode 100644 index d2b431f..0000000 --- a/arch/arm/mach-uniphier/include/mach/debug-uart.S +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2014-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <linux/serial_reg.h> - -#if !defined(CONFIG_DEBUG_SEMIHOSTING) -#include CONFIG_DEBUG_LL_INCLUDE -#endif - -#define BAUDRATE 115200 -#define DIV_ROUND(x, d) (((x) + ((d) / 2)) / (d)) -#define DIVISOR DIV_ROUND(UART_CLK, 16 * BAUDRATE) - - .macro init_debug_uart, ra, rb, rc - addruart \ra, \rb, \rc - mov \rb, #UART_LCR_WLEN8 << 8 - str \rb, [\ra, #0x10] - ldr \rb, =DIVISOR - str \rb, [\ra, #0x24] - .endm diff --git a/arch/arm/mach-uniphier/lowlevel_init.S b/arch/arm/mach-uniphier/lowlevel_init.S index 9259baf..66cad42 100644 --- a/arch/arm/mach-uniphier/lowlevel_init.S +++ b/arch/arm/mach-uniphier/lowlevel_init.S @@ -27,7 +27,7 @@ ENTRY(lowlevel_init) mcr p15, 0, r0, c1, c0, 0
#ifdef CONFIG_DEBUG_LL - bl setup_lowlevel_debug + bl debug_ll_init #endif
/* diff --git a/arch/arm/mach-uniphier/ph1-ld4/Makefile b/arch/arm/mach-uniphier/ph1-ld4/Makefile index 4a2c944..4b9fe91 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/Makefile +++ b/arch/arm/mach-uniphier/ph1-ld4/Makefile @@ -3,7 +3,6 @@ #
ifdef CONFIG_SPL_BUILD -obj-$(CONFIG_DEBUG_LL) += lowlevel_debug.o obj-y += bcu_init.o pll_init.o early_clkrst_init.o \ pll_spectrum.o umc_init.o ddrphy_init.o obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S deleted file mode 100644 index c0f14e0..0000000 --- a/arch/arm/mach-uniphier/ph1-ld4/lowlevel_debug.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - * On-chip UART initializaion for low-level debugging - * - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <linux/linkage.h> -#include <mach/sg-regs.h> - -#define UART_CLK 36864000 -#include <mach/debug-uart.S> - -ENTRY(setup_lowlevel_debug) - ldr r0, =SG_IECTRL - ldr r1, [r0] - orr r1, r1, #1 - str r1, [r0] - - /* UART Port 0 */ - sg_set_pinsel 85, 1, 8, 4, r0, r1 - sg_set_pinsel 88, 1, 8, 4, r0, r1 - - init_debug_uart r0, r1, r2 - - mov pc, lr -ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-pro4/Makefile b/arch/arm/mach-uniphier/ph1-pro4/Makefile index a52b5aa..e8b2c9e 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/Makefile +++ b/arch/arm/mach-uniphier/ph1-pro4/Makefile @@ -3,7 +3,6 @@ #
ifdef CONFIG_SPL_BUILD -obj-$(CONFIG_DEBUG_LL) += lowlevel_debug.o obj-y += pll_init.o early_clkrst_init.o \ pll_spectrum.o umc_init.o ddrphy_init.o obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o diff --git a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S deleted file mode 100644 index 56f3851..0000000 --- a/arch/arm/mach-uniphier/ph1-pro4/lowlevel_debug.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * On-chip UART initializaion for low-level debugging - * - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <linux/linkage.h> -#include <mach/sc-regs.h> -#include <mach/sg-regs.h> - -#define UART_CLK 73728000 -#include <mach/debug-uart.S> - -ENTRY(setup_lowlevel_debug) - /* UART Port 0 */ - sg_set_pinsel 127, 0, 4, 8, r0, r1 - sg_set_pinsel 128, 0, 4, 8, r0, r1 - - ldr r0, =SG_LOADPINCTRL - mov r1, #1 - str r1, [r0] - - ldr r0, =SC_CLKCTRL - ldr r1, [r0] - orr r1, r1, #SC_CLKCTRL_CEN_PERI - str r1, [r0] - - init_debug_uart r0, r1, r2 - - mov pc, lr -ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-sld3/Makefile b/arch/arm/mach-uniphier/ph1-sld3/Makefile index e3cb39f..48a3756 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/Makefile +++ b/arch/arm/mach-uniphier/ph1-sld3/Makefile @@ -3,7 +3,6 @@ #
ifdef CONFIG_SPL_BUILD -obj-$(CONFIG_DEBUG_LL) += lowlevel_debug.o obj-y += bcu_init.o memconf.o sg_init.o pll_init.o early_clkrst_init.o \ early_pinctrl.o pll_spectrum.o umc_init.o obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o diff --git a/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S deleted file mode 100644 index f4eccb4..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/lowlevel_debug.S +++ /dev/null @@ -1,33 +0,0 @@ -/* - * On-chip UART initializaion for low-level debugging - * - * Copyright (C) 2014-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <linux/linkage.h> -#include <mach/bcu-regs.h> -#include <mach/sc-regs.h> -#include <mach/sg-regs.h> - -#define UART_CLK 36864000 -#include <mach/debug-uart.S> - -ENTRY(setup_lowlevel_debug) - sg_set_pinsel 63, 0, 4, 4, r0, r1 - sg_set_pinsel 64, 1, 4, 4, r0, r1 - - ldr r0, =BCSCR5 - ldr r1, =0x24440000 - str r1, [r0] - - ldr r0, =SC_CLKCTRL - ldr r1, [r0] - orr r1, r1, #SC_CLKCTRL_CEN_PERI - str r1, [r0] - - init_debug_uart r0, r1, r2 - - mov pc, lr -ENDPROC(setup_lowlevel_debug) diff --git a/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S b/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S deleted file mode 100644 index 571ce60..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/lowlevel_debug.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - * On-chip UART initializaion for low-level debugging - * - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <linux/linkage.h> -#include <mach/sg-regs.h> - -#define UART_CLK 80000000 -#include <mach/debug-uart.S> - -ENTRY(setup_lowlevel_debug) - ldr r0, =SG_IECTRL - ldr r1, [r0] - orr r1, r1, #1 - str r1, [r0] - - /* UART Port 0 */ - sg_set_pinsel 70, 3, 8, 4, r0, r1 - sg_set_pinsel 71, 3, 8, 4, r0, r1 - - init_debug_uart r0, r1, r2 - - mov pc, lr -ENDPROC(setup_lowlevel_debug)

Currently, console=ttyS0 is hard-coded in CONFIG_EXTRA_ENV_SETTINGS and it replaces the bootargs in the chosen node of the device tree passed to the kernel. This is not preferable because I am going to add some boards whose console is not ttyS0.
Drop bootargs settings from U-Boot's environment and use the one in device tree by default.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
include/configs/uniphier.h | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h index bd0769e..f44c58b 100644 --- a/include/configs/uniphier.h +++ b/include/configs/uniphier.h @@ -224,22 +224,17 @@ "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off;" \ "tftpboot; bootm;"
-#define CONFIG_BOOTARGS " earlyprintk loglevel=8" - #ifdef CONFIG_FIT #define CONFIG_BOOTFILE "fitImage" #define LINUXBOOT_ENV_SETTINGS \ "fit_addr=0x00100000\0" \ "fit_addr_r=0x84100000\0" \ "fit_size=0x00f00000\0" \ - "norboot=run add_default_bootargs &&" \ - "setexpr fit_addr $nor_base + $fit_addr &&" \ + "norboot=setexpr fit_addr $nor_base + $fit_addr &&" \ "bootm $fit_addr\0" \ - "nandboot=run add_default_bootargs &&" \ - "nand read $fit_addr_r $fit_addr $fit_size &&" \ + "nandboot=nand read $fit_addr_r $fit_addr $fit_size &&" \ "bootm $fit_addr_r\0" \ - "tftpboot=run add_default_bootargs &&" \ - "tftpboot $fit_addr_r $bootfile &&" \ + "tftpboot=tftpboot $fit_addr_r $bootfile &&" \ "bootm $fit_addr_r\0" #else #define CONFIG_BOOTFILE "uImage" @@ -255,18 +250,15 @@ "ramdisk_addr_r=0x84a00000\0" \ "ramdisk_size=0x00600000\0" \ "ramdisk_file=rootfs.cpio.uboot\0" \ - "norboot=run add_default_bootargs &&" \ - "setexpr kernel_addr $nor_base + $kernel_addr &&" \ + "norboot=setexpr kernel_addr $nor_base + $kernel_addr &&" \ "setexpr ramdisk_addr $nor_base + $ramdisk_addr &&" \ "setexpr fdt_addr $nor_base + $fdt_addr &&" \ "bootm $kernel_addr $ramdisk_addr $fdt_addr\0" \ - "nandboot=run add_default_bootargs &&" \ - "nand read $kernel_addr_r $kernel_addr $kernel_size &&" \ + "nandboot=nand read $kernel_addr_r $kernel_addr $kernel_size &&" \ "nand read $ramdisk_addr_r $ramdisk_addr $ramdisk_size &&" \ "nand read $fdt_addr_r $fdt_addr $fdt_size &&" \ "bootm $kernel_addr_r $ramdisk_addr_r $fdt_addr_r\0" \ - "tftpboot=run add_default_bootargs &&" \ - "tftpboot $kernel_addr_r $bootfile &&" \ + "tftpboot=tftpboot $kernel_addr_r $bootfile &&" \ "tftpboot $ramdisk_addr_r $ramdisk_file &&" \ "tftpboot $fdt_addr_r $fdt_file &&" \ "bootm $kernel_addr_r $ramdisk_addr_r $fdt_addr_r\0" @@ -281,8 +273,6 @@ "nand write $loadaddr 0 0x00010000 &&" \ "tftpboot u-boot-dtb.img &&" \ "nand write $loadaddr 0x00010000 0x000f0000\0" \ - "add_default_bootargs=setenv bootargs $bootargs" \ - " console=ttyS0,$baudrate\0" \ LINUXBOOT_ENV_SETTINGS
/* Open Firmware flat tree */

Before this commit, the Kconfig menu in mach-uniphier only allowed us to choose one SoC to be compiled. Each SoC has its own defconfig file for the build-test coverage. Consequently, some defconfig files are duplicated with only the difference in CONFIG_DEFAULT_DEVICE_TREE and CONFIG_{SOC_NAME}=y.
Now, most of board-specific parameters have been moved to device trees, so it makes sense to include init code of multiple SoCs into a single image as long as the SoCs have similar architecture. In fact, some SoCs of UniPhier family are very similar: - PH1-LD4 and PH1-sLD8 - PH1-LD6b and ProXstream2 (will be added in the upcoming commit)
This commit will be helpful to merge some defconfig files for better maintainability.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/Kconfig | 45 ++++----- arch/arm/mach-uniphier/Makefile | 16 ++-- arch/arm/mach-uniphier/bcu/Makefile | 3 + .../{ph1-ld4/bcu_init.c => bcu/bcu-ph1-ld4.c} | 8 +- .../{ph1-sld3/bcu_init.c => bcu/bcu-ph1-sld3.c} | 8 +- arch/arm/mach-uniphier/board_early_init_f.c | 42 +++++++-- arch/arm/mach-uniphier/boards.c | 93 ++++++++++++++++++ arch/arm/mach-uniphier/boot-mode/Makefile | 6 ++ .../boot-mode.c => boot-mode/boot-mode-ph1-ld4.c} | 21 +++-- .../boot-mode.c => boot-mode/boot-mode-ph1-sld3.c} | 23 +++-- arch/arm/mach-uniphier/boot-mode/boot-mode.c | 35 +++++++ arch/arm/mach-uniphier/clk/Makefile | 4 + .../{ph1-ld4/clkrst_init.c => clk/clk-ph1-ld4.c} | 3 +- .../{ph1-pro4/clkrst_init.c => clk/clk-ph1-pro4.c} | 3 +- arch/arm/mach-uniphier/cmd_pinmon.c | 31 +++--- arch/arm/mach-uniphier/ddrphy/Makefile | 3 + .../ddrphy_init.c => ddrphy/ddrphy-ph1-ld4.c} | 4 +- .../ddrphy_init.c => ddrphy/ddrphy-ph1-pro4.c} | 4 +- .../ddrphy_init.c => ddrphy/ddrphy-ph1-sld8.c} | 4 +- .../ddrphy-training.c} | 0 arch/arm/mach-uniphier/early-clk/Makefile | 4 + .../early-clk-ph1-ld4.c} | 5 +- arch/arm/mach-uniphier/early-pinctrl/Makefile | 1 + .../early-pinctrl-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/include/mach/boot-device.h | 11 ++- arch/arm/mach-uniphier/include/mach/ddrphy-regs.h | 4 +- arch/arm/mach-uniphier/include/mach/init.h | 83 ++++++++++++++++ arch/arm/mach-uniphier/include/mach/sg-regs.h | 6 ++ arch/arm/mach-uniphier/include/mach/soc_info.h | 63 +++++++++++++ arch/arm/mach-uniphier/init/Makefile | 6 ++ .../mach-uniphier/{spl.c => init/init-ph1-ld4.c} | 49 +++------- arch/arm/mach-uniphier/init/init-ph1-pro4.c | 58 ++++++++++++ arch/arm/mach-uniphier/init/init-ph1-sld3.c | 53 +++++++++++ arch/arm/mach-uniphier/init/init-ph1-sld8.c | 60 ++++++++++++ arch/arm/mach-uniphier/init/init.c | 46 +++++++++ arch/arm/mach-uniphier/memconf.c | 103 -------------------- arch/arm/mach-uniphier/memconf/Makefile | 2 + arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c | 59 ++++++++++++ arch/arm/mach-uniphier/memconf/memconf.c | 104 +++++++++++++++++++++ arch/arm/mach-uniphier/ph1-ld4/Makefile | 13 --- arch/arm/mach-uniphier/ph1-ld4/boot-mode.c | 1 - arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c | 1 - arch/arm/mach-uniphier/ph1-pro4/Makefile | 13 --- arch/arm/mach-uniphier/ph1-sld3/Makefile | 13 --- arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c | 1 - .../arm/mach-uniphier/ph1-sld3/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-sld3/memconf.c | 52 ----------- arch/arm/mach-uniphier/ph1-sld3/sg_init.c | 9 -- arch/arm/mach-uniphier/ph1-sld3/umc_init.c | 15 --- arch/arm/mach-uniphier/ph1-sld8/Makefile | 1 - arch/arm/mach-uniphier/ph1-sld8/bcu_init.c | 1 - arch/arm/mach-uniphier/ph1-sld8/boot-mode.c | 1 - arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c | 1 - .../arm/mach-uniphier/ph1-sld8/early_clkrst_init.c | 1 - arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c | 1 - arch/arm/mach-uniphier/ph1-sld8/sbc_init.c | 1 - arch/arm/mach-uniphier/pinctrl/Makefile | 4 + .../pinctrl.c => pinctrl/pinctrl-ph1-ld4.c} | 3 +- .../pinctrl.c => pinctrl/pinctrl-ph1-pro4.c} | 3 +- .../pinctrl.c => pinctrl/pinctrl-ph1-sld3.c} | 3 +- .../pinctrl.c => pinctrl/pinctrl-ph1-sld8.c} | 3 +- arch/arm/mach-uniphier/pll/Makefile | 8 ++ .../{ph1-ld4/pll_init.c => pll/pll-init-ph1-ld4.c} | 34 +++++-- .../pll_init.c => pll/pll-init-ph1-pro4.c} | 34 +++++-- .../pll_init.c => pll/pll-init-ph1-sld3.c} | 5 +- .../pll_init.c => pll/pll-init-ph1-sld8.c} | 5 +- .../pll_spectrum.c => pll/pll-spectrum-ph1-ld4.c} | 6 +- .../pll_spectrum.c => pll/pll-spectrum-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/sbc/Makefile | 4 + .../{ph1-ld4/sbc_init.c => sbc/sbc-ph1-ld4.c} | 5 +- .../{ph1-pro4/sbc_init.c => sbc/sbc-ph1-pro4.c} | 5 +- .../{ph1-sld3/sbc_init.c => sbc/sbc-ph1-sld3.c} | 5 +- arch/arm/mach-uniphier/soc_info.c | 61 ++++++++++++ arch/arm/mach-uniphier/umc/Makefile | 3 + .../{ph1-ld4/umc_init.c => umc/umc-ph1-ld4.c} | 30 +++--- .../{ph1-pro4/umc_init.c => umc/umc-ph1-pro4.c} | 36 +++---- .../{ph1-sld8/umc_init.c => umc/umc-ph1-sld8.c} | 30 +++--- configs/ph1_pro4_defconfig | 1 + include/configs/uniphier.h | 50 +--------- 80 files changed, 1070 insertions(+), 478 deletions(-) create mode 100644 arch/arm/mach-uniphier/bcu/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/bcu_init.c => bcu/bcu-ph1-ld4.c} (84%) rename arch/arm/mach-uniphier/{ph1-sld3/bcu_init.c => bcu/bcu-ph1-sld3.c} (84%) create mode 100644 arch/arm/mach-uniphier/boards.c create mode 100644 arch/arm/mach-uniphier/boot-mode/Makefile rename arch/arm/mach-uniphier/{ph1-pro4/boot-mode.c => boot-mode/boot-mode-ph1-ld4.c} (88%) rename arch/arm/mach-uniphier/{ph1-sld3/boot-mode.c => boot-mode/boot-mode-ph1-sld3.c} (89%) create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode.c create mode 100644 arch/arm/mach-uniphier/clk/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/clkrst_init.c => clk/clk-ph1-ld4.c} (94%) rename arch/arm/mach-uniphier/{ph1-pro4/clkrst_init.c => clk/clk-ph1-pro4.c} (96%) create mode 100644 arch/arm/mach-uniphier/ddrphy/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/ddrphy_init.c => ddrphy/ddrphy-ph1-ld4.c} (95%) rename arch/arm/mach-uniphier/{ph1-pro4/ddrphy_init.c => ddrphy/ddrphy-ph1-pro4.c} (95%) rename arch/arm/mach-uniphier/{ph1-sld8/ddrphy_init.c => ddrphy/ddrphy-ph1-sld8.c} (95%) rename arch/arm/mach-uniphier/{ddrphy_training.c => ddrphy/ddrphy-training.c} (100%) create mode 100644 arch/arm/mach-uniphier/early-clk/Makefile rename arch/arm/mach-uniphier/{ph1-pro4/early_clkrst_init.c => early-clk/early-clk-ph1-ld4.c} (86%) create mode 100644 arch/arm/mach-uniphier/early-pinctrl/Makefile rename arch/arm/mach-uniphier/{ph1-sld3/early_pinctrl.c => early-pinctrl/early-pinctrl-ph1-sld3.c} (82%) create mode 100644 arch/arm/mach-uniphier/include/mach/init.h create mode 100644 arch/arm/mach-uniphier/include/mach/soc_info.h create mode 100644 arch/arm/mach-uniphier/init/Makefile rename arch/arm/mach-uniphier/{spl.c => init/init-ph1-ld4.c} (50%) create mode 100644 arch/arm/mach-uniphier/init/init-ph1-pro4.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-sld3.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-sld8.c create mode 100644 arch/arm/mach-uniphier/init/init.c delete mode 100644 arch/arm/mach-uniphier/memconf.c create mode 100644 arch/arm/mach-uniphier/memconf/Makefile create mode 100644 arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c create mode 100644 arch/arm/mach-uniphier/memconf/memconf.c delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/boot-mode.c delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c delete mode 100644 arch/arm/mach-uniphier/ph1-pro4/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/memconf.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/sg_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld3/umc_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/Makefile delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/bcu_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/boot-mode.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/early_clkrst_init.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c delete mode 100644 arch/arm/mach-uniphier/ph1-sld8/sbc_init.c create mode 100644 arch/arm/mach-uniphier/pinctrl/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/pinctrl.c => pinctrl/pinctrl-ph1-ld4.c} (97%) rename arch/arm/mach-uniphier/{ph1-pro4/pinctrl.c => pinctrl/pinctrl-ph1-pro4.c} (97%) rename arch/arm/mach-uniphier/{ph1-sld3/pinctrl.c => pinctrl/pinctrl-ph1-sld3.c} (91%) rename arch/arm/mach-uniphier/{ph1-sld8/pinctrl.c => pinctrl/pinctrl-ph1-sld8.c} (96%) create mode 100644 arch/arm/mach-uniphier/pll/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/pll_init.c => pll/pll-init-ph1-ld4.c} (90%) rename arch/arm/mach-uniphier/{ph1-pro4/pll_init.c => pll/pll-init-ph1-pro4.c} (88%) rename arch/arm/mach-uniphier/{ph1-sld3/pll_init.c => pll/pll-init-ph1-sld3.c} (62%) rename arch/arm/mach-uniphier/{ph1-sld8/pll_init.c => pll/pll-init-ph1-sld8.c} (97%) rename arch/arm/mach-uniphier/{ph1-pro4/pll_spectrum.c => pll/pll-spectrum-ph1-ld4.c} (72%) rename arch/arm/mach-uniphier/{ph1-sld3/pll_spectrum.c => pll/pll-spectrum-ph1-sld3.c} (73%) create mode 100644 arch/arm/mach-uniphier/sbc/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/sbc_init.c => sbc/sbc-ph1-ld4.c} (92%) rename arch/arm/mach-uniphier/{ph1-pro4/sbc_init.c => sbc/sbc-ph1-pro4.c} (91%) rename arch/arm/mach-uniphier/{ph1-sld3/sbc_init.c => sbc/sbc-ph1-sld3.c} (92%) create mode 100644 arch/arm/mach-uniphier/soc_info.c create mode 100644 arch/arm/mach-uniphier/umc/Makefile rename arch/arm/mach-uniphier/{ph1-ld4/umc_init.c => umc/umc-ph1-ld4.c} (88%) rename arch/arm/mach-uniphier/{ph1-pro4/umc_init.c => umc/umc-ph1-pro4.c} (85%) rename arch/arm/mach-uniphier/{ph1-sld8/umc_init.c => umc/umc-ph1-sld8.c} (87%)
diff --git a/arch/arm/mach-uniphier/Kconfig b/arch/arm/mach-uniphier/Kconfig index d7a19c6..2cc5dac 100644 --- a/arch/arm/mach-uniphier/Kconfig +++ b/arch/arm/mach-uniphier/Kconfig @@ -6,25 +6,32 @@ config SYS_CONFIG_NAME config UNIPHIER_SMP bool
-choice - prompt "UniPhier SoC select" - default ARCH_UNIPHIER_PH1_PRO4 - config ARCH_UNIPHIER_PH1_SLD3 - bool "PH1-sLD3" + bool "UniPhier PH1-sLD3 SoC" select UNIPHIER_SMP + help + This enables support for UniPhier PH1-sLD3 SoC.
config ARCH_UNIPHIER_PH1_LD4 - bool "PH1-LD4" + bool "UniPhier PH1-LD4 SoC" + depends on !ARCH_UNIPHIER_PH1_SLD3 + help + This enables support for UniPhier PH1-LD4 SoC.
config ARCH_UNIPHIER_PH1_PRO4 - bool "PH1-Pro4" + bool "UniPhier PH1-Pro4 SoC" select UNIPHIER_SMP + depends on !ARCH_UNIPHIER_PH1_SLD3 && \ + !ARCH_UNIPHIER_PH1_LD4 && \ + !ARCH_UNIPHIER_PH1_SLD8 + help + This enables support for UniPhier PH1-Pro4 SoC.
config ARCH_UNIPHIER_PH1_SLD8 - bool "PH1-sLD8" - -endchoice + bool "UniPhier PH1-sLD8 SoC" + depends on !ARCH_UNIPHIER_PH1_SLD3 + help + This enables support for UniPhier PH1-sLD8 SoC.
config MICRO_SUPPORT_CARD bool "Use Micro Support Card" @@ -48,22 +55,4 @@ config CMD_DDRPHY_DUMP The command "ddrphy" shows the resulting parameters of DDR PHY training; it is useful for the evaluation of DDR PHY training.
-choice - prompt "DDR3 Frequency select" - -config DDR_FREQ_1600 - bool "DDR3 1600" - depends on ARCH_UNIPHIER_PH1_SLD3 || ARCH_UNIPHIER_PH1_LD4 || ARCH_UNIPHIER_PH1_PRO4 - -config DDR_FREQ_1333 - bool "DDR3 1333" - depends on ARCH_UNIPHIER_PH1_SLD3 || ARCH_UNIPHIER_PH1_LD4 || ARCH_UNIPHIER_PH1_SLD8 - -endchoice - -config DDR_FREQ - int - default 1333 if DDR_FREQ_1333 - default 1600 if DDR_FREQ_1600 - endif diff --git a/arch/arm/mach-uniphier/Makefile b/arch/arm/mach-uniphier/Makefile index 5c2ccbd..b597a13 100644 --- a/arch/arm/mach-uniphier/Makefile +++ b/arch/arm/mach-uniphier/Makefile @@ -6,9 +6,10 @@ ifdef CONFIG_SPL_BUILD
obj-y += lowlevel_init.o obj-y += init_page_table.o -obj-y += spl.o -obj-y += memconf.o -obj-y += ddrphy_training.o +obj-y += boards.o + +obj-y += init/ bcu/ memconf/ pll/ early-clk/ early-pinctrl/ umc/ ddrphy/ +obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc/
obj-$(CONFIG_DEBUG_LL) += debug_ll.o
@@ -27,13 +28,12 @@ obj-y += cache_uniphier.o obj-$(CONFIG_CMD_PINMON) += cmd_pinmon.o obj-$(CONFIG_CMD_DDRPHY_DUMP) += cmd_ddrphy.o
+obj-y += pinctrl/ clk/ + endif
obj-y += timer.o +obj-y += soc_info.o +obj-y += boot-mode/
obj-$(CONFIG_MICRO_SUPPORT_CARD) += micro-support-card.o - -obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += ph1-sld3/ -obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += ph1-ld4/ -obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += ph1-pro4/ -obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += ph1-sld8/ diff --git a/arch/arm/mach-uniphier/bcu/Makefile b/arch/arm/mach-uniphier/bcu/Makefile new file mode 100644 index 0000000..5b95bda --- /dev/null +++ b/arch/arm/mach-uniphier/bcu/Makefile @@ -0,0 +1,3 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += bcu-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += bcu-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += bcu-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/bcu_init.c b/arch/arm/mach-uniphier/bcu/bcu-ph1-ld4.c similarity index 84% rename from arch/arm/mach-uniphier/ph1-ld4/bcu_init.c rename to arch/arm/mach-uniphier/bcu/bcu-ph1-ld4.c index a7bc15e..e9d3761 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/bcu_init.c +++ b/arch/arm/mach-uniphier/bcu/bcu-ph1-ld4.c @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#include <common.h> #include <linux/io.h> #include <mach/bcu-regs.h> +#include <mach/init.h>
#define ch(x) ((x) >= 32 ? 0 : (x) < 0 ? 0x11111111 : 0x11111111 << (x))
-void bcu_init(void) +int ph1_ld4_bcu_init(const struct uniphier_board_data *bd) { int shift;
@@ -21,7 +21,7 @@ void bcu_init(void) writel(0x11111111, BCSCR5); /* 0xe0000000-0Xffffffff: IPPC/IPPD-bus */
/* Specify DDR channel */ - shift = (CONFIG_SDRAM1_BASE - CONFIG_SDRAM0_BASE) / 0x04000000 * 4; + shift = (bd->dram_ch1_base - bd->dram_ch0_base) / 0x04000000 * 4; writel(ch(shift), BCIPPCCHR2); /* 0x80000000-0x9fffffff */
shift -= 32; @@ -29,4 +29,6 @@ void bcu_init(void)
shift -= 32; writel(ch(shift), BCIPPCCHR4); /* 0xc0000000-0xdfffffff */ + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld3/bcu_init.c b/arch/arm/mach-uniphier/bcu/bcu-ph1-sld3.c similarity index 84% rename from arch/arm/mach-uniphier/ph1-sld3/bcu_init.c rename to arch/arm/mach-uniphier/bcu/bcu-ph1-sld3.c index ccc6897..cb6f862 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/bcu_init.c +++ b/arch/arm/mach-uniphier/bcu/bcu-ph1-sld3.c @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#include <common.h> #include <linux/io.h> #include <mach/bcu-regs.h> +#include <mach/init.h>
#define ch(x) ((x) >= 32 ? 0 : (x) < 0 ? 0x11111111 : 0x11111111 << (x))
-void bcu_init(void) +int ph1_sld3_bcu_init(const struct uniphier_board_data *bd) { int shift;
@@ -25,7 +25,7 @@ void bcu_init(void) writel(0x24440000, BCSCR5);
/* Specify DDR channel */ - shift = (CONFIG_SDRAM1_BASE - CONFIG_SDRAM0_BASE) / 0x04000000 * 4; + shift = (bd->dram_ch1_base - bd->dram_ch0_base) / 0x04000000 * 4; writel(ch(shift), BCIPPCCHR2); /* 0x80000000-0x9fffffff */
shift -= 32; @@ -33,4 +33,6 @@ void bcu_init(void)
shift -= 32; writel(ch(shift), BCIPPCCHR4); /* 0xc0000000-0xdfffffff */ + + return 0; } diff --git a/arch/arm/mach-uniphier/board_early_init_f.c b/arch/arm/mach-uniphier/board_early_init_f.c index 45f5cea..cd516c3 100644 --- a/arch/arm/mach-uniphier/board_early_init_f.c +++ b/arch/arm/mach-uniphier/board_early_init_f.c @@ -4,20 +4,46 @@ * SPDX-License-Identifier: GPL-2.0+ */
+#include <mach/init.h> #include <mach/micro-support-card.h> - -void pin_init(void); -void clkrst_init(void); +#include <mach/soc_info.h>
int board_early_init_f(void) { led_puts("U0");
- pin_init(); - - led_puts("U1"); - - clkrst_init(); + switch (uniphier_get_soc_type()) { +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + case SOC_UNIPHIER_PH1_SLD3: + ph1_sld3_pin_init(); + led_puts("U1"); + ph1_ld4_clk_init(); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) + case SOC_UNIPHIER_PH1_LD4: + ph1_ld4_pin_init(); + led_puts("U1"); + ph1_ld4_clk_init(); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) + case SOC_UNIPHIER_PH1_PRO4: + ph1_pro4_pin_init(); + led_puts("U1"); + ph1_pro4_clk_init(); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + case SOC_UNIPHIER_PH1_SLD8: + ph1_sld8_pin_init(); + led_puts("U1"); + ph1_ld4_clk_init(); + break; +#endif + default: + break; + }
led_puts("U2");
diff --git a/arch/arm/mach-uniphier/boards.c b/arch/arm/mach-uniphier/boards.c new file mode 100644 index 0000000..6a5ea2e --- /dev/null +++ b/arch/arm/mach-uniphier/boards.c @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <libfdt.h> +#include <linux/kernel.h> +#include <mach/init.h> + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) +static const struct uniphier_board_data ph1_sld3_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x20000000, + .dram_ch0_width = 32, + .dram_ch1_base = 0xc0000000, + .dram_ch1_size = 0x20000000, + .dram_ch1_width = 16, + .dram_ch2_base = 0xc0000000, + .dram_ch2_size = 0x10000000, + .dram_ch2_width = 16, + .dram_freq = 1600, +}; +#endif + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) +static const struct uniphier_board_data ph1_ld4_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x10000000, + .dram_ch0_width = 16, + .dram_ch1_base = 0x90000000, + .dram_ch1_size = 0x10000000, + .dram_ch1_width = 16, + .dram_freq = 1600, +}; +#endif + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) +static const struct uniphier_board_data ph1_pro4_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x20000000, + .dram_ch0_width = 32, + .dram_ch1_base = 0xa0000000, + .dram_ch1_size = 0x20000000, + .dram_ch1_width = 32, + .dram_freq = 1600, +}; +#endif + +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) +static const struct uniphier_board_data ph1_sld8_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x10000000, + .dram_ch0_width = 16, + .dram_ch1_base = 0x90000000, + .dram_ch1_size = 0x10000000, + .dram_ch1_width = 16, + .dram_freq = 1333, +}; +#endif + +struct uniphier_board_id { + const char *compatible; + const struct uniphier_board_data *param; +}; + +static const struct uniphier_board_id uniphier_boards[] = { +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + { "socionext,ph1-sld3", &ph1_sld3_data, }, +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) + { "socionext,ph1-ld4", &ph1_ld4_data, }, +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) + { "socionext,ph1-pro4", &ph1_pro4_data, }, +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + { "socionext,ph1-sld8", &ph1_sld8_data, }, +#endif +}; + +const struct uniphier_board_data *uniphier_get_board_param(const void *fdt) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { + if (!fdt_node_check_compatible(fdt, 0, + uniphier_boards[i].compatible)) + return uniphier_boards[i].param; + } + + return NULL; +} diff --git a/arch/arm/mach-uniphier/boot-mode/Makefile b/arch/arm/mach-uniphier/boot-mode/Makefile new file mode 100644 index 0000000..bd6d0a3 --- /dev/null +++ b/arch/arm/mach-uniphier/boot-mode/Makefile @@ -0,0 +1,6 @@ +obj-y += boot-mode.o + +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += boot-mode-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += boot-mode-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += boot-mode-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += boot-mode-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-pro4/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-ld4.c similarity index 88% rename from arch/arm/mach-uniphier/ph1-pro4/boot-mode.c rename to arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-ld4.c index 54a2510..eeedace 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/boot-mode.c +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-ld4.c @@ -44,22 +44,31 @@ struct boot_device_info boot_device_table[] = { {BOOT_DEVICE_NONE, "Reserved"}, {BOOT_DEVICE_NONE, "Reserved"}, {BOOT_DEVICE_NONE, "Reserved"}, - { /* sentinel */ } };
-int get_boot_mode_sel(void) +static int get_boot_mode_sel(void) { return (readl(SG_PINMON0) >> 1) & 0x1f; }
-u32 spl_boot_device(void) +u32 ph1_ld4_boot_device(void) { int boot_mode;
- if (boot_is_swapped()) - return BOOT_DEVICE_NOR; - boot_mode = get_boot_mode_sel();
return boot_device_table[boot_mode].type; } + +void ph1_ld4_boot_mode_show(void) +{ + int mode_sel, i; + + mode_sel = get_boot_mode_sel(); + + puts("Boot Mode Pin:\n"); + + for (i = 0; ARRAY_SIZE(boot_device_table); i++) + printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i, + boot_device_table[i].info); +} diff --git a/arch/arm/mach-uniphier/ph1-sld3/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-sld3.c similarity index 89% rename from arch/arm/mach-uniphier/ph1-sld3/boot-mode.c rename to arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-sld3.c index 40000af..c943e12 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/boot-mode.c +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-sld3.c @@ -11,7 +11,7 @@ #include <mach/sg-regs.h> #include <mach/sbc-regs.h>
-struct boot_device_info boot_device_table[] = { +static struct boot_device_info boot_device_table[] = { {BOOT_DEVICE_NONE, "Reserved"}, {BOOT_DEVICE_NONE, "External Master"}, {BOOT_DEVICE_NONE, "Reserved"}, @@ -76,22 +76,31 @@ struct boot_device_info boot_device_table[] = { {BOOT_DEVICE_NONE, "Reserved"}, {BOOT_DEVICE_NONE, "Reserved"}, {BOOT_DEVICE_NONE, "Reserved"}, - { /* sentinel */ } };
-int get_boot_mode_sel(void) +static int get_boot_mode_sel(void) { return readl(SG_PINMON0) & 0x3f; }
-u32 spl_boot_device(void) +u32 ph1_sld3_boot_device(void) { int boot_mode;
- if (boot_is_swapped()) - return BOOT_DEVICE_NOR; - boot_mode = get_boot_mode_sel();
return boot_device_table[boot_mode].type; } + +void ph1_sld3_boot_mode_show(void) +{ + int mode_sel, i; + + mode_sel = get_boot_mode_sel(); + + puts("Boot Mode Pin:\n"); + + for (i = 0; i < ARRAY_SIZE(boot_device_table); i++) + printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i, + boot_device_table[i].info); +} diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode.c new file mode 100644 index 0000000..71abdef --- /dev/null +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/io.h> +#include <mach/boot-device.h> +#include <mach/sbc-regs.h> +#include <mach/soc_info.h> + +u32 spl_boot_device(void) +{ + if (boot_is_swapped()) + return BOOT_DEVICE_NOR; + + switch (uniphier_get_soc_type()) { +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + case SOC_UNIPHIER_PH1_SLD3: + return ph1_sld3_boot_device(); +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + case SOC_UNIPHIER_PH1_LD4: + case SOC_UNIPHIER_PH1_PRO4: + case SOC_UNIPHIER_PH1_SLD8: + return ph1_ld4_boot_device(); +#endif + default: + return BOOT_DEVICE_NONE; + } +} diff --git a/arch/arm/mach-uniphier/clk/Makefile b/arch/arm/mach-uniphier/clk/Makefile new file mode 100644 index 0000000..e6931d6 --- /dev/null +++ b/arch/arm/mach-uniphier/clk/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += clk-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += clk-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/clkrst_init.c b/arch/arm/mach-uniphier/clk/clk-ph1-ld4.c similarity index 94% rename from arch/arm/mach-uniphier/ph1-ld4/clkrst_init.c rename to arch/arm/mach-uniphier/clk/clk-ph1-ld4.c index 2de81f0..8b95fbb 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/clkrst_init.c +++ b/arch/arm/mach-uniphier/clk/clk-ph1-ld4.c @@ -5,9 +5,10 @@ */
#include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h>
-void clkrst_init(void) +void ph1_ld4_clk_init(void) { u32 tmp;
diff --git a/arch/arm/mach-uniphier/ph1-pro4/clkrst_init.c b/arch/arm/mach-uniphier/clk/clk-ph1-pro4.c similarity index 96% rename from arch/arm/mach-uniphier/ph1-pro4/clkrst_init.c rename to arch/arm/mach-uniphier/clk/clk-ph1-pro4.c index 46cace7..2e1b20a 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/clkrst_init.c +++ b/arch/arm/mach-uniphier/clk/clk-ph1-pro4.c @@ -5,9 +5,10 @@ */
#include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h>
-void clkrst_init(void) +void ph1_pro4_clk_init(void) { u32 tmp;
diff --git a/arch/arm/mach-uniphier/cmd_pinmon.c b/arch/arm/mach-uniphier/cmd_pinmon.c index 8be2ed4..a61d40e 100644 --- a/arch/arm/mach-uniphier/cmd_pinmon.c +++ b/arch/arm/mach-uniphier/cmd_pinmon.c @@ -1,6 +1,5 @@ /* - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com + * Copyright (C) 2014-2015 Masahiro Yamada yamada.masahiro@socionext.com * * SPDX-License-Identifier: GPL-2.0+ */ @@ -8,20 +7,30 @@ #include <common.h> #include <mach/boot-device.h> #include <mach/sbc-regs.h> +#include <mach/soc_info.h>
static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - int mode_sel, i; - printf("Boot Swap: %s\n\n", boot_is_swapped() ? "ON" : "OFF");
- mode_sel = get_boot_mode_sel(); - - puts("Boot Mode Pin:\n"); - - for (i = 0; boot_device_table[i].info; i++) - printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i, - boot_device_table[i].info); + switch (uniphier_get_soc_type()) { +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + case SOC_UNIPHIER_PH1_SLD3: + ph1_sld3_boot_mode_show(); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + case SOC_UNIPHIER_PH1_LD4: + case SOC_UNIPHIER_PH1_PRO4: + case SOC_UNIPHIER_PH1_SLD8: + ph1_ld4_boot_mode_show(); + break; +#endif + default: + break; + }
return 0; } diff --git a/arch/arm/mach-uniphier/ddrphy/Makefile b/arch/arm/mach-uniphier/ddrphy/Makefile new file mode 100644 index 0000000..e2d109d --- /dev/null +++ b/arch/arm/mach-uniphier/ddrphy/Makefile @@ -0,0 +1,3 @@ +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/ph1-ld4/ddrphy_init.c b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-ld4.c similarity index 95% rename from arch/arm/mach-uniphier/ph1-ld4/ddrphy_init.c rename to arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-ld4.c index 2add8fa..991d929 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/ddrphy_init.c +++ b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-ld4.c @@ -8,7 +8,7 @@ #include <linux/io.h> #include <mach/ddrphy-regs.h>
-void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) +int ph1_ld4_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) { u32 tmp;
@@ -67,4 +67,6 @@ void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size)
writel(0x0300C473, &phy->pgcr[1]); writel(0x0000005D, &phy->zq[0].cr[1]); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-pro4/ddrphy_init.c b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-pro4.c similarity index 95% rename from arch/arm/mach-uniphier/ph1-pro4/ddrphy_init.c rename to arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-pro4.c index 61ddcf4..bc47ba3 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/ddrphy_init.c +++ b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-pro4.c @@ -8,7 +8,7 @@ #include <linux/io.h> #include <mach/ddrphy-regs.h>
-void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) +int ph1_pro4_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) { u32 tmp;
@@ -67,4 +67,6 @@ void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size)
writel(0x0300C473, &phy->pgcr[1]); writel(0x0000005D, &phy->zq[0].cr[1]); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld8/ddrphy_init.c b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-sld8.c similarity index 95% rename from arch/arm/mach-uniphier/ph1-sld8/ddrphy_init.c rename to arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-sld8.c index 21efe62..39024a0 100644 --- a/arch/arm/mach-uniphier/ph1-sld8/ddrphy_init.c +++ b/arch/arm/mach-uniphier/ddrphy/ddrphy-ph1-sld8.c @@ -9,7 +9,7 @@ #include <linux/io.h> #include <mach/ddrphy-regs.h>
-void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) +int ph1_sld8_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size) { u32 tmp;
@@ -72,4 +72,6 @@ void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size)
writel(0x0300C473, &phy->pgcr[1]); writel(0x0000005D, &phy->zq[0].cr[1]); + + return 0; } diff --git a/arch/arm/mach-uniphier/ddrphy_training.c b/arch/arm/mach-uniphier/ddrphy/ddrphy-training.c similarity index 100% rename from arch/arm/mach-uniphier/ddrphy_training.c rename to arch/arm/mach-uniphier/ddrphy/ddrphy-training.c diff --git a/arch/arm/mach-uniphier/early-clk/Makefile b/arch/arm/mach-uniphier/early-clk/Makefile new file mode 100644 index 0000000..58af1ad --- /dev/null +++ b/arch/arm/mach-uniphier/early-clk/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += early-clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += early-clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += early-clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += early-clk-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-pro4/early_clkrst_init.c b/arch/arm/mach-uniphier/early-clk/early-clk-ph1-ld4.c similarity index 86% rename from arch/arm/mach-uniphier/ph1-pro4/early_clkrst_init.c rename to arch/arm/mach-uniphier/early-clk/early-clk-ph1-ld4.c index 60204b5..f646c9b 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/early_clkrst_init.c +++ b/arch/arm/mach-uniphier/early-clk/early-clk-ph1-ld4.c @@ -7,9 +7,10 @@ #include <common.h> #include <spl.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h>
-void early_clkrst_init(void) +int ph1_ld4_early_clk_init(const struct uniphier_board_data *bd) { u32 tmp;
@@ -27,4 +28,6 @@ void early_clkrst_init(void) tmp |= SC_CLKCTRL_CEN_UMC | SC_CLKCTRL_CEN_SBC | SC_CLKCTRL_CEN_PERI; writel(tmp, SC_CLKCTRL); readl(SC_CLKCTRL); /* dummy read */ + + return 0; } diff --git a/arch/arm/mach-uniphier/early-pinctrl/Makefile b/arch/arm/mach-uniphier/early-pinctrl/Makefile new file mode 100644 index 0000000..e497d28 --- /dev/null +++ b/arch/arm/mach-uniphier/early-pinctrl/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += early-pinctrl-ph1-sld3.o diff --git a/arch/arm/mach-uniphier/ph1-sld3/early_pinctrl.c b/arch/arm/mach-uniphier/early-pinctrl/early-pinctrl-ph1-sld3.c similarity index 82% rename from arch/arm/mach-uniphier/ph1-sld3/early_pinctrl.c rename to arch/arm/mach-uniphier/early-pinctrl/early-pinctrl-ph1-sld3.c index f6ceef5..1bb9375 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/early_pinctrl.c +++ b/arch/arm/mach-uniphier/early-pinctrl/early-pinctrl-ph1-sld3.c @@ -4,9 +4,10 @@ * SPDX-License-Identifier: GPL-2.0+ */
+#include <mach/init.h> #include <mach/sg-regs.h>
-void early_pin_init(void) +int ph1_sld3_early_pin_init(const struct uniphier_board_data *bd) { /* Comment format: PAD Name -> Function Name */
@@ -20,4 +21,6 @@ void early_pin_init(void) sg_set_pinsel(96, 2, 4, 4); /* RXD2 */ sg_set_pinsel(102, 2, 4, 4); /* TXD2 */ #endif + + return 0; } diff --git a/arch/arm/mach-uniphier/include/mach/boot-device.h b/arch/arm/mach-uniphier/include/mach/boot-device.h index 7a10f1c..eddb25f 100644 --- a/arch/arm/mach-uniphier/include/mach/boot-device.h +++ b/arch/arm/mach-uniphier/include/mach/boot-device.h @@ -1,6 +1,5 @@ /* - * Copyright (C) 2011-2014 Panasonic Corporation - * Author: Masahiro Yamada yamada.m@jp.panasonic.com + * Copyright (C) 2011-2015 Masahiro Yamada yamada.masahiro@socionext.com * * SPDX-License-Identifier: GPL-2.0+ */ @@ -8,13 +7,15 @@ #ifndef _ASM_BOOT_DEVICE_H_ #define _ASM_BOOT_DEVICE_H_
-int get_boot_mode_sel(void); - struct boot_device_info { u32 type; char *info; };
-extern struct boot_device_info boot_device_table[]; +u32 ph1_sld3_boot_device(void); +u32 ph1_ld4_boot_device(void); + +void ph1_sld3_boot_mode_show(void); +void ph1_ld4_boot_mode_show(void);
#endif /* _ASM_BOOT_DEVICE_H_ */ diff --git a/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h b/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h index 01f5c52..adcc972 100644 --- a/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h +++ b/arch/arm/mach-uniphier/include/mach/ddrphy-regs.h @@ -168,7 +168,9 @@ struct ddrphy { #define DDRPHY_BASE(ch, phy) (0x5bc01000 + 0x200000 * (ch) + 0x1000 * (phy))
#ifndef __ASSEMBLY__ -void ddrphy_init(struct ddrphy __iomem *phy, int freq, int size); +int ph1_ld4_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size); +int ph1_pro4_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size); +int ph1_sld8_ddrphy_init(struct ddrphy __iomem *phy, int freq, int size); void ddrphy_prepare_training(struct ddrphy __iomem *phy, int rank); int ddrphy_training(struct ddrphy __iomem *phy); #endif diff --git a/arch/arm/mach-uniphier/include/mach/init.h b/arch/arm/mach-uniphier/include/mach/init.h new file mode 100644 index 0000000..228cbb1 --- /dev/null +++ b/arch/arm/mach-uniphier/include/mach/init.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __MACH_INIT_H +#define __MACH_INIT_H + +struct uniphier_board_data { + unsigned long dram_ch0_base; + unsigned long dram_ch0_size; + unsigned long dram_ch0_width; + unsigned long dram_ch1_base; + unsigned long dram_ch1_size; + unsigned long dram_ch1_width; + unsigned long dram_ch2_base; + unsigned long dram_ch2_size; + unsigned long dram_ch2_width; + unsigned int dram_freq; +}; + +const struct uniphier_board_data *uniphier_get_board_param(const void *fdt); + +int ph1_sld3_init(const struct uniphier_board_data *bd); +int ph1_ld4_init(const struct uniphier_board_data *bd); +int ph1_pro4_init(const struct uniphier_board_data *bd); +int ph1_sld8_init(const struct uniphier_board_data *bd); + +#if defined(CONFIG_MICRO_SUPPORT_CARD) +int ph1_sld3_sbc_init(const struct uniphier_board_data *bd); +int ph1_ld4_sbc_init(const struct uniphier_board_data *bd); +int ph1_pro4_sbc_init(const struct uniphier_board_data *bd); +#else +static inline int ph1_sld3_sbc_init(const struct uniphier_board_data *bd) +{ + return 0; +} + +static inline int ph1_ld4_sbc_init(const struct uniphier_board_data *bd) +{ + return 0; +} + +static inline int ph1_pro4_sbc_init(const struct uniphier_board_data *bd) +{ + return 0; +} +#endif + +int ph1_sld3_bcu_init(const struct uniphier_board_data *bd); +int ph1_ld4_bcu_init(const struct uniphier_board_data *bd); + +int memconf_init(const struct uniphier_board_data *bd); +int ph1_sld3_memconf_init(const struct uniphier_board_data *bd); + +int ph1_sld3_pll_init(const struct uniphier_board_data *bd); +int ph1_ld4_pll_init(const struct uniphier_board_data *bd); +int ph1_pro4_pll_init(const struct uniphier_board_data *bd); +int ph1_sld8_pll_init(const struct uniphier_board_data *bd); + +int ph1_sld3_enable_dpll_ssc(const struct uniphier_board_data *bd); +int ph1_ld4_enable_dpll_ssc(const struct uniphier_board_data *bd); + +int ph1_ld4_early_clk_init(const struct uniphier_board_data *bd); + +int ph1_sld3_early_pin_init(const struct uniphier_board_data *bd); + +int ph1_ld4_umc_init(const struct uniphier_board_data *bd); +int ph1_pro4_umc_init(const struct uniphier_board_data *bd); +int ph1_sld8_umc_init(const struct uniphier_board_data *bd); + +void ph1_sld3_pin_init(void); +void ph1_ld4_pin_init(void); +void ph1_pro4_pin_init(void); +void ph1_sld8_pin_init(void); + +void ph1_ld4_clk_init(void); +void ph1_pro4_clk_init(void); + +#define pr_err(fmt, args...) printf(fmt, ##args) + +#endif /* __MACH_INIT_H */ diff --git a/arch/arm/mach-uniphier/include/mach/sg-regs.h b/arch/arm/mach-uniphier/include/mach/sg-regs.h index c886e1c..d8239f2 100644 --- a/arch/arm/mach-uniphier/include/mach/sg-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sg-regs.h @@ -25,26 +25,32 @@ /* Memory Configuration */ #define SG_MEMCONF (SG_CTRL_BASE | 0x0400)
+#define SG_MEMCONF_CH0_SZ_MASK ((0x1 << 10) | (0x03 << 0)) #define SG_MEMCONF_CH0_SZ_64M ((0x0 << 10) | (0x01 << 0)) #define SG_MEMCONF_CH0_SZ_128M ((0x0 << 10) | (0x02 << 0)) #define SG_MEMCONF_CH0_SZ_256M ((0x0 << 10) | (0x03 << 0)) #define SG_MEMCONF_CH0_SZ_512M ((0x1 << 10) | (0x00 << 0)) #define SG_MEMCONF_CH0_SZ_1G ((0x1 << 10) | (0x01 << 0)) +#define SG_MEMCONF_CH0_NUM_MASK (0x1 << 8) #define SG_MEMCONF_CH0_NUM_1 (0x1 << 8) #define SG_MEMCONF_CH0_NUM_2 (0x0 << 8)
+#define SG_MEMCONF_CH1_SZ_MASK ((0x1 << 11) | (0x03 << 2)) #define SG_MEMCONF_CH1_SZ_64M ((0x0 << 11) | (0x01 << 2)) #define SG_MEMCONF_CH1_SZ_128M ((0x0 << 11) | (0x02 << 2)) #define SG_MEMCONF_CH1_SZ_256M ((0x0 << 11) | (0x03 << 2)) #define SG_MEMCONF_CH1_SZ_512M ((0x1 << 11) | (0x00 << 2)) #define SG_MEMCONF_CH1_SZ_1G ((0x1 << 11) | (0x01 << 2)) +#define SG_MEMCONF_CH1_NUM_MASK (0x1 << 9) #define SG_MEMCONF_CH1_NUM_1 (0x1 << 9) #define SG_MEMCONF_CH1_NUM_2 (0x0 << 9)
+#define SG_MEMCONF_CH2_SZ_MASK ((0x1 << 26) | (0x03 << 16)) #define SG_MEMCONF_CH2_SZ_64M ((0x0 << 26) | (0x01 << 16)) #define SG_MEMCONF_CH2_SZ_128M ((0x0 << 26) | (0x02 << 16)) #define SG_MEMCONF_CH2_SZ_256M ((0x0 << 26) | (0x03 << 16)) #define SG_MEMCONF_CH2_SZ_512M ((0x1 << 26) | (0x00 << 16)) +#define SG_MEMCONF_CH2_NUM_MASK (0x1 << 24) #define SG_MEMCONF_CH2_NUM_1 (0x1 << 24) #define SG_MEMCONF_CH2_NUM_2 (0x0 << 24)
diff --git a/arch/arm/mach-uniphier/include/mach/soc_info.h b/arch/arm/mach-uniphier/include/mach/soc_info.h new file mode 100644 index 0000000..623e7ef --- /dev/null +++ b/arch/arm/mach-uniphier/include/mach/soc_info.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __MACH_SOC_INFO_H__ +#define __MACH_SOC_INFO_H__ + +enum uniphier_soc_id { + SOC_UNIPHIER_PH1_SLD3, + SOC_UNIPHIER_PH1_LD4, + SOC_UNIPHIER_PH1_PRO4, + SOC_UNIPHIER_PH1_SLD8, + SOC_UNIPHIER_PH1_PRO5, + SOC_UNIPHIER_PROXSTREAM2, + SOC_UNIPHIER_PH1_LD6B, + SOC_UNIPHIER_UNKNOWN, +}; + +#define UNIPHIER_NR_ENABLED_SOCS \ + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + \ + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_LD4) + \ + IS_ENABLED(CONFIG_ARCH_UNIPHIER_PH1_PRO4) + \ + 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) + +#define UNIPHIER_MULTI_SOC ((UNIPHIER_NR_ENABLED_SOCS) > 1) + +#if UNIPHIER_MULTI_SOC +enum uniphier_soc_id uniphier_get_soc_type(void); +#else +static inline enum uniphier_soc_id uniphier_get_soc_type(void) +{ +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + return SOC_UNIPHIER_PH1_SLD3; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) + return SOC_UNIPHIER_PH1_LD4; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) + return SOC_UNIPHIER_PH1_PRO4; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + return SOC_UNIPHIER_PH1_SLD8; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + return SOC_UNIPHIER_PH1_PRO5; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) + return SOC_UNIPHIER_PROXSTREAM2; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + return SOC_UNIPHIER_PH1_LD6B; +#endif + + return SOC_UNIPHIER_UNKNOWN; +} +#endif + +#endif /* __MACH_SOC_INFO_H__ */ diff --git a/arch/arm/mach-uniphier/init/Makefile b/arch/arm/mach-uniphier/init/Makefile new file mode 100644 index 0000000..dd9804d --- /dev/null +++ b/arch/arm/mach-uniphier/init/Makefile @@ -0,0 +1,6 @@ +obj-y += init.o + +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += init-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += init-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += init-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += init-ph1-sld8.o diff --git a/arch/arm/mach-uniphier/spl.c b/arch/arm/mach-uniphier/init/init-ph1-ld4.c similarity index 50% rename from arch/arm/mach-uniphier/spl.c rename to arch/arm/mach-uniphier/init/init-ph1-ld4.c index 4c3cad3..8d0ef03 100644 --- a/arch/arm/mach-uniphier/spl.c +++ b/arch/arm/mach-uniphier/init/init-ph1-ld4.c @@ -7,60 +7,31 @@ #include <common.h> #include <spl.h> #include <linux/compiler.h> +#include <mach/init.h> #include <mach/micro-support-card.h>
-void __weak bcu_init(void) +int ph1_ld4_init(const struct uniphier_board_data *bd) { -}; + ph1_ld4_bcu_init(bd);
-void __weak sbc_init(void) -{ -}; - -void __weak sg_init(void) -{ -}; - -void __weak early_pin_init(void) -{ -}; - -void sbc_init(void); -void sg_init(void); -void pll_init(void); -void pin_init(void); -void memconf_init(void); -void early_clkrst_init(void); -void early_pin_init(void); -int umc_init(void); -void enable_dpll_ssc(void); - -void spl_board_init(void) -{ - bcu_init(); - - sbc_init(); - - sg_init(); + ph1_ld4_sbc_init(bd);
support_card_reset();
- pll_init(); + ph1_ld4_pll_init(bd);
support_card_init();
led_puts("L0");
- memconf_init(); + memconf_init(bd);
led_puts("L1");
- early_clkrst_init(); + ph1_ld4_early_clk_init(bd);
led_puts("L2");
- early_pin_init(); - led_puts("L3");
#ifdef CONFIG_SPL_SERIAL_SUPPORT @@ -72,7 +43,7 @@ void spl_board_init(void) { int res;
- res = umc_init(); + res = ph1_ld4_umc_init(bd); if (res < 0) { while (1) ; @@ -81,7 +52,9 @@ void spl_board_init(void)
led_puts("L5");
- enable_dpll_ssc(); + ph1_ld4_enable_dpll_ssc(bd);
led_puts("L6"); + + return 0; } diff --git a/arch/arm/mach-uniphier/init/init-ph1-pro4.c b/arch/arm/mach-uniphier/init/init-ph1-pro4.c new file mode 100644 index 0000000..b9ce08d --- /dev/null +++ b/arch/arm/mach-uniphier/init/init-ph1-pro4.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2013-2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/compiler.h> +#include <mach/init.h> +#include <mach/micro-support-card.h> + +int ph1_pro4_init(const struct uniphier_board_data *bd) +{ + ph1_pro4_sbc_init(bd); + + support_card_reset(); + + ph1_pro4_pll_init(bd); + + support_card_init(); + + led_puts("L0"); + + memconf_init(bd); + + led_puts("L1"); + + ph1_ld4_early_clk_init(bd); + + led_puts("L2"); + + led_puts("L3"); + +#ifdef CONFIG_SPL_SERIAL_SUPPORT + preloader_console_init(); +#endif + + led_puts("L4"); + + { + int res; + + res = ph1_pro4_umc_init(bd); + if (res < 0) { + while (1) + ; + } + } + + led_puts("L5"); + + ph1_ld4_enable_dpll_ssc(bd); + + led_puts("L6"); + + return 0; +} diff --git a/arch/arm/mach-uniphier/init/init-ph1-sld3.c b/arch/arm/mach-uniphier/init/init-ph1-sld3.c new file mode 100644 index 0000000..1146fda --- /dev/null +++ b/arch/arm/mach-uniphier/init/init-ph1-sld3.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2013-2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/compiler.h> +#include <mach/init.h> +#include <mach/micro-support-card.h> + +int ph1_sld3_init(const struct uniphier_board_data *bd) +{ + ph1_sld3_bcu_init(bd); + + ph1_sld3_sbc_init(bd); + + support_card_reset(); + + ph1_sld3_pll_init(bd); + + support_card_init(); + + led_puts("L0"); + + memconf_init(bd); + ph1_sld3_memconf_init(bd); + + led_puts("L1"); + + ph1_ld4_early_clk_init(bd); + + led_puts("L2"); + + ph1_sld3_early_pin_init(bd); + + led_puts("L3"); + +#ifdef CONFIG_SPL_SERIAL_SUPPORT + preloader_console_init(); +#endif + + led_puts("L4"); + + led_puts("L5"); + + ph1_sld3_enable_dpll_ssc(bd); + + led_puts("L6"); + + return 0; +} diff --git a/arch/arm/mach-uniphier/init/init-ph1-sld8.c b/arch/arm/mach-uniphier/init/init-ph1-sld8.c new file mode 100644 index 0000000..741e88c --- /dev/null +++ b/arch/arm/mach-uniphier/init/init-ph1-sld8.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013-2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/compiler.h> +#include <mach/init.h> +#include <mach/micro-support-card.h> + +int ph1_sld8_init(const struct uniphier_board_data *bd) +{ + ph1_ld4_bcu_init(bd); + + ph1_ld4_sbc_init(bd); + + support_card_reset(); + + ph1_sld8_pll_init(bd); + + support_card_init(); + + led_puts("L0"); + + memconf_init(bd); + + led_puts("L1"); + + ph1_ld4_early_clk_init(bd); + + led_puts("L2"); + + led_puts("L3"); + +#ifdef CONFIG_SPL_SERIAL_SUPPORT + preloader_console_init(); +#endif + + led_puts("L4"); + + { + int res; + + res = ph1_sld8_umc_init(bd); + if (res < 0) { + while (1) + ; + } + } + + led_puts("L5"); + + ph1_ld4_enable_dpll_ssc(bd); + + led_puts("L6"); + + return 0; +} diff --git a/arch/arm/mach-uniphier/init/init.c b/arch/arm/mach-uniphier/init/init.c new file mode 100644 index 0000000..316be02 --- /dev/null +++ b/arch/arm/mach-uniphier/init/init.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#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); + if (!param) + hang(); + + switch (uniphier_get_soc_type()) { +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) + case SOC_UNIPHIER_PH1_SLD3: + ph1_sld3_init(param); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) + case SOC_UNIPHIER_PH1_LD4: + ph1_ld4_init(param); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) + case SOC_UNIPHIER_PH1_PRO4: + ph1_pro4_init(param); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) + case SOC_UNIPHIER_PH1_SLD8: + ph1_sld8_init(param); + break; +#endif + default: + break; + } +} diff --git a/arch/arm/mach-uniphier/memconf.c b/arch/arm/mach-uniphier/memconf.c deleted file mode 100644 index 59ed0b5..0000000 --- a/arch/arm/mach-uniphier/memconf.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2011-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <linux/sizes.h> -#include <linux/io.h> -#include <mach/sg-regs.h> - -static inline u32 sg_memconf_val_ch0(unsigned long size, int num) -{ - int size_mb = size / num; - u32 ret; - - switch (size_mb) { - case SZ_64M: - ret = SG_MEMCONF_CH0_SZ_64M; - break; - case SZ_128M: - ret = SG_MEMCONF_CH0_SZ_128M; - break; - case SZ_256M: - ret = SG_MEMCONF_CH0_SZ_256M; - break; - case SZ_512M: - ret = SG_MEMCONF_CH0_SZ_512M; - break; - case SZ_1G: - ret = SG_MEMCONF_CH0_SZ_1G; - break; - default: - BUG(); - break; - } - - switch (num) { - case 1: - ret |= SG_MEMCONF_CH0_NUM_1; - break; - case 2: - ret |= SG_MEMCONF_CH0_NUM_2; - break; - default: - BUG(); - break; - } - return ret; -} - -static inline u32 sg_memconf_val_ch1(unsigned long size, int num) -{ - int size_mb = size / num; - u32 ret; - - switch (size_mb) { - case SZ_64M: - ret = SG_MEMCONF_CH1_SZ_64M; - break; - case SZ_128M: - ret = SG_MEMCONF_CH1_SZ_128M; - break; - case SZ_256M: - ret = SG_MEMCONF_CH1_SZ_256M; - break; - case SZ_512M: - ret = SG_MEMCONF_CH1_SZ_512M; - break; - case SZ_1G: - ret = SG_MEMCONF_CH1_SZ_1G; - break; - default: - BUG(); - break; - } - - switch (num) { - case 1: - ret |= SG_MEMCONF_CH1_NUM_1; - break; - case 2: - ret |= SG_MEMCONF_CH1_NUM_2; - break; - default: - BUG(); - break; - } - return ret; -} - -void memconf_init(void) -{ - u32 tmp; - - /* Set DDR size */ - tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0); - tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1); -#if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE - tmp |= SG_MEMCONF_SPARSEMEM; -#endif - writel(tmp, SG_MEMCONF); -} diff --git a/arch/arm/mach-uniphier/memconf/Makefile b/arch/arm/mach-uniphier/memconf/Makefile new file mode 100644 index 0000000..1a718f3 --- /dev/null +++ b/arch/arm/mach-uniphier/memconf/Makefile @@ -0,0 +1,2 @@ +obj-y += memconf.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += memconf-ph1-sld3.o diff --git a/arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c b/arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c new file mode 100644 index 0000000..e13f56d1 --- /dev/null +++ b/arch/arm/mach-uniphier/memconf/memconf-ph1-sld3.c @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +int ph1_sld3_memconf_init(const struct uniphier_board_data *bd) +{ + u32 tmp; + unsigned long size_per_word; + + tmp = readl(SG_MEMCONF); + + tmp &= ~(SG_MEMCONF_CH2_SZ_MASK | SG_MEMCONF_CH2_NUM_MASK); + + switch (bd->dram_ch2_width) { + case 16: + tmp |= SG_MEMCONF_CH2_NUM_1; + size_per_word = bd->dram_ch2_size; + break; + case 32: + tmp |= SG_MEMCONF_CH2_NUM_2; + size_per_word = bd->dram_ch2_size >> 1; + break; + default: + pr_err("error: unsupported DRAM Ch2 width\n"); + return -EINVAL; + } + + /* Set DDR size */ + switch (size_per_word) { + case SZ_64M: + tmp |= SG_MEMCONF_CH2_SZ_64M; + break; + case SZ_128M: + tmp |= SG_MEMCONF_CH2_SZ_128M; + break; + case SZ_256M: + tmp |= SG_MEMCONF_CH2_SZ_256M; + break; + case SZ_512M: + tmp |= SG_MEMCONF_CH2_SZ_512M; + break; + default: + pr_err("error: unsupported DRAM Ch2 size\n"); + return -EINVAL; + } + + writel(tmp, SG_MEMCONF); + + return 0; +} diff --git a/arch/arm/mach-uniphier/memconf/memconf.c b/arch/arm/mach-uniphier/memconf/memconf.c new file mode 100644 index 0000000..d490736 --- /dev/null +++ b/arch/arm/mach-uniphier/memconf/memconf.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2011-2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +int memconf_init(const struct uniphier_board_data *bd) +{ + u32 tmp = 0; + unsigned long size_per_word; + + tmp = readl(SG_MEMCONF); + + tmp &= ~(SG_MEMCONF_CH0_SZ_MASK | SG_MEMCONF_CH0_NUM_MASK); + + switch (bd->dram_ch0_width) { + case 16: + tmp |= SG_MEMCONF_CH0_NUM_1; + size_per_word = bd->dram_ch0_size; + break; + case 32: + tmp |= SG_MEMCONF_CH0_NUM_2; + size_per_word = bd->dram_ch0_size >> 1; + break; + default: + pr_err("error: unsupported DRAM Ch0 width\n"); + return -EINVAL; + } + + /* Set DDR size */ + switch (size_per_word) { + case SZ_64M: + tmp |= SG_MEMCONF_CH0_SZ_64M; + break; + case SZ_128M: + tmp |= SG_MEMCONF_CH0_SZ_128M; + break; + case SZ_256M: + tmp |= SG_MEMCONF_CH0_SZ_256M; + break; + case SZ_512M: + tmp |= SG_MEMCONF_CH0_SZ_512M; + break; + case SZ_1G: + tmp |= SG_MEMCONF_CH0_SZ_1G; + break; + default: + pr_err("error: unsupported DRAM Ch0 size\n"); + return -EINVAL; + } + + tmp &= ~(SG_MEMCONF_CH1_SZ_MASK | SG_MEMCONF_CH1_NUM_MASK); + + switch (bd->dram_ch1_width) { + case 16: + tmp |= SG_MEMCONF_CH1_NUM_1; + size_per_word = bd->dram_ch1_size; + break; + case 32: + tmp |= SG_MEMCONF_CH1_NUM_2; + size_per_word = bd->dram_ch1_size >> 1; + break; + default: + pr_err("error: unsupported DRAM Ch1 width\n"); + return -EINVAL; + } + + switch (size_per_word) { + case SZ_64M: + tmp |= SG_MEMCONF_CH1_SZ_64M; + break; + case SZ_128M: + tmp |= SG_MEMCONF_CH1_SZ_128M; + break; + case SZ_256M: + tmp |= SG_MEMCONF_CH1_SZ_256M; + break; + case SZ_512M: + tmp |= SG_MEMCONF_CH1_SZ_512M; + break; + case SZ_1G: + tmp |= SG_MEMCONF_CH1_SZ_1G; + break; + default: + pr_err("error: unsupported DRAM Ch1 size\n"); + return -EINVAL; + } + + if (bd->dram_ch0_base + bd->dram_ch0_size < bd->dram_ch1_base) + tmp |= SG_MEMCONF_SPARSEMEM; + else + tmp &= ~SG_MEMCONF_SPARSEMEM; + + writel(tmp, SG_MEMCONF); + + return 0; +} diff --git a/arch/arm/mach-uniphier/ph1-ld4/Makefile b/arch/arm/mach-uniphier/ph1-ld4/Makefile deleted file mode 100644 index 4b9fe91..0000000 --- a/arch/arm/mach-uniphier/ph1-ld4/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# SPDX-License-Identifier: GPL-2.0+ -# - -ifdef CONFIG_SPL_BUILD -obj-y += bcu_init.o pll_init.o early_clkrst_init.o \ - pll_spectrum.o umc_init.o ddrphy_init.o -obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o -else -obj-$(CONFIG_BOARD_EARLY_INIT_F) += pinctrl.o clkrst_init.o -endif - -obj-y += boot-mode.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/boot-mode.c b/arch/arm/mach-uniphier/ph1-ld4/boot-mode.c deleted file mode 100644 index d359b56..0000000 --- a/arch/arm/mach-uniphier/ph1-ld4/boot-mode.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/boot-mode.c" diff --git a/arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c b/arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c deleted file mode 100644 index d7ef16b..0000000 --- a/arch/arm/mach-uniphier/ph1-ld4/early_clkrst_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/early_clkrst_init.c" diff --git a/arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c b/arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c deleted file mode 100644 index 837b2a8..0000000 --- a/arch/arm/mach-uniphier/ph1-ld4/pll_spectrum.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/pll_spectrum.c" diff --git a/arch/arm/mach-uniphier/ph1-pro4/Makefile b/arch/arm/mach-uniphier/ph1-pro4/Makefile deleted file mode 100644 index e8b2c9e..0000000 --- a/arch/arm/mach-uniphier/ph1-pro4/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# SPDX-License-Identifier: GPL-2.0+ -# - -ifdef CONFIG_SPL_BUILD -obj-y += pll_init.o early_clkrst_init.o \ - pll_spectrum.o umc_init.o ddrphy_init.o -obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o -else -obj-$(CONFIG_BOARD_EARLY_INIT_F) += pinctrl.o clkrst_init.o -endif - -obj-y += boot-mode.o diff --git a/arch/arm/mach-uniphier/ph1-sld3/Makefile b/arch/arm/mach-uniphier/ph1-sld3/Makefile deleted file mode 100644 index 48a3756..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# SPDX-License-Identifier: GPL-2.0+ -# - -ifdef CONFIG_SPL_BUILD -obj-y += bcu_init.o memconf.o sg_init.o pll_init.o early_clkrst_init.o \ - early_pinctrl.o pll_spectrum.o umc_init.o -obj-$(CONFIG_MICRO_SUPPORT_CARD) += sbc_init.o -else -obj-$(CONFIG_BOARD_EARLY_INIT_F) += pinctrl.o clkrst_init.o -endif - -obj-y += boot-mode.o diff --git a/arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c b/arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c deleted file mode 100644 index 3a3dab7..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/clkrst_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/clkrst_init.c" diff --git a/arch/arm/mach-uniphier/ph1-sld3/early_clkrst_init.c b/arch/arm/mach-uniphier/ph1-sld3/early_clkrst_init.c deleted file mode 100644 index d7ef16b..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/early_clkrst_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/early_clkrst_init.c" diff --git a/arch/arm/mach-uniphier/ph1-sld3/memconf.c b/arch/arm/mach-uniphier/ph1-sld3/memconf.c deleted file mode 100644 index 553a9e3..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/memconf.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <linux/types.h> -#include <linux/sizes.h> -#include <mach/sg-regs.h> - -static inline u32 sg_memconf_val_ch2(unsigned long size, int num) -{ - int size_mb = size / num; - u32 ret; - - switch (size_mb) { - case SZ_64M: - ret = SG_MEMCONF_CH2_SZ_64M; - break; - case SZ_128M: - ret = SG_MEMCONF_CH2_SZ_128M; - break; - case SZ_256M: - ret = SG_MEMCONF_CH2_SZ_256M; - break; - case SZ_512M: - ret = SG_MEMCONF_CH2_SZ_512M; - break; - default: - BUG(); - break; - } - - switch (num) { - case 1: - ret |= SG_MEMCONF_CH2_NUM_1; - break; - case 2: - ret |= SG_MEMCONF_CH2_NUM_2; - break; - default: - BUG(); - break; - } - return ret; -} - -u32 memconf_additional_val(void) -{ - return sg_memconf_val_ch2(CONFIG_SDRAM2_SIZE, CONFIG_DDR_NUM_CH2); -} diff --git a/arch/arm/mach-uniphier/ph1-sld3/sg_init.c b/arch/arm/mach-uniphier/ph1-sld3/sg_init.c deleted file mode 100644 index ca3cb9c..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/sg_init.c +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (C) 2011-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -void sg_init(void) -{ -} diff --git a/arch/arm/mach-uniphier/ph1-sld3/umc_init.c b/arch/arm/mach-uniphier/ph1-sld3/umc_init.c deleted file mode 100644 index 91ee3de..0000000 --- a/arch/arm/mach-uniphier/ph1-sld3/umc_init.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2011-2015 Masahiro Yamada yamada.masahiro@socionext.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> - -int umc_init(void) -{ - /* add UMC init code here */ - printf("Implement memory init code\n"); - - return 0; -} diff --git a/arch/arm/mach-uniphier/ph1-sld8/Makefile b/arch/arm/mach-uniphier/ph1-sld8/Makefile deleted file mode 100644 index 8eb575e..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/Makefile +++ /dev/null @@ -1 +0,0 @@ -include $(src)/../ph1-ld4/Makefile diff --git a/arch/arm/mach-uniphier/ph1-sld8/bcu_init.c b/arch/arm/mach-uniphier/ph1-sld8/bcu_init.c deleted file mode 100644 index 69b172e..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/bcu_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-ld4/bcu_init.c" diff --git a/arch/arm/mach-uniphier/ph1-sld8/boot-mode.c b/arch/arm/mach-uniphier/ph1-sld8/boot-mode.c deleted file mode 100644 index d359b56..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/boot-mode.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-pro4/boot-mode.c" diff --git a/arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c b/arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c deleted file mode 100644 index 8d3435d..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/clkrst_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-ld4/clkrst_init.c" diff --git a/arch/arm/mach-uniphier/ph1-sld8/early_clkrst_init.c b/arch/arm/mach-uniphier/ph1-sld8/early_clkrst_init.c deleted file mode 100644 index dd236b7..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/early_clkrst_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-ld4/early_clkrst_init.c" diff --git a/arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c b/arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c deleted file mode 100644 index 9b8c485..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/pll_spectrum.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-ld4/pll_spectrum.c" diff --git a/arch/arm/mach-uniphier/ph1-sld8/sbc_init.c b/arch/arm/mach-uniphier/ph1-sld8/sbc_init.c deleted file mode 100644 index 225c0d2..0000000 --- a/arch/arm/mach-uniphier/ph1-sld8/sbc_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../ph1-ld4/sbc_init.c" diff --git a/arch/arm/mach-uniphier/pinctrl/Makefile b/arch/arm/mach-uniphier/pinctrl/Makefile new file mode 100644 index 0000000..542c670 --- /dev/null +++ b/arch/arm/mach-uniphier/pinctrl/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += pinctrl-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += pinctrl-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += pinctrl-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += pinctrl-ph1-sld8.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/pinctrl.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld4.c similarity index 97% rename from arch/arm/mach-uniphier/ph1-ld4/pinctrl.c rename to arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld4.c index 293a6ab..160d3ef 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/pinctrl.c +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld4.c @@ -5,9 +5,10 @@ */
#include <linux/io.h> +#include <mach/init.h> #include <mach/sg-regs.h>
-void pin_init(void) +void ph1_ld4_pin_init(void) { u32 tmp;
diff --git a/arch/arm/mach-uniphier/ph1-pro4/pinctrl.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro4.c similarity index 97% rename from arch/arm/mach-uniphier/ph1-pro4/pinctrl.c rename to arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro4.c index bfaff4f..f50644c 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/pinctrl.c +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro4.c @@ -5,9 +5,10 @@ */
#include <linux/io.h> +#include <mach/init.h> #include <mach/sg-regs.h>
-void pin_init(void) +void ph1_pro4_pin_init(void) { /* Comment format: PAD Name -> Function Name */
diff --git a/arch/arm/mach-uniphier/ph1-sld3/pinctrl.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld3.c similarity index 91% rename from arch/arm/mach-uniphier/ph1-sld3/pinctrl.c rename to arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld3.c index dea938e..f1b2bbb 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/pinctrl.c +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld3.c @@ -4,9 +4,10 @@ * SPDX-License-Identifier: GPL-2.0+ */
+#include <mach/init.h> #include <mach/sg-regs.h>
-void pin_init(void) +void ph1_sld3_pin_init(void) { #ifdef CONFIG_USB_EHCI_UNIPHIER sg_set_pinsel(13, 0, 4, 4); /* USB0OC */ diff --git a/arch/arm/mach-uniphier/ph1-sld8/pinctrl.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld8.c similarity index 96% rename from arch/arm/mach-uniphier/ph1-sld8/pinctrl.c rename to arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld8.c index 1b64414..f936a53 100644 --- a/arch/arm/mach-uniphier/ph1-sld8/pinctrl.c +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-sld8.c @@ -5,9 +5,10 @@ */
#include <linux/io.h> +#include <mach/init.h> #include <mach/sg-regs.h>
-void pin_init(void) +void ph1_sld8_pin_init(void) { /* Comment format: PAD Name -> Function Name */
diff --git a/arch/arm/mach-uniphier/pll/Makefile b/arch/arm/mach-uniphier/pll/Makefile new file mode 100644 index 0000000..d33f99e --- /dev/null +++ b/arch/arm/mach-uniphier/pll/Makefile @@ -0,0 +1,8 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += pll-init-ph1-sld3.o \ + pll-spectrum-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += pll-init-ph1-ld4.o \ + pll-spectrum-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += pll-init-ph1-pro4.o \ + pll-spectrum-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += pll-init-ph1-sld8.o \ + pll-spectrum-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/pll_init.c b/arch/arm/mach-uniphier/pll/pll-init-ph1-ld4.c similarity index 90% rename from arch/arm/mach-uniphier/ph1-ld4/pll_init.c rename to arch/arm/mach-uniphier/pll/pll-init-ph1-ld4.c index f8ec2b6..a272a90 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/pll_init.c +++ b/arch/arm/mach-uniphier/pll/pll-init-ph1-ld4.c @@ -5,13 +5,15 @@ */
#include <common.h> +#include <linux/err.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h> #include <mach/sg-regs.h>
#undef DPLL_SSC_RATE_1PER
-static void dpll_init(void) +static int dpll_init(unsigned int dram_freq) { u32 tmp;
@@ -22,13 +24,17 @@ static void dpll_init(void) */ tmp = readl(SC_DPLLCTRL); tmp &= ~0x000f0000; -#if CONFIG_DDR_FREQ == 1600 - tmp |= 0x000c0000; -#elif CONFIG_DDR_FREQ == 1333 - tmp |= 0x000d0000; -#else -# error "Unknown frequency" -#endif + switch (dram_freq) { + case 1333: + tmp |= 0x000d0000; + break; + case 1600: + tmp |= 0x000c0000; + break; + default: + pr_err("Unsupported frequency"); + return -EINVAL; + }
#if defined(DPLL_SSC_RATE_1PER) tmp &= ~SC_DPLLCTRL_SSC_RATE; @@ -40,6 +46,8 @@ static void dpll_init(void) tmp = readl(SC_DPLLCTRL2); tmp |= SC_DPLLCTRL2_NRSTDS; writel(tmp, SC_DPLLCTRL2); + + return 0; }
static void upll_init(void) @@ -174,9 +182,13 @@ static void vpll_init(void) writel(tmp, SC_VPLL27BCTRL); }
-void pll_init(void) +int ph1_ld4_pll_init(const struct uniphier_board_data *bd) { - dpll_init(); + int ret; + + ret = dpll_init(bd->dram_freq); + if (ret) + return ret; upll_init(); vpll_init();
@@ -186,4 +198,6 @@ void pll_init(void) * so 20 usec can be saved here. */ udelay(480); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-pro4/pll_init.c b/arch/arm/mach-uniphier/pll/pll-init-ph1-pro4.c similarity index 88% rename from arch/arm/mach-uniphier/ph1-pro4/pll_init.c rename to arch/arm/mach-uniphier/pll/pll-init-ph1-pro4.c index 8ae8ed6..906c22f 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/pll_init.c +++ b/arch/arm/mach-uniphier/pll/pll-init-ph1-pro4.c @@ -5,13 +5,15 @@ */
#include <common.h> +#include <linux/err.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h> #include <mach/sg-regs.h>
#undef DPLL_SSC_RATE_1PER
-static void dpll_init(void) +static int dpll_init(unsigned int dram_freq) { u32 tmp;
@@ -22,13 +24,17 @@ static void dpll_init(void) */ tmp = readl(SC_DPLLCTRL); tmp &= ~(0x000f0000); -#if CONFIG_DDR_FREQ == 1600 - tmp |= 0x000c0000; -#elif CONFIG_DDR_FREQ == 1333 - tmp |= 0x000d0000; -#else -# error "Unsupported frequency" -#endif + switch (dram_freq) { + case 1333: + tmp |= 0x000d0000; + break; + case 1600: + tmp |= 0x000c0000; + break; + default: + pr_err("Unsupported frequency"); + return -EINVAL; + }
/* * Set Moduration rate @@ -44,6 +50,8 @@ static void dpll_init(void) tmp = readl(SC_DPLLCTRL2); tmp |= SC_DPLLCTRL2_NRSTDS; writel(tmp, SC_DPLLCTRL2); + + return 0; }
static void vpll_init(void) @@ -136,9 +144,13 @@ static void vpll_init(void) writel(tmp, SC_VPLL27BCTRL); }
-void pll_init(void) +int ph1_pro4_pll_init(const struct uniphier_board_data *bd) { - dpll_init(); + int ret; + + ret = dpll_init(bd->dram_freq); + if (ret) + return ret; vpll_init();
/* @@ -146,4 +158,6 @@ void pll_init(void) * We wait 1 usec in vpll_init() so 1 usec can be saved here. */ udelay(499); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld3/pll_init.c b/arch/arm/mach-uniphier/pll/pll-init-ph1-sld3.c similarity index 62% rename from arch/arm/mach-uniphier/ph1-sld3/pll_init.c rename to arch/arm/mach-uniphier/pll/pll-init-ph1-sld3.c index ebd1c31..6294a45 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/pll_init.c +++ b/arch/arm/mach-uniphier/pll/pll-init-ph1-sld3.c @@ -4,7 +4,10 @@ * SPDX-License-Identifier: GPL-2.0+ */
-void pll_init(void) +#include <mach/init.h> + +int ph1_sld3_pll_init(const struct uniphier_board_data *bd) { /* add pll init code here */ + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld8/pll_init.c b/arch/arm/mach-uniphier/pll/pll-init-ph1-sld8.c similarity index 97% rename from arch/arm/mach-uniphier/ph1-sld8/pll_init.c rename to arch/arm/mach-uniphier/pll/pll-init-ph1-sld8.c index 109cb5f..f249abe 100644 --- a/arch/arm/mach-uniphier/ph1-sld8/pll_init.c +++ b/arch/arm/mach-uniphier/pll/pll-init-ph1-sld8.c @@ -6,6 +6,7 @@
#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h> #include <mach/sg-regs.h>
@@ -186,7 +187,7 @@ static void vpll_init(void) writel(tmp, SC_VPLL27BCTRL); }
-void pll_init(void) +int ph1_sld8_pll_init(const struct uniphier_board_data *bd) { dpll_init(); upll_init(); @@ -198,4 +199,6 @@ void pll_init(void) * so 20 usec can be saved here. */ udelay(480); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-pro4/pll_spectrum.c b/arch/arm/mach-uniphier/pll/pll-spectrum-ph1-ld4.c similarity index 72% rename from arch/arm/mach-uniphier/ph1-pro4/pll_spectrum.c rename to arch/arm/mach-uniphier/pll/pll-spectrum-ph1-ld4.c index fcf2ad2..cad0ed8 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/pll_spectrum.c +++ b/arch/arm/mach-uniphier/pll/pll-spectrum-ph1-ld4.c @@ -4,15 +4,17 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h>
-void enable_dpll_ssc(void) +int ph1_ld4_enable_dpll_ssc(const struct uniphier_board_data *bd) { u32 tmp;
tmp = readl(SC_DPLLCTRL); tmp |= SC_DPLLCTRL_SSC_EN; writel(tmp, SC_DPLLCTRL); + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld3/pll_spectrum.c b/arch/arm/mach-uniphier/pll/pll-spectrum-ph1-sld3.c similarity index 73% rename from arch/arm/mach-uniphier/ph1-sld3/pll_spectrum.c rename to arch/arm/mach-uniphier/pll/pll-spectrum-ph1-sld3.c index fcf2ad2..43dc973 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/pll_spectrum.c +++ b/arch/arm/mach-uniphier/pll/pll-spectrum-ph1-sld3.c @@ -6,13 +6,16 @@
#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sc-regs.h>
-void enable_dpll_ssc(void) +int ph1_sld3_enable_dpll_ssc(const struct uniphier_board_data *bd) { u32 tmp;
tmp = readl(SC_DPLLCTRL); tmp |= SC_DPLLCTRL_SSC_EN; writel(tmp, SC_DPLLCTRL); + + return 0; } diff --git a/arch/arm/mach-uniphier/sbc/Makefile b/arch/arm/mach-uniphier/sbc/Makefile new file mode 100644 index 0000000..68ffd1c --- /dev/null +++ b/arch/arm/mach-uniphier/sbc/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += sbc-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += sbc-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += sbc-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += sbc-ph1-ld4.o diff --git a/arch/arm/mach-uniphier/ph1-ld4/sbc_init.c b/arch/arm/mach-uniphier/sbc/sbc-ph1-ld4.c similarity index 92% rename from arch/arm/mach-uniphier/ph1-ld4/sbc_init.c rename to arch/arm/mach-uniphier/sbc/sbc-ph1-ld4.c index 4435a47..929f50a 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/sbc_init.c +++ b/arch/arm/mach-uniphier/sbc/sbc-ph1-ld4.c @@ -6,10 +6,11 @@
#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sbc-regs.h> #include <mach/sg-regs.h>
-void sbc_init(void) +int ph1_ld4_sbc_init(const struct uniphier_board_data *bd) { u32 tmp;
@@ -46,4 +47,6 @@ void sbc_init(void) writel(0x0000be01, SBBASE0); /* dummy */ writel(0x0200be01, SBBASE1); } + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-pro4/sbc_init.c b/arch/arm/mach-uniphier/sbc/sbc-ph1-pro4.c similarity index 91% rename from arch/arm/mach-uniphier/ph1-pro4/sbc_init.c rename to arch/arm/mach-uniphier/sbc/sbc-ph1-pro4.c index 685f9c7..1032c54 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/sbc_init.c +++ b/arch/arm/mach-uniphier/sbc/sbc-ph1-pro4.c @@ -6,10 +6,11 @@
#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sbc-regs.h> #include <mach/sg-regs.h>
-void sbc_init(void) +int ph1_pro4_sbc_init(const struct uniphier_board_data *bd) { /* * Only CS1 is connected to support card. @@ -39,4 +40,6 @@ void sbc_init(void) writel(0x0000be01, SBBASE0); /* dummy */ writel(0x0200be01, SBBASE1); } + + return 0; } diff --git a/arch/arm/mach-uniphier/ph1-sld3/sbc_init.c b/arch/arm/mach-uniphier/sbc/sbc-ph1-sld3.c similarity index 92% rename from arch/arm/mach-uniphier/ph1-sld3/sbc_init.c rename to arch/arm/mach-uniphier/sbc/sbc-ph1-sld3.c index 3e62121..fb707be 100644 --- a/arch/arm/mach-uniphier/ph1-sld3/sbc_init.c +++ b/arch/arm/mach-uniphier/sbc/sbc-ph1-sld3.c @@ -6,10 +6,11 @@
#include <common.h> #include <linux/io.h> +#include <mach/init.h> #include <mach/sbc-regs.h> #include <mach/sg-regs.h>
-void sbc_init(void) +int ph1_sld3_sbc_init(const struct uniphier_board_data *bd) { /* only address/data multiplex mode is supported */
@@ -42,4 +43,6 @@ void sbc_init(void) }
sg_set_pinsel(99, 1, 4, 4); /* GPIO26 -> EA24 */ + + return 0; } diff --git a/arch/arm/mach-uniphier/soc_info.c b/arch/arm/mach-uniphier/soc_info.c new file mode 100644 index 0000000..3e8e7f4 --- /dev/null +++ b/arch/arm/mach-uniphier/soc_info.c @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <linux/types.h> +#include <mach/sg-regs.h> +#include <mach/soc_info.h> + +#if UNIPHIER_MULTI_SOC +enum uniphier_soc_id uniphier_get_soc_type(void) +{ + u32 revision = readl(SG_REVISION); + enum uniphier_soc_id ret; + + switch ((revision & SG_REVISION_TYPE_MASK) >> SG_REVISION_TYPE_SHIFT) { +#ifdef CONFIG_ARCH_UNIPHIER_PH1_SLD3 + case 0x25: + ret = SOC_UNIPHIER_PH1_SLD3; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_LD4 + case 0x26: + ret = SOC_UNIPHIER_PH1_LD4; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_PRO4 + case 0x28: + ret = SOC_UNIPHIER_PH1_PRO4; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_SLD8 + case 0x29: + ret = SOC_UNIPHIER_PH1_SLD8; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_PRO5 + case 0x2A: + ret = SOC_UNIPHIER_PH1_PRO5; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PROXSTREAM2 + case 0x2E: + ret = SOC_UNIPHIER_PROXSTREAM2; + break; +#endif +#ifdef CONFIG_ARCH_UNIPHIER_PH1_LD6B + case 0x2F: + ret = SOC_UNIPHIER_PH1_LD6B; + break; +#endif + default: + ret = SOC_UNIPHIER_UNKNOWN; + break; + } + + return ret; +} +#endif diff --git a/arch/arm/mach-uniphier/umc/Makefile b/arch/arm/mach-uniphier/umc/Makefile new file mode 100644 index 0000000..dd35e77 --- /dev/null +++ b/arch/arm/mach-uniphier/umc/Makefile @@ -0,0 +1,3 @@ +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 diff --git a/arch/arm/mach-uniphier/ph1-ld4/umc_init.c b/arch/arm/mach-uniphier/umc/umc-ph1-ld4.c similarity index 88% rename from arch/arm/mach-uniphier/ph1-ld4/umc_init.c rename to arch/arm/mach-uniphier/umc/umc-ph1-ld4.c index a7a4157..8124685 100644 --- a/arch/arm/mach-uniphier/ph1-ld4/umc_init.c +++ b/arch/arm/mach-uniphier/umc/umc-ph1-ld4.c @@ -5,7 +5,10 @@ */
#include <common.h> +#include <linux/err.h> #include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> #include <mach/umc-regs.h> #include <mach/ddrphy-regs.h>
@@ -136,14 +139,14 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1)
writel(0x00000101, dramcont0 + UMC_DIOCTLA);
- ddrphy_init(phy0_0, freq, size_ch0); + ph1_ld4_ddrphy_init(phy0_0, freq, size_ch0);
ddrphy_prepare_training(phy0_0, 0); ddrphy_training(phy0_0);
writel(0x00000101, dramcont1 + UMC_DIOCTLA);
- ddrphy_init(phy1_0, freq, size_ch1); + ph1_ld4_ddrphy_init(phy1_0, freq, size_ch1);
ddrphy_prepare_training(phy1_0, 1); ddrphy_training(phy1_0); @@ -156,16 +159,17 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1) return 0; }
-int umc_init(void) +int ph1_ld4_umc_init(const struct uniphier_board_data *bd) { - return umc_init_sub(CONFIG_DDR_FREQ, CONFIG_SDRAM0_SIZE / 0x08000000, - CONFIG_SDRAM1_SIZE / 0x08000000); + if ((bd->dram_ch0_size == SZ_128M || bd->dram_ch0_size == SZ_256M) && + (bd->dram_ch1_size == SZ_128M || bd->dram_ch1_size == SZ_256M) && + (bd->dram_freq == 1333 || bd->dram_freq == 1600) && + bd->dram_ch0_width == 16 && bd->dram_ch1_width == 16) { + return umc_init_sub(bd->dram_freq, + bd->dram_ch0_size / SZ_128M, + bd->dram_ch1_size / SZ_128M); + } else { + pr_err("Unsupported DDR configuration\n"); + return -EINVAL; + } } - -#if (CONFIG_SDRAM0_SIZE == 0x08000000 || CONFIG_SDRAM0_SIZE == 0x10000000) && \ - (CONFIG_SDRAM1_SIZE == 0x08000000 || CONFIG_SDRAM1_SIZE == 0x10000000) && \ - CONFIG_DDR_NUM_CH0 == 1 && CONFIG_DDR_NUM_CH1 == 1 -/* OK */ -#else -#error Unsupported DDR configuration. -#endif diff --git a/arch/arm/mach-uniphier/ph1-pro4/umc_init.c b/arch/arm/mach-uniphier/umc/umc-ph1-pro4.c similarity index 85% rename from arch/arm/mach-uniphier/ph1-pro4/umc_init.c rename to arch/arm/mach-uniphier/umc/umc-ph1-pro4.c index bd8b9d8..8c9f057 100644 --- a/arch/arm/mach-uniphier/ph1-pro4/umc_init.c +++ b/arch/arm/mach-uniphier/umc/umc-ph1-pro4.c @@ -5,7 +5,10 @@ */
#include <common.h> +#include <linux/err.h> #include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> #include <mach/umc-regs.h> #include <mach/ddrphy-regs.h>
@@ -107,28 +110,28 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1)
writel(0x00000101, dramcont0 + UMC_DIOCTLA);
- ddrphy_init(phy0_0, freq, size_ch0); + ph1_pro4_ddrphy_init(phy0_0, freq, size_ch0);
ddrphy_prepare_training(phy0_0, 0); ddrphy_training(phy0_0);
writel(0x00000103, dramcont0 + UMC_DIOCTLA);
- ddrphy_init(phy0_1, freq, size_ch0); + ph1_pro4_ddrphy_init(phy0_1, freq, size_ch0);
ddrphy_prepare_training(phy0_1, 1); ddrphy_training(phy0_1);
writel(0x00000101, dramcont1 + UMC_DIOCTLA);
- ddrphy_init(phy1_0, freq, size_ch1); + ph1_pro4_ddrphy_init(phy1_0, freq, size_ch1);
ddrphy_prepare_training(phy1_0, 0); ddrphy_training(phy1_0);
writel(0x00000103, dramcont1 + UMC_DIOCTLA);
- ddrphy_init(phy1_1, freq, size_ch1); + ph1_pro4_ddrphy_init(phy1_1, freq, size_ch1);
ddrphy_prepare_training(phy1_1, 1); ddrphy_training(phy1_1); @@ -141,17 +144,18 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1) return 0; }
-int umc_init(void) +int ph1_pro4_umc_init(const struct uniphier_board_data *bd) { - return umc_init_sub(CONFIG_DDR_FREQ, CONFIG_SDRAM0_SIZE / 0x08000000, - CONFIG_SDRAM1_SIZE / 0x08000000); + if (((bd->dram_ch0_size == SZ_512M && bd->dram_ch0_width == 32) || + (bd->dram_ch0_size == SZ_256M && bd->dram_ch0_width == 16)) && + ((bd->dram_ch1_size == SZ_512M && bd->dram_ch1_width == 32) || + (bd->dram_ch1_size == SZ_256M && bd->dram_ch1_width == 16)) && + bd->dram_freq == 1600) { + return umc_init_sub(bd->dram_freq, + bd->dram_ch0_size / SZ_128M, + bd->dram_ch1_size / SZ_128M); + } else { + pr_err("Unsupported DDR configuration\n"); + return -EINVAL; + } } - -#if ((CONFIG_SDRAM0_SIZE == 0x20000000 && CONFIG_DDR_NUM_CH0 == 2) || \ - (CONFIG_SDRAM0_SIZE == 0x10000000 && CONFIG_DDR_NUM_CH0 == 1)) && \ - ((CONFIG_SDRAM1_SIZE == 0x20000000 && CONFIG_DDR_NUM_CH1 == 2) || \ - (CONFIG_SDRAM1_SIZE == 0x10000000 && CONFIG_DDR_NUM_CH1 == 1)) -/* OK */ -#else - #error Unsupported DDR configuration. -#endif diff --git a/arch/arm/mach-uniphier/ph1-sld8/umc_init.c b/arch/arm/mach-uniphier/umc/umc-ph1-sld8.c similarity index 87% rename from arch/arm/mach-uniphier/ph1-sld8/umc_init.c rename to arch/arm/mach-uniphier/umc/umc-ph1-sld8.c index 7baea7e..bc60a34 100644 --- a/arch/arm/mach-uniphier/ph1-sld8/umc_init.c +++ b/arch/arm/mach-uniphier/umc/umc-ph1-sld8.c @@ -5,7 +5,10 @@ */
#include <common.h> +#include <linux/err.h> #include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> #include <mach/umc-regs.h> #include <mach/ddrphy-regs.h>
@@ -116,14 +119,14 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1)
writel(0x00000101, dramcont0 + UMC_DIOCTLA);
- ddrphy_init(phy0_0, freq, size_ch0); + ph1_sld8_ddrphy_init(phy0_0, freq, size_ch0);
ddrphy_prepare_training(phy0_0, 0); ddrphy_training(phy0_0);
writel(0x00000101, dramcont1 + UMC_DIOCTLA);
- ddrphy_init(phy1_0, freq, size_ch1); + ph1_sld8_ddrphy_init(phy1_0, freq, size_ch1);
ddrphy_prepare_training(phy1_0, 1); ddrphy_training(phy1_0); @@ -136,16 +139,17 @@ static int umc_init_sub(int freq, int size_ch0, int size_ch1) return 0; }
-int umc_init(void) +int ph1_sld8_umc_init(const struct uniphier_board_data *bd) { - return umc_init_sub(CONFIG_DDR_FREQ, CONFIG_SDRAM0_SIZE / 0x08000000, - CONFIG_SDRAM1_SIZE / 0x08000000); + if ((bd->dram_ch0_size == SZ_128M || bd->dram_ch0_size == SZ_256M) && + (bd->dram_ch1_size == SZ_128M || bd->dram_ch1_size == SZ_256M) && + bd->dram_freq == 1333 && + bd->dram_ch0_width == 16 && bd->dram_ch1_width == 16) { + return umc_init_sub(bd->dram_freq, + bd->dram_ch0_size / SZ_128M, + bd->dram_ch1_size / SZ_128M); + } else { + pr_err("Unsupported DDR configuration\n"); + return -EINVAL; + } } - -#if (CONFIG_SDRAM0_SIZE == 0x08000000 || CONFIG_SDRAM0_SIZE == 0x10000000) && \ - (CONFIG_SDRAM1_SIZE == 0x08000000 || CONFIG_SDRAM1_SIZE == 0x10000000) && \ - CONFIG_DDR_NUM_CH0 == 1 && CONFIG_DDR_NUM_CH1 == 1 -/* OK */ -#else -#error Unsupported DDR configuration. -#endif diff --git a/configs/ph1_pro4_defconfig b/configs/ph1_pro4_defconfig index 139767a..aaf1f46 100644 --- a/configs/ph1_pro4_defconfig +++ b/configs/ph1_pro4_defconfig @@ -1,6 +1,7 @@ CONFIG_ARM=y CONFIG_ARCH_UNIPHIER=y CONFIG_SYS_MALLOC_F_LEN=0x2000 +CONFIG_ARCH_UNIPHIER_PH1_PRO4=y CONFIG_MICRO_SUPPORT_CARD=y CONFIG_SYS_TEXT_BASE=0x84000000 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-pro4-ref" diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h index f44c58b..9109b7f 100644 --- a/include/configs/uniphier.h +++ b/include/configs/uniphier.h @@ -9,53 +9,6 @@ #ifndef __CONFIG_UNIPHIER_COMMON_H__ #define __CONFIG_UNIPHIER_COMMON_H__
-#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) -#define CONFIG_DDR_NUM_CH0 2 -#define CONFIG_DDR_NUM_CH1 1 -#define CONFIG_DDR_NUM_CH2 1 - -/* Physical start address of SDRAM */ -#define CONFIG_SDRAM0_BASE 0x80000000 -#define CONFIG_SDRAM0_SIZE 0x20000000 -#define CONFIG_SDRAM1_BASE 0xc0000000 -#define CONFIG_SDRAM1_SIZE 0x20000000 -#define CONFIG_SDRAM2_BASE 0xc0000000 -#define CONFIG_SDRAM2_SIZE 0x10000000 -#endif - -#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) -#define CONFIG_DDR_NUM_CH0 1 -#define CONFIG_DDR_NUM_CH1 1 - -/* Physical start address of SDRAM */ -#define CONFIG_SDRAM0_BASE 0x80000000 -#define CONFIG_SDRAM0_SIZE 0x10000000 -#define CONFIG_SDRAM1_BASE 0x90000000 -#define CONFIG_SDRAM1_SIZE 0x10000000 -#endif - -#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) -#define CONFIG_DDR_NUM_CH0 2 -#define CONFIG_DDR_NUM_CH1 2 - -/* Physical start address of SDRAM */ -#define CONFIG_SDRAM0_BASE 0x80000000 -#define CONFIG_SDRAM0_SIZE 0x20000000 -#define CONFIG_SDRAM1_BASE 0xa0000000 -#define CONFIG_SDRAM1_SIZE 0x20000000 -#endif - -#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) -#define CONFIG_DDR_NUM_CH0 1 -#define CONFIG_DDR_NUM_CH1 1 - -/* Physical start address of SDRAM */ -#define CONFIG_SDRAM0_BASE 0x80000000 -#define CONFIG_SDRAM0_SIZE 0x10000000 -#define CONFIG_SDRAM1_BASE 0x90000000 -#define CONFIG_SDRAM1_SIZE 0x10000000 -#endif - #define CONFIG_I2C_EEPROM #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10
@@ -285,8 +238,7 @@ defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) || \ defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) #define CONFIG_SPL_TEXT_BASE 0x00040000 -#endif -#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) +#else #define CONFIG_SPL_TEXT_BASE 0x00100000 #endif

The DDR SDRAM initialization code has not been mainlined yet, but U-Boot proper should work.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/dts/Makefile | 1 + arch/arm/dts/uniphier-ph1-pro5-4kbox.dts | 64 ++++++++++++++++++ arch/arm/mach-uniphier/Kconfig | 9 +++ arch/arm/mach-uniphier/board_early_init_f.c | 7 ++ arch/arm/mach-uniphier/boards.c | 15 +++++ arch/arm/mach-uniphier/boot-mode/Makefile | 1 + .../mach-uniphier/boot-mode/boot-mode-ph1-pro5.c | 75 ++++++++++++++++++++++ arch/arm/mach-uniphier/boot-mode/boot-mode.c | 4 ++ arch/arm/mach-uniphier/clk/Makefile | 1 + arch/arm/mach-uniphier/clk/clk-ph1-pro5.c | 44 +++++++++++++ arch/arm/mach-uniphier/cmd_pinmon.c | 5 ++ arch/arm/mach-uniphier/debug_ll.S | 24 +++++++ arch/arm/mach-uniphier/early-clk/Makefile | 1 + .../mach-uniphier/early-clk/early-clk-ph1-pro5.c | 39 +++++++++++ arch/arm/mach-uniphier/include/mach/boot-device.h | 2 + arch/arm/mach-uniphier/include/mach/init.h | 4 ++ arch/arm/mach-uniphier/include/mach/sc-regs.h | 21 ++++++ arch/arm/mach-uniphier/include/mach/sg-regs.h | 2 +- arch/arm/mach-uniphier/init/Makefile | 1 + arch/arm/mach-uniphier/init/init-ph1-pro5.c | 42 ++++++++++++ arch/arm/mach-uniphier/init/init.c | 5 ++ arch/arm/mach-uniphier/pinctrl/Makefile | 1 + arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c | 43 +++++++++++++ arch/arm/mach-uniphier/sbc/Makefile | 1 + configs/ph1_pro5_defconfig | 30 +++++++++ doc/README.uniphier | 4 ++ 26 files changed, 445 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/uniphier-ph1-pro5-4kbox.dts create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/clk/clk-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/early-clk/early-clk-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/init/init-ph1-pro5.c create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c create mode 100644 configs/ph1_pro5_defconfig
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 5afe8a9..0a7d184 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -45,6 +45,7 @@ dtb-$(CONFIG_ARCH_UNIPHIER) += \ uniphier-ph1-ld4-ref.dtb \ uniphier-ph1-ld6b-ref.dtb \ uniphier-ph1-pro4-ref.dtb \ + uniphier-ph1-pro5-4kbox.dtb \ uniphier-ph1-sld3-ref.dtb \ uniphier-ph1-sld8-ref.dtb dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \ diff --git a/arch/arm/dts/uniphier-ph1-pro5-4kbox.dts b/arch/arm/dts/uniphier-ph1-pro5-4kbox.dts new file mode 100644 index 0000000..912bc27 --- /dev/null +++ b/arch/arm/dts/uniphier-ph1-pro5-4kbox.dts @@ -0,0 +1,64 @@ +/* + * Device Tree Source for UniPhier PH1-Pro5 4KBOX Board (EVB-Pro5-4KBOX-M-V0) + * + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; +/include/ "uniphier-ph1-pro5.dtsi" + +/ { + model = "UniPhier PH1-Pro5 4KBOX Board"; + compatible = "socionext,ph1-pro5-4kbox", "socionext,ph1-pro5"; + + memory { + device_type = "memory"; + reg = <0x80000000 0x40000000>; + }; + + chosen { + bootargs = "console=ttyS1,115200"; + stdout-path = &serial1; + }; + + aliases { + serial1 = &serial1; + serial2 = &serial2; + i2c0 = &i2c0; + i2c5 = &i2c5; + i2c6 = &i2c6; + }; +}; + +&serial1 { + status = "okay"; +}; + +&serial2 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; +}; + +/* for U-boot only */ +/ { + soc { + u-boot,dm-pre-reloc; + }; +}; + +&serial1 { + u-boot,dm-pre-reloc; +}; + +&pinctrl { + u-boot,dm-pre-reloc; +}; + +&pinctrl_uart1 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/mach-uniphier/Kconfig b/arch/arm/mach-uniphier/Kconfig index 2cc5dac..7a62957 100644 --- a/arch/arm/mach-uniphier/Kconfig +++ b/arch/arm/mach-uniphier/Kconfig @@ -33,6 +33,15 @@ config ARCH_UNIPHIER_PH1_SLD8 help This enables support for UniPhier PH1-sLD8 SoC.
+config ARCH_UNIPHIER_PH1_PRO5 + bool "UniPhier PH1-Pro5 SoC" + select UNIPHIER_SMP + depends on !ARCH_UNIPHIER_PH1_SLD3 && \ + !ARCH_UNIPHIER_PH1_LD4 && \ + !ARCH_UNIPHIER_PH1_SLD8 + help + This enables support for UniPhier PH1-Pro5 SoC. + config MICRO_SUPPORT_CARD bool "Use Micro Support Card" help diff --git a/arch/arm/mach-uniphier/board_early_init_f.c b/arch/arm/mach-uniphier/board_early_init_f.c index cd516c3..fb49272 100644 --- a/arch/arm/mach-uniphier/board_early_init_f.c +++ b/arch/arm/mach-uniphier/board_early_init_f.c @@ -41,6 +41,13 @@ int board_early_init_f(void) ph1_ld4_clk_init(); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + case SOC_UNIPHIER_PH1_PRO5: + ph1_pro5_pin_init(); + led_puts("U1"); + ph1_pro5_clk_init(); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/boards.c b/arch/arm/mach-uniphier/boards.c index 6a5ea2e..fba8859 100644 --- a/arch/arm/mach-uniphier/boards.c +++ b/arch/arm/mach-uniphier/boards.c @@ -59,6 +59,18 @@ static const struct uniphier_board_data ph1_sld8_data = { }; #endif
+#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) +static const struct uniphier_board_data ph1_pro5_data = { + .dram_ch0_base = 0x80000000, + .dram_ch0_size = 0x20000000, + .dram_ch0_width = 32, + .dram_ch1_base = 0xa0000000, + .dram_ch1_size = 0x20000000, + .dram_ch1_width = 32, + .dram_freq = 1866, +}; +#endif + struct uniphier_board_id { const char *compatible; const struct uniphier_board_data *param; @@ -77,6 +89,9 @@ static const struct uniphier_board_id uniphier_boards[] = { #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) { "socionext,ph1-sld8", &ph1_sld8_data, }, #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + { "socionext,ph1-pro5", &ph1_pro5_data, }, +#endif };
const struct uniphier_board_data *uniphier_get_board_param(const void *fdt) diff --git a/arch/arm/mach-uniphier/boot-mode/Makefile b/arch/arm/mach-uniphier/boot-mode/Makefile index bd6d0a3..1d2f8b3 100644 --- a/arch/arm/mach-uniphier/boot-mode/Makefile +++ b/arch/arm/mach-uniphier/boot-mode/Makefile @@ -4,3 +4,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += boot-mode-ph1-sld3.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += boot-mode-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += boot-mode-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += boot-mode-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += boot-mode-ph1-pro5.o diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-pro5.c b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-pro5.c new file mode 100644 index 0000000..7b385d1 --- /dev/null +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode-ph1-pro5.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/io.h> +#include <mach/boot-device.h> +#include <mach/sbc-regs.h> +#include <mach/sg-regs.h> + +static struct boot_device_info boot_device_table[] = { + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128MB, Addr 4)"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 512MB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 4)"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_MMC1, "eMMC Boot (1.8V)"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NONE, "Reserved"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128MB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 256KB, Addr 5)"}, + { /* sentinel */ } +}; + +static int get_boot_mode_sel(void) +{ + return (readl(SG_PINMON0) >> 1) & 0x1f; +} + +u32 ph1_pro5_boot_device(void) +{ + int boot_mode; + + boot_mode = get_boot_mode_sel(); + + return boot_device_table[boot_mode].type; +} + +void ph1_pro5_boot_mode_show(void) +{ + int mode_sel, i; + + mode_sel = get_boot_mode_sel(); + + puts("Boot Mode Pin:\n"); + + for (i = 0; ARRAY_SIZE(boot_device_table); i++) + printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i, + boot_device_table[i].info); +} diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode.c index 71abdef..60329eb 100644 --- a/arch/arm/mach-uniphier/boot-mode/boot-mode.c +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode.c @@ -29,6 +29,10 @@ u32 spl_boot_device(void) case SOC_UNIPHIER_PH1_SLD8: return ph1_ld4_boot_device(); #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + case SOC_UNIPHIER_PH1_PRO5: + return ph1_pro5_boot_device(); +#endif default: return BOOT_DEVICE_NONE; } diff --git a/arch/arm/mach-uniphier/clk/Makefile b/arch/arm/mach-uniphier/clk/Makefile index e6931d6..873c4f7 100644 --- a/arch/arm/mach-uniphier/clk/Makefile +++ b/arch/arm/mach-uniphier/clk/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += clk-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += clk-ph1-pro5.o diff --git a/arch/arm/mach-uniphier/clk/clk-ph1-pro5.c b/arch/arm/mach-uniphier/clk/clk-ph1-pro5.c new file mode 100644 index 0000000..f78edbb --- /dev/null +++ b/arch/arm/mach-uniphier/clk/clk-ph1-pro5.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sc-regs.h> + +void ph1_pro5_clk_init(void) +{ + u32 tmp; + + /* deassert reset */ + tmp = readl(SC_RSTCTRL); +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp |= SC_RSTCTRL_NRST_USB3B0 | SC_RSTCTRL_NRST_GIO; +#endif +#ifdef CONFIG_NAND_DENALI + tmp |= SC_RSTCTRL_NRST_NAND; +#endif + writel(tmp, SC_RSTCTRL); + readl(SC_RSTCTRL); /* dummy read */ + +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp = readl(SC_RSTCTRL2); + tmp |= SC_RSTCTRL2_NRST_USB3B1; + writel(tmp, SC_RSTCTRL2); + readl(SC_RSTCTRL2); /* dummy read */ +#endif + + /* privide clocks */ + tmp = readl(SC_CLKCTRL); +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp |= SC_CLKCTRL_CEN_USB31 | SC_CLKCTRL_CEN_USB30 | + SC_CLKCTRL_CEN_GIO; +#endif +#ifdef CONFIG_NAND_DENALI + tmp |= SC_CLKCTRL_CEN_NAND; +#endif + writel(tmp, SC_CLKCTRL); + readl(SC_CLKCTRL); /* dummy read */ +} diff --git a/arch/arm/mach-uniphier/cmd_pinmon.c b/arch/arm/mach-uniphier/cmd_pinmon.c index a61d40e..58c53bf 100644 --- a/arch/arm/mach-uniphier/cmd_pinmon.c +++ b/arch/arm/mach-uniphier/cmd_pinmon.c @@ -28,6 +28,11 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ph1_ld4_boot_mode_show(); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + case SOC_UNIPHIER_PH1_PRO5: + ph1_pro5_boot_mode_show(); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/debug_ll.S b/arch/arm/mach-uniphier/debug_ll.S index d5ccad3..056f77e 100644 --- a/arch/arm/mach-uniphier/debug_ll.S +++ b/arch/arm/mach-uniphier/debug_ll.S @@ -101,6 +101,30 @@ ph1_pro4_end: b init_uart ph1_sld8_end: #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) +#define PH1_PRO5_UART_CLK 73728000 + cmp r1, #0x2A + bne ph1_pro5_end + + sg_set_pinsel 47, 0, 4, 8, r0, r1 @ TXD0 -> TXD0 + sg_set_pinsel 49, 0, 4, 8, r0, r1 @ TXD1 -> TXD1 + sg_set_pinsel 51, 0, 4, 8, r0, r1 @ TXD2 -> TXD2 + sg_set_pinsel 53, 0, 4, 8, r0, r1 @ TXD3 -> TXD3 + + ldr r0, =SG_LOADPINCTRL + mov r1, #1 + str r1, [r0] + + ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + ldr r3, =DIV_ROUND(PH1_PRO5_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_pro5_end: +#endif
init_uart: addruart r0, r1, r2 diff --git a/arch/arm/mach-uniphier/early-clk/Makefile b/arch/arm/mach-uniphier/early-clk/Makefile index 58af1ad..939795c 100644 --- a/arch/arm/mach-uniphier/early-clk/Makefile +++ b/arch/arm/mach-uniphier/early-clk/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += early-clk-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += early-clk-ph1-pro5.o diff --git a/arch/arm/mach-uniphier/early-clk/early-clk-ph1-pro5.c b/arch/arm/mach-uniphier/early-clk/early-clk-ph1-pro5.c new file mode 100644 index 0000000..007d3b8 --- /dev/null +++ b/arch/arm/mach-uniphier/early-clk/early-clk-ph1-pro5.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.m@jp.panasonic.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sc-regs.h> + +int ph1_pro5_early_clk_init(const struct uniphier_board_data *bd) +{ + u32 tmp; + + /* + * deassert reset + * UMCA2: Ch1 (DDR3) + * UMCA1, UMC31: Ch0 (WIO1) + * UMCA0, UMC30: Ch0 (WIO0) + */ + tmp = readl(SC_RSTCTRL4); + tmp |= SC_RSTCTRL4_NRST_UMCSB | SC_RSTCTRL4_NRST_UMCA2 | + SC_RSTCTRL4_NRST_UMCA1 | SC_RSTCTRL4_NRST_UMCA0 | + SC_RSTCTRL4_NRST_UMC31 | SC_RSTCTRL4_NRST_UMC30; + writel(tmp, SC_RSTCTRL4); + readl(SC_RSTCTRL); /* dummy read */ + + /* privide clocks */ + tmp = readl(SC_CLKCTRL); + tmp |= SC_CLKCTRL_CEN_SBC | SC_CLKCTRL_CEN_PERI; + writel(tmp, SC_CLKCTRL); + tmp = readl(SC_CLKCTRL4); + tmp |= SC_CLKCTRL4_CEN_UMCSB | SC_CLKCTRL4_CEN_UMC1 | + SC_CLKCTRL4_CEN_UMC0; + writel(tmp, SC_CLKCTRL4); + readl(SC_CLKCTRL4); /* dummy read */ + + return 0; +} diff --git a/arch/arm/mach-uniphier/include/mach/boot-device.h b/arch/arm/mach-uniphier/include/mach/boot-device.h index eddb25f..3cbe773 100644 --- a/arch/arm/mach-uniphier/include/mach/boot-device.h +++ b/arch/arm/mach-uniphier/include/mach/boot-device.h @@ -14,8 +14,10 @@ struct boot_device_info {
u32 ph1_sld3_boot_device(void); u32 ph1_ld4_boot_device(void); +u32 ph1_pro5_boot_device(void);
void ph1_sld3_boot_mode_show(void); void ph1_ld4_boot_mode_show(void); +void ph1_pro5_boot_mode_show(void);
#endif /* _ASM_BOOT_DEVICE_H_ */ diff --git a/arch/arm/mach-uniphier/include/mach/init.h b/arch/arm/mach-uniphier/include/mach/init.h index 228cbb1..914182d 100644 --- a/arch/arm/mach-uniphier/include/mach/init.h +++ b/arch/arm/mach-uniphier/include/mach/init.h @@ -26,6 +26,7 @@ int ph1_sld3_init(const struct uniphier_board_data *bd); int ph1_ld4_init(const struct uniphier_board_data *bd); int ph1_pro4_init(const struct uniphier_board_data *bd); int ph1_sld8_init(const struct uniphier_board_data *bd); +int ph1_pro5_init(const struct uniphier_board_data *bd);
#if defined(CONFIG_MICRO_SUPPORT_CARD) int ph1_sld3_sbc_init(const struct uniphier_board_data *bd); @@ -63,6 +64,7 @@ int ph1_sld3_enable_dpll_ssc(const struct uniphier_board_data *bd); int ph1_ld4_enable_dpll_ssc(const struct uniphier_board_data *bd);
int ph1_ld4_early_clk_init(const struct uniphier_board_data *bd); +int ph1_pro5_early_clk_init(const struct uniphier_board_data *bd);
int ph1_sld3_early_pin_init(const struct uniphier_board_data *bd);
@@ -74,9 +76,11 @@ void ph1_sld3_pin_init(void); void ph1_ld4_pin_init(void); void ph1_pro4_pin_init(void); void ph1_sld8_pin_init(void); +void ph1_pro5_pin_init(void);
void ph1_ld4_clk_init(void); void ph1_pro4_clk_init(void); +void ph1_pro5_clk_init(void);
#define pr_err(fmt, args...) printf(fmt, ##args)
diff --git a/arch/arm/mach-uniphier/include/mach/sc-regs.h b/arch/arm/mach-uniphier/include/mach/sc-regs.h index 9d697b1..903e405 100644 --- a/arch/arm/mach-uniphier/include/mach/sc-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sc-regs.h @@ -15,6 +15,10 @@ #define SC_BASE_ADDR 0x61840000 #endif
+#define SC_DPLLOSCCTRL (SC_BASE_ADDR | 0x1110) +#define SC_DPLLOSCCTRL_DPLLST (0x1 << 1) +#define SC_DPLLOSCCTRL_DPLLEN (0x1 << 0) + #define SC_DPLLCTRL (SC_BASE_ADDR | 0x1200) #define SC_DPLLCTRL_SSC_EN (0x1 << 31) #define SC_DPLLCTRL_FOUTMODE_MASK (0xf << 16) @@ -43,6 +47,7 @@ #define SC_RSTCTRL_NRST_ETHER (0x1 << 12) #define SC_RSTCTRL_NRST_STDMAC (0x1 << 10) #define SC_RSTCTRL_NRST_GIO (0x1 << 6) +/* Pro4 or older */ #define SC_RSTCTRL_NRST_UMC1 (0x1 << 5) #define SC_RSTCTRL_NRST_UMC0 (0x1 << 4) #define SC_RSTCTRL_NRST_NAND (0x1 << 2) @@ -53,6 +58,15 @@
#define SC_RSTCTRL3 (SC_BASE_ADDR | 0x2008)
+/* Pro5 or newer */ +#define SC_RSTCTRL4 (SC_BASE_ADDR | 0x200c) +#define SC_RSTCTRL4_NRST_UMCSB (0x1 << 12) /* UMC system bus */ +#define SC_RSTCTRL4_NRST_UMCA2 (0x1 << 10) /* UMC ch2 standby */ +#define SC_RSTCTRL4_NRST_UMCA1 (0x1 << 9) /* UMC ch1 standby */ +#define SC_RSTCTRL4_NRST_UMCA0 (0x1 << 8) /* UMC ch0 standby */ +#define SC_RSTCTRL4_NRST_UMC31 (0x1 << 5) /* UMC ch1 */ +#define SC_RSTCTRL4_NRST_UMC30 (0x1 << 4) /* UMC ch0 */ + #define SC_CLKCTRL (SC_BASE_ADDR | 0x2104) #define SC_CLKCTRL_CEN_USB31 (0x1 << 17) /* USB3 #1 */ #define SC_CLKCTRL_CEN_USB30 (0x1 << 16) /* USB3 #0 */ @@ -60,11 +74,18 @@ #define SC_CLKCTRL_CEN_MIO (0x1 << 11) #define SC_CLKCTRL_CEN_STDMAC (0x1 << 10) #define SC_CLKCTRL_CEN_GIO (0x1 << 6) +/* Pro4 or older */ #define SC_CLKCTRL_CEN_UMC (0x1 << 4) #define SC_CLKCTRL_CEN_NAND (0x1 << 2) #define SC_CLKCTRL_CEN_SBC (0x1 << 1) #define SC_CLKCTRL_CEN_PERI (0x1 << 0)
+/* Pro5 or newer */ +#define SC_CLKCTRL4 (SC_BASE_ADDR | 0x210c) +#define SC_CLKCTRL4_CEN_UMCSB (0x1 << 12) /* UMC system bus */ +#define SC_CLKCTRL4_CEN_UMC1 (0x1 << 1) /* UMC ch1 */ +#define SC_CLKCTRL4_CEN_UMC0 (0x1 << 0) /* UMC ch0 */ + /* System reset control register */ #define SC_IRQTIMSET (SC_BASE_ADDR | 0x3000) #define SC_SLFRSTSEL (SC_BASE_ADDR | 0x3010) diff --git a/arch/arm/mach-uniphier/include/mach/sg-regs.h b/arch/arm/mach-uniphier/include/mach/sg-regs.h index d8239f2..168b35e 100644 --- a/arch/arm/mach-uniphier/include/mach/sg-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sg-regs.h @@ -59,7 +59,7 @@ /* Pin Control */ #define SG_PINCTRL_BASE (SG_CTRL_BASE | 0x1000)
-/* Only for PH1-Pro4 */ +/* PH1-Pro4, PH1-Pro5 */ #define SG_LOADPINCTRL (SG_CTRL_BASE | 0x1700)
/* Input Enable */ diff --git a/arch/arm/mach-uniphier/init/Makefile b/arch/arm/mach-uniphier/init/Makefile index dd9804d..1524a8d 100644 --- a/arch/arm/mach-uniphier/init/Makefile +++ b/arch/arm/mach-uniphier/init/Makefile @@ -4,3 +4,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += init-ph1-sld3.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += init-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += init-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += init-ph1-sld8.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += init-ph1-pro5.o diff --git a/arch/arm/mach-uniphier/init/init-ph1-pro5.c b/arch/arm/mach-uniphier/init/init-ph1-pro5.c new file mode 100644 index 0000000..92b3f21 --- /dev/null +++ b/arch/arm/mach-uniphier/init/init-ph1-pro5.c @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/compiler.h> +#include <mach/init.h> +#include <mach/micro-support-card.h> + +int ph1_pro5_init(const struct uniphier_board_data *bd) +{ + ph1_pro4_sbc_init(bd); + + support_card_reset(); + + support_card_init(); + + led_puts("L0"); + + memconf_init(bd); + + led_puts("L1"); + + ph1_pro5_early_clk_init(bd); + + led_puts("L2"); + + led_puts("L3"); + +#ifdef CONFIG_SPL_SERIAL_SUPPORT + preloader_console_init(); +#endif + + led_puts("L4"); + + led_puts("L5"); + + return 0; +} diff --git a/arch/arm/mach-uniphier/init/init.c b/arch/arm/mach-uniphier/init/init.c index 316be02..2649e6c 100644 --- a/arch/arm/mach-uniphier/init/init.c +++ b/arch/arm/mach-uniphier/init/init.c @@ -40,6 +40,11 @@ void spl_board_init(void) ph1_sld8_init(param); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) + case SOC_UNIPHIER_PH1_PRO5: + ph1_pro5_init(param); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/pinctrl/Makefile b/arch/arm/mach-uniphier/pinctrl/Makefile index 542c670..a785245 100644 --- a/arch/arm/mach-uniphier/pinctrl/Makefile +++ b/arch/arm/mach-uniphier/pinctrl/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += pinctrl-ph1-sld3.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += pinctrl-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += pinctrl-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += pinctrl-ph1-sld8.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += pinctrl-ph1-pro5.o diff --git a/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c new file mode 100644 index 0000000..a6cc082 --- /dev/null +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-pro5.c @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +void ph1_pro5_pin_init(void) +{ + /* Comment format: PAD Name -> Function Name */ + +#ifdef CONFIG_NAND_DENALI + sg_set_pinsel(19, 0, 4, 8); /* XNFRE -> XNFRE */ + sg_set_pinsel(20, 0, 4, 8); /* XNFWE -> XNFWE */ + sg_set_pinsel(21, 0, 4, 8); /* NFALE -> NFALE */ + sg_set_pinsel(22, 0, 4, 8); /* NFCLE -> NFCLE */ + sg_set_pinsel(23, 0, 4, 8); /* XNFWP -> XNFWP */ + sg_set_pinsel(24, 0, 4, 8); /* XNFCE0 -> XNFCE0 */ + sg_set_pinsel(25, 0, 4, 8); /* NRYBY0 -> NRYBY0 */ + sg_set_pinsel(26, 0, 4, 8); /* XNFCE1 -> XNFCE1 */ + sg_set_pinsel(27, 0, 4, 8); /* NRYBY1 -> NRYBY1 */ + sg_set_pinsel(28, 0, 4, 8); /* NFD0 -> NFD0 */ + sg_set_pinsel(29, 0, 4, 8); /* NFD1 -> NFD1 */ + sg_set_pinsel(30, 0, 4, 8); /* NFD2 -> NFD2 */ + sg_set_pinsel(31, 0, 4, 8); /* NFD3 -> NFD3 */ + sg_set_pinsel(32, 0, 4, 8); /* NFD4 -> NFD4 */ + sg_set_pinsel(33, 0, 4, 8); /* NFD5 -> NFD5 */ + sg_set_pinsel(34, 0, 4, 8); /* NFD6 -> NFD6 */ + sg_set_pinsel(35, 0, 4, 8); /* NFD7 -> NFD7 */ +#endif + +#ifdef CONFIG_USB_XHCI_UNIPHIER + sg_set_pinsel(124, 0, 4, 8); /* USB0VBUS -> USB0VBUS */ + sg_set_pinsel(125, 0, 4, 8); /* USB0OD -> USB0OD */ + sg_set_pinsel(126, 0, 4, 8); /* USB1VBUS -> USB1VBUS */ + sg_set_pinsel(127, 0, 4, 8); /* USB1OD -> USB1OD */ +#endif + + writel(1, SG_LOADPINCTRL); +} diff --git a/arch/arm/mach-uniphier/sbc/Makefile b/arch/arm/mach-uniphier/sbc/Makefile index 68ffd1c..2c5fd1a 100644 --- a/arch/arm/mach-uniphier/sbc/Makefile +++ b/arch/arm/mach-uniphier/sbc/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += sbc-ph1-sld3.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += sbc-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += sbc-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += sbc-ph1-ld4.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += sbc-ph1-pro4.o diff --git a/configs/ph1_pro5_defconfig b/configs/ph1_pro5_defconfig new file mode 100644 index 0000000..967d0f1 --- /dev/null +++ b/configs/ph1_pro5_defconfig @@ -0,0 +1,30 @@ +CONFIG_ARM=y +CONFIG_ARCH_UNIPHIER=y +CONFIG_ARCH_UNIPHIER_PH1_PRO5=y +CONFIG_SYS_MALLOC_F_LEN=0x2000 +CONFIG_MICRO_SUPPORT_CARD=y +CONFIG_SYS_TEXT_BASE=0x84000000 +CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-pro5-4kbox" +CONFIG_HUSH_PARSER=y +# CONFIG_CMD_XIMG is not set +# CONFIG_CMD_ENV_EXISTS is not set +CONFIG_CMD_NAND=y +CONFIG_CMD_I2C=y +CONFIG_CMD_USB=y +# CONFIG_CMD_FPGA is not set +CONFIG_CMD_TFTPPUT=y +CONFIG_CMD_PING=y +CONFIG_CMD_TIME=y +# CONFIG_CMD_MISC is not set +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_SPL_SIMPLE_BUS=y +CONFIG_NAND_DENALI=y +CONFIG_SYS_NAND_DENALI_64BIT=y +CONFIG_NAND_DENALI_SPARE_AREA_SKIP_BYTES=8 +CONFIG_SPL_NAND_DENALI=y +CONFIG_UNIPHIER_SERIAL=y +CONFIG_PINCTRL=y +CONFIG_SPL_PINCTRL=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_STORAGE=y diff --git a/doc/README.uniphier b/doc/README.uniphier index e936f40..6792327 100644 --- a/doc/README.uniphier +++ b/doc/README.uniphier @@ -44,6 +44,10 @@ PH1-sLD8: $ make ph1_sld8_defconfig $ make CROSS_COMPILE=arm-linux-gnueabi-
+PH1-Pro5: + $ make ph1_pro5_defconfig + $ make CROSS_COMPILE=arm-linux-gnueabi- + You may wish to change the "CROSS_COMPILE=arm-linux-gnueabi-" to use your favorite compiler.

The DDR SDRAM initialization code has not been mainlined yet, but U-Boot proper should work.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/dts/Makefile | 4 +- arch/arm/dts/uniphier-ph1-ld6b-ref.dts | 1 + arch/arm/dts/uniphier-proxstream2-gentil.dts | 62 ++++++++++++++++++ arch/arm/dts/uniphier-proxstream2-vodka.dts | 62 ++++++++++++++++++ arch/arm/mach-uniphier/Kconfig | 18 ++++++ arch/arm/mach-uniphier/board_early_init_f.c | 14 ++++ arch/arm/mach-uniphier/boards.c | 22 +++++++ arch/arm/mach-uniphier/boot-mode/Makefile | 2 + .../boot-mode/boot-mode-proxstream2.c | 75 ++++++++++++++++++++++ arch/arm/mach-uniphier/boot-mode/boot-mode.c | 6 ++ arch/arm/mach-uniphier/clk/Makefile | 2 + arch/arm/mach-uniphier/clk/clk-proxstream2.c | 50 +++++++++++++++ arch/arm/mach-uniphier/cmd_pinmon.c | 7 ++ arch/arm/mach-uniphier/debug_ll.S | 49 ++++++++++++++ arch/arm/mach-uniphier/early-clk/Makefile | 2 + .../early-clk/early-clk-proxstream2.c | 44 +++++++++++++ arch/arm/mach-uniphier/include/mach/boot-device.h | 2 + arch/arm/mach-uniphier/include/mach/init.h | 12 ++++ arch/arm/mach-uniphier/include/mach/sc-regs.h | 2 + arch/arm/mach-uniphier/include/mach/sg-regs.h | 2 + arch/arm/mach-uniphier/init/Makefile | 2 + arch/arm/mach-uniphier/init/init-proxstream2.c | 41 ++++++++++++ arch/arm/mach-uniphier/init/init.c | 7 ++ arch/arm/mach-uniphier/memconf/Makefile | 2 + .../mach-uniphier/memconf/memconf-proxstream2.c | 64 ++++++++++++++++++ arch/arm/mach-uniphier/pinctrl/Makefile | 2 + arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c | 45 +++++++++++++ .../mach-uniphier/pinctrl/pinctrl-proxstream2.c | 45 +++++++++++++ arch/arm/mach-uniphier/sbc/Makefile | 2 + arch/arm/mach-uniphier/sbc/sbc-proxstream2.c | 48 ++++++++++++++ configs/ph1_ld6b_defconfig | 30 +++++++++ doc/README.uniphier | 8 +++ 32 files changed, 733 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/uniphier-proxstream2-gentil.dts create mode 100644 arch/arm/dts/uniphier-proxstream2-vodka.dts create mode 100644 arch/arm/mach-uniphier/boot-mode/boot-mode-proxstream2.c create mode 100644 arch/arm/mach-uniphier/clk/clk-proxstream2.c create mode 100644 arch/arm/mach-uniphier/early-clk/early-clk-proxstream2.c create mode 100644 arch/arm/mach-uniphier/init/init-proxstream2.c create mode 100644 arch/arm/mach-uniphier/memconf/memconf-proxstream2.c create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c create mode 100644 arch/arm/mach-uniphier/pinctrl/pinctrl-proxstream2.c create mode 100644 arch/arm/mach-uniphier/sbc/sbc-proxstream2.c create mode 100644 configs/ph1_ld6b_defconfig
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 0a7d184..5f10243 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -47,7 +47,9 @@ dtb-$(CONFIG_ARCH_UNIPHIER) += \ uniphier-ph1-pro4-ref.dtb \ uniphier-ph1-pro5-4kbox.dtb \ uniphier-ph1-sld3-ref.dtb \ - uniphier-ph1-sld8-ref.dtb + uniphier-ph1-sld8-ref.dtb \ + uniphier-proxstream2-gentil.dtb \ + uniphier-proxstream2-vodka.dtb dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \ zynq-zc706.dtb \ zynq-zed.dtb \ diff --git a/arch/arm/dts/uniphier-ph1-ld6b-ref.dts b/arch/arm/dts/uniphier-ph1-ld6b-ref.dts index ca68930..bd86f09 100644 --- a/arch/arm/dts/uniphier-ph1-ld6b-ref.dts +++ b/arch/arm/dts/uniphier-ph1-ld6b-ref.dts @@ -3,6 +3,7 @@ * * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com * + * SPDX-License-Identifier: GPL-2.0+ */
/dts-v1/; diff --git a/arch/arm/dts/uniphier-proxstream2-gentil.dts b/arch/arm/dts/uniphier-proxstream2-gentil.dts new file mode 100644 index 0000000..81d2385 --- /dev/null +++ b/arch/arm/dts/uniphier-proxstream2-gentil.dts @@ -0,0 +1,62 @@ +/* + * Device Tree Source for UniPhier ProXstream2 Gentil Board + * + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; +/include/ "uniphier-proxstream2.dtsi" + +/ { + model = "UniPhier ProXstream2 Gentil Board"; + compatible = "socionext,proxstream2-gentil", "socionext,proxstream2"; + + memory { + device_type = "memory"; + reg = <0x80000000 0x80000000>; + }; + + chosen { + bootargs = "console=ttyS2,115200"; + stdout-path = &serial2; + }; + + aliases { + serial0 = &serial0; + serial1 = &serial1; + serial2 = &serial2; + i2c0 = &i2c0; + i2c4 = &i2c4; + i2c5 = &i2c5; + i2c6 = &i2c6; + }; +}; + +&serial2 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; +}; + +/* for U-boot only */ +/ { + soc { + u-boot,dm-pre-reloc; + }; +}; + +&serial2 { + u-boot,dm-pre-reloc; +}; + +&pinctrl { + u-boot,dm-pre-reloc; +}; + +&pinctrl_uart2 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/dts/uniphier-proxstream2-vodka.dts b/arch/arm/dts/uniphier-proxstream2-vodka.dts new file mode 100644 index 0000000..fba7b74 --- /dev/null +++ b/arch/arm/dts/uniphier-proxstream2-vodka.dts @@ -0,0 +1,62 @@ +/* + * Device Tree Source for UniPhier ProXstream2 Vodka Board + * + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; +/include/ "uniphier-proxstream2.dtsi" + +/ { + model = "UniPhier ProXstream2 Vodka Board"; + compatible = "socionext,proxstream2-vodka", "socionext,proxstream2"; + + memory { + device_type = "memory"; + reg = <0x80000000 0x80000000>; + }; + + chosen { + bootargs = "console=ttyS2,115200"; + stdout-path = &serial2; + }; + + aliases { + serial0 = &serial0; + serial1 = &serial1; + serial2 = &serial2; + i2c0 = &i2c0; + i2c4 = &i2c4; + i2c5 = &i2c5; + i2c6 = &i2c6; + }; +}; + +&serial2 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; +}; + +/* for U-boot only */ +/ { + soc { + u-boot,dm-pre-reloc; + }; +}; + +&serial2 { + u-boot,dm-pre-reloc; +}; + +&pinctrl { + u-boot,dm-pre-reloc; +}; + +&pinctrl_uart2 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/mach-uniphier/Kconfig b/arch/arm/mach-uniphier/Kconfig index 7a62957..22ab798 100644 --- a/arch/arm/mach-uniphier/Kconfig +++ b/arch/arm/mach-uniphier/Kconfig @@ -42,6 +42,24 @@ config ARCH_UNIPHIER_PH1_PRO5 help This enables support for UniPhier PH1-Pro5 SoC.
+config ARCH_UNIPHIER_PROXSTREAM2 + bool "UniPhier ProXstream2 SoC" + select UNIPHIER_SMP + depends on !ARCH_UNIPHIER_PH1_SLD3 && \ + !ARCH_UNIPHIER_PH1_LD4 && \ + !ARCH_UNIPHIER_PH1_SLD8 + help + This enables support for UniPhier ProXstream2 SoC. + +config ARCH_UNIPHIER_PH1_LD6B + bool "UniPhier PH1-LD6b SoC" + select UNIPHIER_SMP + depends on !ARCH_UNIPHIER_PH1_SLD3 && \ + !ARCH_UNIPHIER_PH1_LD4 && \ + !ARCH_UNIPHIER_PH1_SLD8 + help + This enables support for UniPhier PH1-LD6b SoC. + config MICRO_SUPPORT_CARD bool "Use Micro Support Card" help diff --git a/arch/arm/mach-uniphier/board_early_init_f.c b/arch/arm/mach-uniphier/board_early_init_f.c index fb49272..5e0d246 100644 --- a/arch/arm/mach-uniphier/board_early_init_f.c +++ b/arch/arm/mach-uniphier/board_early_init_f.c @@ -48,6 +48,20 @@ int board_early_init_f(void) ph1_pro5_clk_init(); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) + case SOC_UNIPHIER_PROXSTREAM2: + proxstream2_pin_init(); + led_puts("U1"); + proxstream2_clk_init(); + break; +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + case SOC_UNIPHIER_PH1_LD6B: + ph1_ld6b_pin_init(); + led_puts("U1"); + proxstream2_clk_init(); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/boards.c b/arch/arm/mach-uniphier/boards.c index fba8859..812c58f 100644 --- a/arch/arm/mach-uniphier/boards.c +++ b/arch/arm/mach-uniphier/boards.c @@ -71,6 +71,22 @@ static const struct uniphier_board_data ph1_pro5_data = { }; #endif
+#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) +static const struct uniphier_board_data proxstream2_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 + struct uniphier_board_id { const char *compatible; const struct uniphier_board_data *param; @@ -92,6 +108,12 @@ static const struct uniphier_board_id uniphier_boards[] = { #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) { "socionext,ph1-pro5", &ph1_pro5_data, }, #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) + { "socionext,proxstream2", &proxstream2_data, }, +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + { "socionext,ph1-ld6b", &proxstream2_data, }, +#endif };
const struct uniphier_board_data *uniphier_get_board_param(const void *fdt) diff --git a/arch/arm/mach-uniphier/boot-mode/Makefile b/arch/arm/mach-uniphier/boot-mode/Makefile index 1d2f8b3..30c8874 100644 --- a/arch/arm/mach-uniphier/boot-mode/Makefile +++ b/arch/arm/mach-uniphier/boot-mode/Makefile @@ -5,3 +5,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += boot-mode-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += boot-mode-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += boot-mode-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += boot-mode-ph1-pro5.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += boot-mode-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += boot-mode-proxstream2.o diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode-proxstream2.c b/arch/arm/mach-uniphier/boot-mode/boot-mode-proxstream2.c new file mode 100644 index 0000000..10a47c6 --- /dev/null +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode-proxstream2.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/io.h> +#include <mach/boot-device.h> +#include <mach/init.h> +#include <mach/sbc-regs.h> +#include <mach/sg-regs.h> + +static struct boot_device_info boot_device_table[] = { + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 256KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 512KB, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 4)"}, + {BOOT_DEVICE_MMC1, "eMMC Boot (1.8V)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI, Addr 5)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI, Addr 4)"}, + {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI, Addr 4)"}, + {BOOT_DEVICE_SPI, "SPI 3Byte CS0"}, + {BOOT_DEVICE_SPI, "SPI 4Byte CS0"}, + {BOOT_DEVICE_SPI, "SPI 3Byte CS1"}, + {BOOT_DEVICE_SPI, "SPI 4Byte CS1"}, + {BOOT_DEVICE_SPI, "SPI 4Byte CS0"}, + {BOOT_DEVICE_SPI, "SPI 3Byte CS0"}, + {BOOT_DEVICE_NONE, "Reserved"}, +}; + +int get_boot_mode_sel(void) +{ + return (readl(SG_PINMON0) >> 1) & 0x1f; +} + +u32 proxstream2_boot_device(void) +{ + int boot_mode; + + boot_mode = get_boot_mode_sel(); + + return boot_device_table[boot_mode].type; +} + +void proxstream2_boot_mode_show(void) +{ + int mode_sel, i; + + mode_sel = get_boot_mode_sel(); + + puts("Boot Mode Pin:\n"); + + for (i = 0; i < ARRAY_SIZE(boot_device_table); i++) + printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i, + boot_device_table[i].info); +} diff --git a/arch/arm/mach-uniphier/boot-mode/boot-mode.c b/arch/arm/mach-uniphier/boot-mode/boot-mode.c index 60329eb..c6cafa7 100644 --- a/arch/arm/mach-uniphier/boot-mode/boot-mode.c +++ b/arch/arm/mach-uniphier/boot-mode/boot-mode.c @@ -33,6 +33,12 @@ u32 spl_boot_device(void) case SOC_UNIPHIER_PH1_PRO5: return ph1_pro5_boot_device(); #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + case SOC_UNIPHIER_PROXSTREAM2: + case SOC_UNIPHIER_PH1_LD6B: + return proxstream2_boot_device(); +#endif default: return BOOT_DEVICE_NONE; } diff --git a/arch/arm/mach-uniphier/clk/Makefile b/arch/arm/mach-uniphier/clk/Makefile index 873c4f7..4f397b9 100644 --- a/arch/arm/mach-uniphier/clk/Makefile +++ b/arch/arm/mach-uniphier/clk/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += clk-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += clk-ph1-pro5.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += clk-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += clk-proxstream2.o diff --git a/arch/arm/mach-uniphier/clk/clk-proxstream2.c b/arch/arm/mach-uniphier/clk/clk-proxstream2.c new file mode 100644 index 0000000..b494021 --- /dev/null +++ b/arch/arm/mach-uniphier/clk/clk-proxstream2.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sc-regs.h> + +void proxstream2_clk_init(void) +{ + u32 tmp; + + /* deassert reset */ + tmp = readl(SC_RSTCTRL); +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp |= SC_RSTCTRL_NRST_USB3B0 | SC_RSTCTRL_NRST_GIO; +#endif +#ifdef CONFIG_UNIPHIER_ETH + tmp |= SC_RSTCTRL_NRST_ETHER; +#endif +#ifdef CONFIG_NAND_DENALI + tmp |= SC_RSTCTRL_NRST_NAND; +#endif + writel(tmp, SC_RSTCTRL); + readl(SC_RSTCTRL); /* dummy read */ + +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp = readl(SC_RSTCTRL2); + tmp |= SC_RSTCTRL2_NRST_USB3B1; + writel(tmp, SC_RSTCTRL2); + readl(SC_RSTCTRL2); /* dummy read */ +#endif + + /* privide clocks */ + tmp = readl(SC_CLKCTRL); +#ifdef CONFIG_USB_XHCI_UNIPHIER + tmp |= SC_CLKCTRL_CEN_USB31 | SC_CLKCTRL_CEN_USB30 | + SC_CLKCTRL_CEN_GIO; +#endif +#ifdef CONFIG_UNIPHIER_ETH + tmp |= SC_CLKCTRL_CEN_ETHER; +#endif +#ifdef CONFIG_NAND_DENALI + tmp |= SC_CLKCTRL_CEN_NAND; +#endif + writel(tmp, SC_CLKCTRL); + readl(SC_CLKCTRL); /* dummy read */ +} diff --git a/arch/arm/mach-uniphier/cmd_pinmon.c b/arch/arm/mach-uniphier/cmd_pinmon.c index 58c53bf..b15ee9d 100644 --- a/arch/arm/mach-uniphier/cmd_pinmon.c +++ b/arch/arm/mach-uniphier/cmd_pinmon.c @@ -33,6 +33,13 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ph1_pro5_boot_mode_show(); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + case SOC_UNIPHIER_PROXSTREAM2: + case SOC_UNIPHIER_PH1_LD6B: + proxstream2_boot_mode_show(); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/debug_ll.S b/arch/arm/mach-uniphier/debug_ll.S index 056f77e..d8c9fe4 100644 --- a/arch/arm/mach-uniphier/debug_ll.S +++ b/arch/arm/mach-uniphier/debug_ll.S @@ -125,6 +125,55 @@ ph1_sld8_end: b init_uart ph1_pro5_end: #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) +#define PROXSTREAM2_UART_CLK 88900000 + cmp r1, #0x2E + bne proxstream2_end + + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0] + + sg_set_pinsel 217, 8, 8, 4, r0, r1 @ TXD0 -> TXD0 + sg_set_pinsel 115, 8, 8, 4, r0, r1 @ TXD1 -> TXD1 + sg_set_pinsel 113, 8, 8, 4, r0, r1 @ TXD2 -> TXD2 + sg_set_pinsel 219, 8, 8, 4, r0, r1 @ TXD3 -> TXD3 + + ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + ldr r3, =DIV_ROUND(PROXSTREAM2_UART_CLK, 16 * BAUDRATE) + + b init_uart +proxstream2_end: +#endif +#if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) +#define PH1_LD6B_UART_CLK 88900000 + cmp r1, #0x2F + bne ph1_ld6b_end + + ldr r0, =SG_IECTRL + ldr r1, [r0] + orr r1, r1, #1 + str r1, [r0] + + sg_set_pinsel 135, 3, 8, 4, r0, r1 @ PORT10 -> TXD0 + sg_set_pinsel 115, 0, 8, 4, r0, r1 @ TXD1 -> TXD1 + sg_set_pinsel 113, 2, 8, 4, r0, r1 @ SBO0 -> TXD2 + + ldr r0, =SC_CLKCTRL + ldr r1, [r0] + orr r1, r1, #SC_CLKCTRL_CEN_PERI + str r1, [r0] + + ldr r3, =DIV_ROUND(PH1_LD6B_UART_CLK, 16 * BAUDRATE) + + b init_uart +ph1_ld6b_end: +#endif
init_uart: addruart r0, r1, r2 diff --git a/arch/arm/mach-uniphier/early-clk/Makefile b/arch/arm/mach-uniphier/early-clk/Makefile index 939795c..393ea96 100644 --- a/arch/arm/mach-uniphier/early-clk/Makefile +++ b/arch/arm/mach-uniphier/early-clk/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += early-clk-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += early-clk-ph1-pro5.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += early-clk-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += early-clk-proxstream2.o diff --git a/arch/arm/mach-uniphier/early-clk/early-clk-proxstream2.c b/arch/arm/mach-uniphier/early-clk/early-clk-proxstream2.c new file mode 100644 index 0000000..c303f16 --- /dev/null +++ b/arch/arm/mach-uniphier/early-clk/early-clk-proxstream2.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sc-regs.h> + +int proxstream2_early_clk_init(const struct uniphier_board_data *bd) +{ + u32 tmp; + + /* deassert reset */ + if (spl_boot_device() != BOOT_DEVICE_NAND) { + tmp = readl(SC_RSTCTRL); + tmp &= ~SC_RSTCTRL_NRST_NAND; + writel(tmp, SC_RSTCTRL); + }; + + tmp = readl(SC_RSTCTRL4); + tmp |= SC_RSTCTRL4_NRST_UMCSB | SC_RSTCTRL4_NRST_UMCA2 | + SC_RSTCTRL4_NRST_UMCA1 | SC_RSTCTRL4_NRST_UMCA0 | + SC_RSTCTRL4_NRST_UMC32 | SC_RSTCTRL4_NRST_UMC31 | + SC_RSTCTRL4_NRST_UMC30; + writel(tmp, SC_RSTCTRL4); + readl(SC_RSTCTRL4); /* dummy read */ + + /* privide clocks */ + tmp = readl(SC_CLKCTRL); + tmp |= SC_CLKCTRL_CEN_SBC | SC_CLKCTRL_CEN_PERI; + writel(tmp, SC_CLKCTRL); + + tmp = readl(SC_CLKCTRL4); + tmp |= SC_CLKCTRL4_CEN_UMCSB | SC_CLKCTRL4_CEN_UMC2 | + SC_CLKCTRL4_CEN_UMC1 | SC_CLKCTRL4_CEN_UMC0; + writel(tmp, SC_CLKCTRL4); + readl(SC_CLKCTRL4); /* dummy read */ + + return 0; +} diff --git a/arch/arm/mach-uniphier/include/mach/boot-device.h b/arch/arm/mach-uniphier/include/mach/boot-device.h index 3cbe773..2ab5a53 100644 --- a/arch/arm/mach-uniphier/include/mach/boot-device.h +++ b/arch/arm/mach-uniphier/include/mach/boot-device.h @@ -15,9 +15,11 @@ struct boot_device_info { u32 ph1_sld3_boot_device(void); u32 ph1_ld4_boot_device(void); u32 ph1_pro5_boot_device(void); +u32 proxstream2_boot_device(void);
void ph1_sld3_boot_mode_show(void); void ph1_ld4_boot_mode_show(void); void ph1_pro5_boot_mode_show(void); +void proxstream2_boot_mode_show(void);
#endif /* _ASM_BOOT_DEVICE_H_ */ diff --git a/arch/arm/mach-uniphier/include/mach/init.h b/arch/arm/mach-uniphier/include/mach/init.h index 914182d..5108edd 100644 --- a/arch/arm/mach-uniphier/include/mach/init.h +++ b/arch/arm/mach-uniphier/include/mach/init.h @@ -27,11 +27,13 @@ int ph1_ld4_init(const struct uniphier_board_data *bd); int ph1_pro4_init(const struct uniphier_board_data *bd); int ph1_sld8_init(const struct uniphier_board_data *bd); int ph1_pro5_init(const struct uniphier_board_data *bd); +int proxstream2_init(const struct uniphier_board_data *bd);
#if defined(CONFIG_MICRO_SUPPORT_CARD) int ph1_sld3_sbc_init(const struct uniphier_board_data *bd); int ph1_ld4_sbc_init(const struct uniphier_board_data *bd); int ph1_pro4_sbc_init(const struct uniphier_board_data *bd); +int proxstream2_sbc_init(const struct uniphier_board_data *bd); #else static inline int ph1_sld3_sbc_init(const struct uniphier_board_data *bd) { @@ -47,6 +49,11 @@ static inline int ph1_pro4_sbc_init(const struct uniphier_board_data *bd) { return 0; } + +static inline int proxstream2_sbc_init(const struct uniphier_board_data *bd) +{ + return 0; +} #endif
int ph1_sld3_bcu_init(const struct uniphier_board_data *bd); @@ -54,6 +61,7 @@ int ph1_ld4_bcu_init(const struct uniphier_board_data *bd);
int memconf_init(const struct uniphier_board_data *bd); int ph1_sld3_memconf_init(const struct uniphier_board_data *bd); +int proxstream2_memconf_init(const struct uniphier_board_data *bd);
int ph1_sld3_pll_init(const struct uniphier_board_data *bd); int ph1_ld4_pll_init(const struct uniphier_board_data *bd); @@ -65,6 +73,7 @@ int ph1_ld4_enable_dpll_ssc(const struct uniphier_board_data *bd);
int ph1_ld4_early_clk_init(const struct uniphier_board_data *bd); int ph1_pro5_early_clk_init(const struct uniphier_board_data *bd); +int proxstream2_early_clk_init(const struct uniphier_board_data *bd);
int ph1_sld3_early_pin_init(const struct uniphier_board_data *bd);
@@ -77,10 +86,13 @@ void ph1_ld4_pin_init(void); void ph1_pro4_pin_init(void); void ph1_sld8_pin_init(void); void ph1_pro5_pin_init(void); +void proxstream2_pin_init(void); +void ph1_ld6b_pin_init(void);
void ph1_ld4_clk_init(void); void ph1_pro4_clk_init(void); void ph1_pro5_clk_init(void); +void proxstream2_clk_init(void);
#define pr_err(fmt, args...) printf(fmt, ##args)
diff --git a/arch/arm/mach-uniphier/include/mach/sc-regs.h b/arch/arm/mach-uniphier/include/mach/sc-regs.h index 903e405..474b82d 100644 --- a/arch/arm/mach-uniphier/include/mach/sc-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sc-regs.h @@ -64,6 +64,7 @@ #define SC_RSTCTRL4_NRST_UMCA2 (0x1 << 10) /* UMC ch2 standby */ #define SC_RSTCTRL4_NRST_UMCA1 (0x1 << 9) /* UMC ch1 standby */ #define SC_RSTCTRL4_NRST_UMCA0 (0x1 << 8) /* UMC ch0 standby */ +#define SC_RSTCTRL4_NRST_UMC32 (0x1 << 6) /* UMC ch2 */ #define SC_RSTCTRL4_NRST_UMC31 (0x1 << 5) /* UMC ch1 */ #define SC_RSTCTRL4_NRST_UMC30 (0x1 << 4) /* UMC ch0 */
@@ -83,6 +84,7 @@ /* Pro5 or newer */ #define SC_CLKCTRL4 (SC_BASE_ADDR | 0x210c) #define SC_CLKCTRL4_CEN_UMCSB (0x1 << 12) /* UMC system bus */ +#define SC_CLKCTRL4_CEN_UMC2 (0x1 << 2) /* UMC ch2 */ #define SC_CLKCTRL4_CEN_UMC1 (0x1 << 1) /* UMC ch1 */ #define SC_CLKCTRL4_CEN_UMC0 (0x1 << 0) /* UMC ch0 */
diff --git a/arch/arm/mach-uniphier/include/mach/sg-regs.h b/arch/arm/mach-uniphier/include/mach/sg-regs.h index 168b35e..678d437 100644 --- a/arch/arm/mach-uniphier/include/mach/sg-regs.h +++ b/arch/arm/mach-uniphier/include/mach/sg-regs.h @@ -53,6 +53,8 @@ #define SG_MEMCONF_CH2_NUM_MASK (0x1 << 24) #define SG_MEMCONF_CH2_NUM_1 (0x1 << 24) #define SG_MEMCONF_CH2_NUM_2 (0x0 << 24) +/* PH1-LD6b, ProXstream2 only */ +#define SG_MEMCONF_CH2_DISABLE (0x1 << 21)
#define SG_MEMCONF_SPARSEMEM (0x1 << 4)
diff --git a/arch/arm/mach-uniphier/init/Makefile b/arch/arm/mach-uniphier/init/Makefile index 1524a8d..98833b5 100644 --- a/arch/arm/mach-uniphier/init/Makefile +++ b/arch/arm/mach-uniphier/init/Makefile @@ -5,3 +5,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += init-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += init-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += init-ph1-sld8.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += init-ph1-pro5.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += init-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += init-proxstream2.o diff --git a/arch/arm/mach-uniphier/init/init-proxstream2.c b/arch/arm/mach-uniphier/init/init-proxstream2.c new file mode 100644 index 0000000..8d03b8f --- /dev/null +++ b/arch/arm/mach-uniphier/init/init-proxstream2.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <linux/compiler.h> +#include <mach/init.h> +#include <mach/micro-support-card.h> + +int proxstream2_init(const struct uniphier_board_data *bd) +{ + proxstream2_sbc_init(bd); + + support_card_reset(); + + support_card_init(); + + led_puts("L0"); + + memconf_init(bd); + proxstream2_memconf_init(bd); + + led_puts("L1"); + + proxstream2_early_clk_init(bd); + + led_puts("L2"); + + led_puts("L3"); + +#ifdef CONFIG_SPL_SERIAL_SUPPORT + preloader_console_init(); +#endif + + led_puts("L4"); + + return 0; +} diff --git a/arch/arm/mach-uniphier/init/init.c b/arch/arm/mach-uniphier/init/init.c index 2649e6c..bbfc8e5 100644 --- a/arch/arm/mach-uniphier/init/init.c +++ b/arch/arm/mach-uniphier/init/init.c @@ -45,6 +45,13 @@ void spl_board_init(void) ph1_pro5_init(param); break; #endif +#if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ + defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) + case SOC_UNIPHIER_PROXSTREAM2: + case SOC_UNIPHIER_PH1_LD6B: + proxstream2_init(param); + break; +#endif default: break; } diff --git a/arch/arm/mach-uniphier/memconf/Makefile b/arch/arm/mach-uniphier/memconf/Makefile index 1a718f3..42057a2 100644 --- a/arch/arm/mach-uniphier/memconf/Makefile +++ b/arch/arm/mach-uniphier/memconf/Makefile @@ -1,2 +1,4 @@ obj-y += memconf.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD3) += memconf-ph1-sld3.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += memconf-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += memconf-proxstream2.o diff --git a/arch/arm/mach-uniphier/memconf/memconf-proxstream2.c b/arch/arm/mach-uniphier/memconf/memconf-proxstream2.c new file mode 100644 index 0000000..d7bf0d4 --- /dev/null +++ b/arch/arm/mach-uniphier/memconf/memconf-proxstream2.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/sizes.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +int proxstream2_memconf_init(const struct uniphier_board_data *bd) +{ + u32 tmp; + unsigned long size_per_word; + + tmp = readl(SG_MEMCONF); + + tmp &= ~(SG_MEMCONF_CH2_SZ_MASK | SG_MEMCONF_CH2_NUM_MASK); + + switch (bd->dram_ch2_width) { + case 16: + tmp |= SG_MEMCONF_CH2_NUM_1; + size_per_word = bd->dram_ch2_size; + break; + case 32: + tmp |= SG_MEMCONF_CH2_NUM_2; + size_per_word = bd->dram_ch2_size >> 1; + break; + default: + pr_err("error: unsupported DRAM Ch2 width\n"); + return -EINVAL; + } + + /* Set DDR size */ + switch (size_per_word) { + case SZ_64M: + tmp |= SG_MEMCONF_CH2_SZ_64M; + break; + case SZ_128M: + tmp |= SG_MEMCONF_CH2_SZ_128M; + break; + case SZ_256M: + tmp |= SG_MEMCONF_CH2_SZ_256M; + break; + case SZ_512M: + tmp |= SG_MEMCONF_CH2_SZ_512M; + break; + default: + pr_err("error: unsupported DRAM Ch2 size\n"); + return -EINVAL; + } + + if (size_per_word) + tmp &= ~SG_MEMCONF_CH2_DISABLE; + else + tmp |= SG_MEMCONF_CH2_DISABLE; + + writel(tmp, SG_MEMCONF); + + return 0; +} diff --git a/arch/arm/mach-uniphier/pinctrl/Makefile b/arch/arm/mach-uniphier/pinctrl/Makefile index a785245..8517595 100644 --- a/arch/arm/mach-uniphier/pinctrl/Makefile +++ b/arch/arm/mach-uniphier/pinctrl/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += pinctrl-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += pinctrl-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += pinctrl-ph1-sld8.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += pinctrl-ph1-pro5.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += pinctrl-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += pinctrl-ph1-ld6b.o diff --git a/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c new file mode 100644 index 0000000..4f950d3 --- /dev/null +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-ph1-ld6b.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +void ph1_ld6b_pin_init(void) +{ + /* Comment format: PAD Name -> Function Name */ + +#ifdef CONFIG_NAND_DENALI + sg_set_pinsel(30, 0, 8, 4); /* XNFRE -> XNFRE */ + sg_set_pinsel(31, 0, 8, 4); /* XNFWE -> XNFWE */ + sg_set_pinsel(32, 0, 8, 4); /* NFALE -> NFALE */ + sg_set_pinsel(33, 0, 8, 4); /* NFCLE -> NFCLE */ + sg_set_pinsel(34, 0, 8, 4); /* XNFWP -> XNFWP */ + sg_set_pinsel(35, 0, 8, 4); /* XNFCE0 -> XNFCE0 */ + sg_set_pinsel(36, 0, 8, 4); /* NRYBY0 -> NRYBY0 */ + sg_set_pinsel(37, 0, 8, 4); /* XNFCE1 -> NRYBY1 */ + sg_set_pinsel(38, 0, 8, 4); /* NRYBY1 -> XNFCE1 */ + sg_set_pinsel(39, 0, 8, 4); /* NFD0 -> NFD0 */ + sg_set_pinsel(40, 0, 8, 4); /* NFD1 -> NFD1 */ + sg_set_pinsel(41, 0, 8, 4); /* NFD2 -> NFD2 */ + sg_set_pinsel(42, 0, 8, 4); /* NFD3 -> NFD3 */ + sg_set_pinsel(43, 0, 8, 4); /* NFD4 -> NFD4 */ + sg_set_pinsel(44, 0, 8, 4); /* NFD5 -> NFD5 */ + sg_set_pinsel(45, 0, 8, 4); /* NFD6 -> NFD6 */ + sg_set_pinsel(46, 0, 8, 4); /* NFD7 -> NFD7 */ +#endif + +#ifdef CONFIG_USB_XHCI_UNIPHIER + sg_set_pinsel(56, 0, 8, 4); /* USB0VBUS -> USB0VBUS */ + sg_set_pinsel(57, 0, 8, 4); /* USB0OD -> USB0OD */ + sg_set_pinsel(58, 0, 8, 4); /* USB1VBUS -> USB1VBUS */ + sg_set_pinsel(59, 0, 8, 4); /* USB1OD -> USB1OD */ + sg_set_pinsel(60, 0, 8, 4); /* USB2VBUS -> USB2VBUS */ + sg_set_pinsel(61, 0, 8, 4); /* USB2OD -> USB2OD */ + sg_set_pinsel(62, 0, 8, 4); /* USB3VBUS -> USB3VBUS */ + sg_set_pinsel(63, 0, 8, 4); /* USB3OD -> USB3OD */ +#endif +} diff --git a/arch/arm/mach-uniphier/pinctrl/pinctrl-proxstream2.c b/arch/arm/mach-uniphier/pinctrl/pinctrl-proxstream2.c new file mode 100644 index 0000000..96abd02 --- /dev/null +++ b/arch/arm/mach-uniphier/pinctrl/pinctrl-proxstream2.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sg-regs.h> + +void proxstream2_pin_init(void) +{ + /* Comment format: PAD Name -> Function Name */ + +#ifdef CONFIG_NAND_DENALI + sg_set_pinsel(30, 8, 8, 4); /* XNFRE -> XNFRE */ + sg_set_pinsel(31, 8, 8, 4); /* XNFWE -> XNFWE */ + sg_set_pinsel(32, 8, 8, 4); /* NFALE -> NFALE */ + sg_set_pinsel(33, 8, 8, 4); /* NFCLE -> NFCLE */ + sg_set_pinsel(34, 8, 8, 4); /* XNFWP -> XNFWP */ + sg_set_pinsel(35, 8, 8, 4); /* XNFCE0 -> XNFCE0 */ + sg_set_pinsel(36, 8, 8, 4); /* NRYBY0 -> NRYBY0 */ + sg_set_pinsel(37, 8, 8, 4); /* XNFCE1 -> NRYBY1 */ + sg_set_pinsel(38, 8, 8, 4); /* NRYBY1 -> XNFCE1 */ + sg_set_pinsel(39, 8, 8, 4); /* NFD0 -> NFD0 */ + sg_set_pinsel(40, 8, 8, 4); /* NFD1 -> NFD1 */ + sg_set_pinsel(41, 8, 8, 4); /* NFD2 -> NFD2 */ + sg_set_pinsel(42, 8, 8, 4); /* NFD3 -> NFD3 */ + sg_set_pinsel(43, 8, 8, 4); /* NFD4 -> NFD4 */ + sg_set_pinsel(44, 8, 8, 4); /* NFD5 -> NFD5 */ + sg_set_pinsel(45, 8, 8, 4); /* NFD6 -> NFD6 */ + sg_set_pinsel(46, 8, 8, 4); /* NFD7 -> NFD7 */ +#endif + +#ifdef CONFIG_USB_XHCI_UNIPHIER + sg_set_pinsel(56, 8, 8, 4); /* USB0VBUS -> USB0VBUS */ + sg_set_pinsel(57, 8, 8, 4); /* USB0OD -> USB0OD */ + sg_set_pinsel(58, 8, 8, 4); /* USB1VBUS -> USB1VBUS */ + sg_set_pinsel(59, 8, 8, 4); /* USB1OD -> USB1OD */ + sg_set_pinsel(60, 8, 8, 4); /* USB2VBUS -> USB2VBUS */ + sg_set_pinsel(61, 8, 8, 4); /* USB2OD -> USB2OD */ + sg_set_pinsel(62, 8, 8, 4); /* USB3VBUS -> USB3VBUS */ + sg_set_pinsel(63, 8, 8, 4); /* USB3OD -> USB3OD */ +#endif +} diff --git a/arch/arm/mach-uniphier/sbc/Makefile b/arch/arm/mach-uniphier/sbc/Makefile index 2c5fd1a..db622d2 100644 --- a/arch/arm/mach-uniphier/sbc/Makefile +++ b/arch/arm/mach-uniphier/sbc/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD4) += sbc-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += sbc-ph1-pro4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_SLD8) += sbc-ph1-ld4.o obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += sbc-ph1-pro4.o +obj-$(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) += sbc-proxstream2.o +obj-$(CONFIG_ARCH_UNIPHIER_PH1_LD6B) += sbc-proxstream2.o diff --git a/arch/arm/mach-uniphier/sbc/sbc-proxstream2.c b/arch/arm/mach-uniphier/sbc/sbc-proxstream2.c new file mode 100644 index 0000000..9c3aeb7 --- /dev/null +++ b/arch/arm/mach-uniphier/sbc/sbc-proxstream2.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <linux/io.h> +#include <mach/init.h> +#include <mach/sbc-regs.h> +#include <mach/sg-regs.h> + +int proxstream2_sbc_init(const struct uniphier_board_data *bd) +{ + /* necessary for ROM boot ?? */ + /* system bus output enable */ + writel(0x17, PC0CTRL); + + /* + * Only CS1 is connected to support card. + * BKSZ[1:0] should be set to "01". + */ + writel(SBCTRL0_SAVEPIN_PERI_VALUE, SBCTRL10); + writel(SBCTRL1_SAVEPIN_PERI_VALUE, SBCTRL11); + writel(SBCTRL2_SAVEPIN_PERI_VALUE, SBCTRL12); + writel(SBCTRL4_SAVEPIN_PERI_VALUE, SBCTRL14); + + if (boot_is_swapped()) { + /* + * Boot Swap On: boot from external NOR/SRAM + * 0x42000000-0x43ffffff is a mirror of 0x40000000-0x41ffffff. + * + * 0x40000000-0x41efffff, 0x42000000-0x43efffff: memory bank + * 0x41f00000-0x41ffffff, 0x43f00000-0x43ffffff: peripherals + */ + writel(0x0000bc01, SBBASE0); + } else { + /* + * Boot Swap Off: boot from mask ROM + * 0x40000000-0x41ffffff: mask ROM + * 0x42000000-0x43efffff: memory bank (31MB) + * 0x43f00000-0x43ffffff: peripherals (1MB) + */ + writel(0x0000be01, SBBASE0); /* dummy */ + writel(0x0200be01, SBBASE1); + } + + return 0; +} diff --git a/configs/ph1_ld6b_defconfig b/configs/ph1_ld6b_defconfig new file mode 100644 index 0000000..68f6ba8 --- /dev/null +++ b/configs/ph1_ld6b_defconfig @@ -0,0 +1,30 @@ +CONFIG_ARM=y +CONFIG_ARCH_UNIPHIER=y +CONFIG_SYS_MALLOC_F_LEN=0x2000 +CONFIG_ARCH_UNIPHIER_PH1_LD6B=y +CONFIG_MICRO_SUPPORT_CARD=y +CONFIG_SYS_TEXT_BASE=0x84000000 +CONFIG_DEFAULT_DEVICE_TREE="uniphier-ph1-ld6b-ref" +CONFIG_HUSH_PARSER=y +# CONFIG_CMD_XIMG is not set +# CONFIG_CMD_ENV_EXISTS is not set +CONFIG_CMD_NAND=y +CONFIG_CMD_I2C=y +CONFIG_CMD_USB=y +# CONFIG_CMD_FPGA is not set +CONFIG_CMD_TFTPPUT=y +CONFIG_CMD_PING=y +CONFIG_CMD_TIME=y +# CONFIG_CMD_MISC is not set +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_SPL_SIMPLE_BUS=y +CONFIG_NAND_DENALI=y +CONFIG_SYS_NAND_DENALI_64BIT=y +CONFIG_NAND_DENALI_SPARE_AREA_SKIP_BYTES=8 +CONFIG_SPL_NAND_DENALI=y +CONFIG_UNIPHIER_SERIAL=y +CONFIG_PINCTRL=y +CONFIG_SPL_PINCTRL=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_STORAGE=y diff --git a/doc/README.uniphier b/doc/README.uniphier index 6792327..6ba0320 100644 --- a/doc/README.uniphier +++ b/doc/README.uniphier @@ -48,6 +48,14 @@ PH1-Pro5: $ make ph1_pro5_defconfig $ make CROSS_COMPILE=arm-linux-gnueabi-
+ProXstream2: + $ make pxs2_defconfig + $ make CROSS_COMPILE=arm-linux-gnueabi- + +PH1-LD6b: + $ make ph1_ld6b_defconfig + $ make CROSS_COMPILE=arm-linux-gnueabi- + You may wish to change the "CROSS_COMPILE=arm-linux-gnueabi-" to use your favorite compiler.

Currently, the USB boot mode is supported by external loader and U-boot proper image is put on the section 0. This commit allows access there.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/init_page_table.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-uniphier/init_page_table.S b/arch/arm/mach-uniphier/init_page_table.S index ac2959a..44a104f 100644 --- a/arch/arm/mach-uniphier/init_page_table.S +++ b/arch/arm/mach-uniphier/init_page_table.S @@ -23,7 +23,7 @@ ENTRY(init_page_table) section = 0 .rept NR_SECTIONS - .if section == TEXT_SECTION || section == STACK_SECTION + .if section == 0 || section == 1 || section == STACK_SECTION attr = NORMAL .else attr = DEVICE

2015-09-22 0:27 GMT+09:00 Masahiro Yamada yamada.masahiro@socionext.com:
Masahiro Yamada (14): ARM: uniphier: remove unused header file ARM: uniphier: remove useless wrapper functions ARM: uniphier: refactor LED function ARM: uniphier: move CONFIG_SUPPORT_CARD_* macros to local file ARM: uniphier: allow to disable CONFIG_MICRO_SUPPORT_CARD ARM: uniphier: rename CONFIG_MACH_* to CONFIG_ARCH_UNIPHIER_* ARM: uniphier: delete unneeded input enable for low-level debug ARM: uniphier: fix glitch signal problem for low-level debug ARM: uniphier: unify low-level debug init code ARM: uniphier: remove kernel parameter settings from environment ARM: uniphier: allow to enable multiple SoCs ARM: uniphier: add PH1-Pro5 support ARM: uniphier: add ProXstream2 and PH1-LD6b support ARM: uniphier: fix init page table for ProXstream2/PH1-LD6b USB boot
Series, applied to u-boot-uniphier/master.
participants (1)
-
Masahiro Yamada