aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2015-12-09 11:00:51 +0100
committerStefan Roese <sr@denx.de>2016-01-14 14:08:59 +0100
commitbf0db8b82a0f2e1abcb073fe0b72e6b4ba7c5fe0 (patch)
tree85d0af28b5050433f28552fe5890f7f459d5d012
parent00a457b22e193d866bc14cc6a4f26c93d18479ce (diff)
downloadu-boot-bf0db8b82a0f2e1abcb073fe0b72e6b4ba7c5fe0.zip
u-boot-bf0db8b82a0f2e1abcb073fe0b72e6b4ba7c5fe0.tar.gz
u-boot-bf0db8b82a0f2e1abcb073fe0b72e6b4ba7c5fe0.tar.bz2
arm: mvebu: Add support for MV78260
This patch adds support for the dual core Armada XP variant, the MV78260. It has some minor differences to the 4-core MV78460, e.g. only 12 serdes lanes. Signed-off-by: Stefan Roese <sr@denx.de> Cc: Luka Perkov <luka.perkov@sartura.hr> Cc: Phil Sutter <phil@nwl.cc>
-rw-r--r--arch/arm/mach-mvebu/cpu.c5
-rw-r--r--arch/arm/mach-mvebu/include/mach/soc.h1
-rw-r--r--arch/arm/mach-mvebu/serdes/axp/high_speed_env_lib.c28
3 files changed, 29 insertions, 5 deletions
diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c
index 570966a..1095f69 100644
--- a/arch/arm/mach-mvebu/cpu.c
+++ b/arch/arm/mach-mvebu/cpu.c
@@ -50,7 +50,7 @@ int mvebu_soc_family(void)
{
u16 devid = (readl(MVEBU_REG_PCIE_DEVID) >> 16) & 0xffff;
- if (devid == SOC_MV78460_ID)
+ if ((devid == SOC_MV78260_ID) || (devid == SOC_MV78460_ID))
return MVEBU_SOC_AXP;
if (devid == SOC_88F6810_ID || devid == SOC_88F6820_ID ||
@@ -69,6 +69,9 @@ int print_cpuinfo(void)
puts("SoC: ");
switch (devid) {
+ case SOC_MV78260_ID:
+ puts("MV78260-");
+ break;
case SOC_MV78460_ID:
puts("MV78460-");
break;
diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h
index b78da25..5d4ad30 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -11,6 +11,7 @@
#ifndef _MVEBU_SOC_H
#define _MVEBU_SOC_H
+#define SOC_MV78260_ID 0x7826
#define SOC_MV78460_ID 0x7846
#define SOC_88F6810_ID 0x6810
#define SOC_88F6820_ID 0x6820
diff --git a/arch/arm/mach-mvebu/serdes/axp/high_speed_env_lib.c b/arch/arm/mach-mvebu/serdes/axp/high_speed_env_lib.c
index 702273a..9762971 100644
--- a/arch/arm/mach-mvebu/serdes/axp/high_speed_env_lib.c
+++ b/arch/arm/mach-mvebu/serdes/axp/high_speed_env_lib.c
@@ -190,8 +190,15 @@ __weak MV_BIN_SERDES_CFG *board_serdes_cfg_get(u8 pex_mode)
u16 ctrl_model_get(void)
{
- /* Right now only MV78460 supported */
+ /*
+ * SoC version can't be autodetected. So we need to rely on a define
+ * from the config system here.
+ */
+#ifdef CONFIG_MV78260
+ return MV_78260_DEV_ID;
+#else
return MV_78460_DEV_ID;
+#endif
}
u32 get_line_cfg(u32 line_num, MV_BIN_SERDES_CFG *info)
@@ -202,6 +209,18 @@ u32 get_line_cfg(u32 line_num, MV_BIN_SERDES_CFG *info)
return (info->line8_15 >> ((line_num - 8) << 2)) & 0xF;
}
+static int serdes_max_lines_get(void)
+{
+ switch (ctrl_model_get()) {
+ case MV_78260_DEV_ID:
+ return 12;
+ case MV_78460_DEV_ID:
+ return 16;
+ }
+
+ return 0;
+}
+
int serdes_phy_config(void)
{
int status = MV_OK;
@@ -226,10 +245,9 @@ int serdes_phy_config(void)
u32 pex_if_num;
/*
- * TODO:
- * Right now we only support the MV78460 with 16 serdes lines
+ * Get max. serdes lines count
*/
- max_serdes_lines = 16;
+ max_serdes_lines = serdes_max_lines_get();
if (max_serdes_lines == 0)
return MV_OK;
@@ -253,6 +271,8 @@ int serdes_phy_config(void)
if ((u8) MV_ERROR == (u8) satr11)
return MV_ERROR;
break;
+ default:
+ satr11 = 0;
}
board_modules_scan();