ARM: uniphier: add PH1-Pro5 support
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>
This commit is contained in:
parent
323d1f9d5b
commit
28f40d4a4d
|
@ -45,6 +45,7 @@ dtb-$(CONFIG_ARCH_UNIPHIER) += \
|
||||||
uniphier-ph1-ld4-ref.dtb \
|
uniphier-ph1-ld4-ref.dtb \
|
||||||
uniphier-ph1-ld6b-ref.dtb \
|
uniphier-ph1-ld6b-ref.dtb \
|
||||||
uniphier-ph1-pro4-ref.dtb \
|
uniphier-ph1-pro4-ref.dtb \
|
||||||
|
uniphier-ph1-pro5-4kbox.dtb \
|
||||||
uniphier-ph1-sld3-ref.dtb \
|
uniphier-ph1-sld3-ref.dtb \
|
||||||
uniphier-ph1-sld8-ref.dtb
|
uniphier-ph1-sld8-ref.dtb
|
||||||
dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \
|
dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb \
|
||||||
|
|
|
@ -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;
|
||||||
|
};
|
|
@ -33,6 +33,15 @@ config ARCH_UNIPHIER_PH1_SLD8
|
||||||
help
|
help
|
||||||
This enables support for UniPhier PH1-sLD8 SoC.
|
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
|
config MICRO_SUPPORT_CARD
|
||||||
bool "Use Micro Support Card"
|
bool "Use Micro Support Card"
|
||||||
help
|
help
|
||||||
|
|
|
@ -40,6 +40,13 @@ int board_early_init_f(void)
|
||||||
led_puts("U1");
|
led_puts("U1");
|
||||||
ph1_ld4_clk_init();
|
ph1_ld4_clk_init();
|
||||||
break;
|
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
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -59,6 +59,18 @@ static const struct uniphier_board_data ph1_sld8_data = {
|
||||||
};
|
};
|
||||||
#endif
|
#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 {
|
struct uniphier_board_id {
|
||||||
const char *compatible;
|
const char *compatible;
|
||||||
const struct uniphier_board_data *param;
|
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)
|
#if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
|
||||||
{ "socionext,ph1-sld8", &ph1_sld8_data, },
|
{ "socionext,ph1-sld8", &ph1_sld8_data, },
|
||||||
#endif
|
#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)
|
const struct uniphier_board_data *uniphier_get_board_param(const void *fdt)
|
||||||
|
|
|
@ -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_LD4) += boot-mode-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += 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_SLD8) += boot-mode-ph1-ld4.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += boot-mode-ph1-pro5.o
|
||||||
|
|
|
@ -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; i < ARRAY_SIZE(boot_device_table); i++)
|
||||||
|
printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i,
|
||||||
|
boot_device_table[i].info);
|
||||||
|
}
|
|
@ -28,6 +28,10 @@ u32 spl_boot_device(void)
|
||||||
case SOC_UNIPHIER_PH1_PRO4:
|
case SOC_UNIPHIER_PH1_PRO4:
|
||||||
case SOC_UNIPHIER_PH1_SLD8:
|
case SOC_UNIPHIER_PH1_SLD8:
|
||||||
return ph1_ld4_boot_device();
|
return ph1_ld4_boot_device();
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
|
||||||
|
case SOC_UNIPHIER_PH1_PRO5:
|
||||||
|
return ph1_pro5_boot_device();
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return BOOT_DEVICE_NONE;
|
return BOOT_DEVICE_NONE;
|
||||||
|
|
|
@ -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_LD4) += clk-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += clk-ph1-pro4.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_SLD8) += clk-ph1-ld4.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += clk-ph1-pro5.o
|
||||||
|
|
|
@ -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 */
|
||||||
|
}
|
|
@ -27,6 +27,11 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
case SOC_UNIPHIER_PH1_SLD8:
|
case SOC_UNIPHIER_PH1_SLD8:
|
||||||
ph1_ld4_boot_mode_show();
|
ph1_ld4_boot_mode_show();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
|
||||||
|
case SOC_UNIPHIER_PH1_PRO5:
|
||||||
|
ph1_pro5_boot_mode_show();
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -101,6 +101,30 @@ ph1_pro4_end:
|
||||||
b init_uart
|
b init_uart
|
||||||
ph1_sld8_end:
|
ph1_sld8_end:
|
||||||
#endif
|
#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:
|
init_uart:
|
||||||
addruart r0, r1, r2
|
addruart r0, r1, r2
|
||||||
|
|
|
@ -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_LD4) += early-clk-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += 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_SLD8) += early-clk-ph1-ld4.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += early-clk-ph1-pro5.o
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -14,8 +14,10 @@ struct boot_device_info {
|
||||||
|
|
||||||
u32 ph1_sld3_boot_device(void);
|
u32 ph1_sld3_boot_device(void);
|
||||||
u32 ph1_ld4_boot_device(void);
|
u32 ph1_ld4_boot_device(void);
|
||||||
|
u32 ph1_pro5_boot_device(void);
|
||||||
|
|
||||||
void ph1_sld3_boot_mode_show(void);
|
void ph1_sld3_boot_mode_show(void);
|
||||||
void ph1_ld4_boot_mode_show(void);
|
void ph1_ld4_boot_mode_show(void);
|
||||||
|
void ph1_pro5_boot_mode_show(void);
|
||||||
|
|
||||||
#endif /* _ASM_BOOT_DEVICE_H_ */
|
#endif /* _ASM_BOOT_DEVICE_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_ld4_init(const struct uniphier_board_data *bd);
|
||||||
int ph1_pro4_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_sld8_init(const struct uniphier_board_data *bd);
|
||||||
|
int ph1_pro5_init(const struct uniphier_board_data *bd);
|
||||||
|
|
||||||
#if defined(CONFIG_MICRO_SUPPORT_CARD)
|
#if defined(CONFIG_MICRO_SUPPORT_CARD)
|
||||||
int ph1_sld3_sbc_init(const struct uniphier_board_data *bd);
|
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_enable_dpll_ssc(const struct uniphier_board_data *bd);
|
||||||
|
|
||||||
int ph1_ld4_early_clk_init(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);
|
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_ld4_pin_init(void);
|
||||||
void ph1_pro4_pin_init(void);
|
void ph1_pro4_pin_init(void);
|
||||||
void ph1_sld8_pin_init(void);
|
void ph1_sld8_pin_init(void);
|
||||||
|
void ph1_pro5_pin_init(void);
|
||||||
|
|
||||||
void ph1_ld4_clk_init(void);
|
void ph1_ld4_clk_init(void);
|
||||||
void ph1_pro4_clk_init(void);
|
void ph1_pro4_clk_init(void);
|
||||||
|
void ph1_pro5_clk_init(void);
|
||||||
|
|
||||||
#define pr_err(fmt, args...) printf(fmt, ##args)
|
#define pr_err(fmt, args...) printf(fmt, ##args)
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
#define SC_BASE_ADDR 0x61840000
|
#define SC_BASE_ADDR 0x61840000
|
||||||
#endif
|
#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 (SC_BASE_ADDR | 0x1200)
|
||||||
#define SC_DPLLCTRL_SSC_EN (0x1 << 31)
|
#define SC_DPLLCTRL_SSC_EN (0x1 << 31)
|
||||||
#define SC_DPLLCTRL_FOUTMODE_MASK (0xf << 16)
|
#define SC_DPLLCTRL_FOUTMODE_MASK (0xf << 16)
|
||||||
|
@ -43,6 +47,7 @@
|
||||||
#define SC_RSTCTRL_NRST_ETHER (0x1 << 12)
|
#define SC_RSTCTRL_NRST_ETHER (0x1 << 12)
|
||||||
#define SC_RSTCTRL_NRST_STDMAC (0x1 << 10)
|
#define SC_RSTCTRL_NRST_STDMAC (0x1 << 10)
|
||||||
#define SC_RSTCTRL_NRST_GIO (0x1 << 6)
|
#define SC_RSTCTRL_NRST_GIO (0x1 << 6)
|
||||||
|
/* Pro4 or older */
|
||||||
#define SC_RSTCTRL_NRST_UMC1 (0x1 << 5)
|
#define SC_RSTCTRL_NRST_UMC1 (0x1 << 5)
|
||||||
#define SC_RSTCTRL_NRST_UMC0 (0x1 << 4)
|
#define SC_RSTCTRL_NRST_UMC0 (0x1 << 4)
|
||||||
#define SC_RSTCTRL_NRST_NAND (0x1 << 2)
|
#define SC_RSTCTRL_NRST_NAND (0x1 << 2)
|
||||||
|
@ -53,6 +58,15 @@
|
||||||
|
|
||||||
#define SC_RSTCTRL3 (SC_BASE_ADDR | 0x2008)
|
#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 (SC_BASE_ADDR | 0x2104)
|
||||||
#define SC_CLKCTRL_CEN_USB31 (0x1 << 17) /* USB3 #1 */
|
#define SC_CLKCTRL_CEN_USB31 (0x1 << 17) /* USB3 #1 */
|
||||||
#define SC_CLKCTRL_CEN_USB30 (0x1 << 16) /* USB3 #0 */
|
#define SC_CLKCTRL_CEN_USB30 (0x1 << 16) /* USB3 #0 */
|
||||||
|
@ -60,11 +74,18 @@
|
||||||
#define SC_CLKCTRL_CEN_MIO (0x1 << 11)
|
#define SC_CLKCTRL_CEN_MIO (0x1 << 11)
|
||||||
#define SC_CLKCTRL_CEN_STDMAC (0x1 << 10)
|
#define SC_CLKCTRL_CEN_STDMAC (0x1 << 10)
|
||||||
#define SC_CLKCTRL_CEN_GIO (0x1 << 6)
|
#define SC_CLKCTRL_CEN_GIO (0x1 << 6)
|
||||||
|
/* Pro4 or older */
|
||||||
#define SC_CLKCTRL_CEN_UMC (0x1 << 4)
|
#define SC_CLKCTRL_CEN_UMC (0x1 << 4)
|
||||||
#define SC_CLKCTRL_CEN_NAND (0x1 << 2)
|
#define SC_CLKCTRL_CEN_NAND (0x1 << 2)
|
||||||
#define SC_CLKCTRL_CEN_SBC (0x1 << 1)
|
#define SC_CLKCTRL_CEN_SBC (0x1 << 1)
|
||||||
#define SC_CLKCTRL_CEN_PERI (0x1 << 0)
|
#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 */
|
/* System reset control register */
|
||||||
#define SC_IRQTIMSET (SC_BASE_ADDR | 0x3000)
|
#define SC_IRQTIMSET (SC_BASE_ADDR | 0x3000)
|
||||||
#define SC_SLFRSTSEL (SC_BASE_ADDR | 0x3010)
|
#define SC_SLFRSTSEL (SC_BASE_ADDR | 0x3010)
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
/* Pin Control */
|
/* Pin Control */
|
||||||
#define SG_PINCTRL_BASE (SG_CTRL_BASE | 0x1000)
|
#define SG_PINCTRL_BASE (SG_CTRL_BASE | 0x1000)
|
||||||
|
|
||||||
/* Only for PH1-Pro4 */
|
/* PH1-Pro4, PH1-Pro5 */
|
||||||
#define SG_LOADPINCTRL (SG_CTRL_BASE | 0x1700)
|
#define SG_LOADPINCTRL (SG_CTRL_BASE | 0x1700)
|
||||||
|
|
||||||
/* Input Enable */
|
/* Input Enable */
|
||||||
|
|
|
@ -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_LD4) += init-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += init-ph1-pro4.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_SLD8) += init-ph1-sld8.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += init-ph1-pro5.o
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -39,6 +39,11 @@ void spl_board_init(void)
|
||||||
case SOC_UNIPHIER_PH1_SLD8:
|
case SOC_UNIPHIER_PH1_SLD8:
|
||||||
ph1_sld8_init(param);
|
ph1_sld8_init(param);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
|
||||||
|
case SOC_UNIPHIER_PH1_PRO5:
|
||||||
|
ph1_pro5_init(param);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -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_LD4) += pinctrl-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += pinctrl-ph1-pro4.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_SLD8) += pinctrl-ph1-sld8.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += pinctrl-ph1-pro5.o
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
|
@ -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_LD4) += sbc-ph1-ld4.o
|
||||||
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO4) += sbc-ph1-pro4.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_SLD8) += sbc-ph1-ld4.o
|
||||||
|
obj-$(CONFIG_ARCH_UNIPHIER_PH1_PRO5) += sbc-ph1-pro4.o
|
||||||
|
|
|
@ -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
|
|
@ -44,6 +44,10 @@ PH1-sLD8:
|
||||||
$ make ph1_sld8_defconfig
|
$ make ph1_sld8_defconfig
|
||||||
$ make CROSS_COMPILE=arm-linux-gnueabi-
|
$ 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-"
|
You may wish to change the "CROSS_COMPILE=arm-linux-gnueabi-"
|
||||||
to use your favorite compiler.
|
to use your favorite compiler.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue