ARM: uniphier: simplify SoC ID get function

Currently, uniphier_get_soc_type() converts the SoC ID (this is
read from the revision register) to an enum symbol to use it for SoC
identification.  Come to think of it, there is no need for the
conversion in the first place.  Using the SoC ID from the register
as-is a straightforward way.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
Masahiro Yamada 2017-01-21 18:05:26 +09:00
parent d9a70368db
commit e27d6c7d32
17 changed files with 214 additions and 317 deletions

View File

@ -10,7 +10,7 @@ obj-y += bcu/
else
obj-$(CONFIG_DISPLAY_CPUINFO) += cpu_info.o
obj-$(CONFIG_DISPLAY_CPUINFO) += cpu-info.o
obj-y += dram_init.o
obj-y += board_init.o
obj-$(CONFIG_BOARD_LATE_INIT) += board_late_init.o
@ -22,7 +22,7 @@ obj-y += pinctrl-glue.o
endif
obj-y += boards.o
obj-y += soc_info.o
obj-y += soc-info.o
obj-y += boot-mode/
obj-y += clk/
obj-y += dram/

View File

@ -28,13 +28,13 @@ u32 uniphier_smp_booted[CONFIG_ARMV7_PSCI_NR_CPUS];
static int uniphier_get_nr_cpus(void)
{
switch (uniphier_get_soc_type()) {
case SOC_UNIPHIER_SLD3:
case SOC_UNIPHIER_PRO4:
case SOC_UNIPHIER_PRO5:
switch (uniphier_get_soc_id()) {
case UNIPHIER_SLD3_ID:
case UNIPHIER_PRO4_ID:
case UNIPHIER_PRO5_ID:
return 2;
case SOC_UNIPHIER_PXS2:
case SOC_UNIPHIER_LD6B:
case UNIPHIER_PXS2_ID:
case UNIPHIER_LD6B_ID:
return 4;
default:
return 1;

View File

@ -80,7 +80,7 @@ static void uniphier_ld20_misc_init(void)
#endif
struct uniphier_initdata {
enum uniphier_soc_id soc_id;
unsigned int soc_id;
bool nand_2cs;
void (*sbc_init)(void);
void (*pll_init)(void);
@ -91,7 +91,7 @@ struct uniphier_initdata {
static const struct uniphier_initdata uniphier_initdata[] = {
#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
{
.soc_id = SOC_UNIPHIER_SLD3,
.soc_id = UNIPHIER_SLD3_ID,
.nand_2cs = true,
.sbc_init = uniphier_sbc_init_admulti,
.pll_init = uniphier_sld3_pll_init,
@ -100,7 +100,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4)
{
.soc_id = SOC_UNIPHIER_LD4,
.soc_id = UNIPHIER_LD4_ID,
.nand_2cs = true,
.sbc_init = uniphier_ld4_sbc_init,
.pll_init = uniphier_ld4_pll_init,
@ -109,7 +109,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
{
.soc_id = SOC_UNIPHIER_PRO4,
.soc_id = UNIPHIER_PRO4_ID,
.nand_2cs = false,
.sbc_init = uniphier_sbc_init_savepin,
.pll_init = uniphier_pro4_pll_init,
@ -118,7 +118,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
{
.soc_id = SOC_UNIPHIER_SLD8,
.soc_id = UNIPHIER_SLD8_ID,
.nand_2cs = true,
.sbc_init = uniphier_ld4_sbc_init,
.pll_init = uniphier_ld4_pll_init,
@ -127,7 +127,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
{
.soc_id = SOC_UNIPHIER_PRO5,
.soc_id = UNIPHIER_PRO5_ID,
.nand_2cs = true,
.sbc_init = uniphier_sbc_init_savepin,
.clk_init = uniphier_pro5_clk_init,
@ -135,7 +135,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
{
.soc_id = SOC_UNIPHIER_PXS2,
.soc_id = UNIPHIER_PXS2_ID,
.nand_2cs = true,
.sbc_init = uniphier_pxs2_sbc_init,
.clk_init = uniphier_pxs2_clk_init,
@ -143,7 +143,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
{
.soc_id = SOC_UNIPHIER_LD6B,
.soc_id = UNIPHIER_LD6B_ID,
.nand_2cs = true,
.sbc_init = uniphier_pxs2_sbc_init,
.clk_init = uniphier_pxs2_clk_init,
@ -151,7 +151,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11)
{
.soc_id = SOC_UNIPHIER_LD11,
.soc_id = UNIPHIER_LD11_ID,
.nand_2cs = false,
.sbc_init = uniphier_ld11_sbc_init,
.pll_init = uniphier_ld11_pll_init,
@ -161,7 +161,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD20)
{
.soc_id = SOC_UNIPHIER_LD20,
.soc_id = UNIPHIER_LD20_ID,
.nand_2cs = false,
.sbc_init = uniphier_ld11_sbc_init,
.pll_init = uniphier_ld20_pll_init,
@ -171,7 +171,7 @@ static const struct uniphier_initdata uniphier_initdata[] = {
};
static const struct uniphier_initdata *uniphier_get_initdata(
enum uniphier_soc_id soc_id)
unsigned int soc_id)
{
int i;
@ -186,12 +186,12 @@ static const struct uniphier_initdata *uniphier_get_initdata(
int board_init(void)
{
const struct uniphier_initdata *initdata;
enum uniphier_soc_id soc_id;
unsigned int soc_id;
int ret;
led_puts("U0");
soc_id = uniphier_get_soc_type();
soc_id = uniphier_get_soc_id();
initdata = uniphier_get_initdata(soc_id);
if (!initdata) {
pr_err("unsupported board\n");

View File

@ -1,5 +1,6 @@
/*
* Copyright (C) 2016 Masahiro Yamada <yamada.masahiro@socionext.com>
* Copyright (C) 2016-2017 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@ -57,14 +58,14 @@ u32 uniphier_ld20_boot_device(void)
int boot_mode;
u32 usb_boot_mask;
switch (uniphier_get_soc_type()) {
switch (uniphier_get_soc_id()) {
#if defined(CONFIG_ARCH_UNIPHIER_LD11)
case SOC_UNIPHIER_LD11:
case UNIPHIER_LD11_ID:
usb_boot_mask = 0x00000080;
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD20)
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD20_ID:
usb_boot_mask = 0x00000780;
break;
#endif

View File

@ -18,30 +18,30 @@ u32 spl_boot_device_raw(void)
if (boot_is_swapped())
return BOOT_DEVICE_NOR;
switch (uniphier_get_soc_type()) {
switch (uniphier_get_soc_id()) {
#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
case SOC_UNIPHIER_SLD3:
case UNIPHIER_SLD3_ID:
return uniphier_sld3_boot_device();
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4) || defined(CONFIG_ARCH_UNIPHIER_PRO4) || \
defined(CONFIG_ARCH_UNIPHIER_SLD8)
case SOC_UNIPHIER_LD4:
case SOC_UNIPHIER_PRO4:
case SOC_UNIPHIER_SLD8:
case UNIPHIER_LD4_ID:
case UNIPHIER_PRO4_ID:
case UNIPHIER_SLD8_ID:
return uniphier_ld4_boot_device();
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
case SOC_UNIPHIER_PRO5:
case UNIPHIER_PRO5_ID:
return uniphier_pro5_boot_device();
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2) || defined(CONFIG_ARCH_UNIPHIER_LD6B)
case SOC_UNIPHIER_PXS2:
case SOC_UNIPHIER_LD6B:
case UNIPHIER_PXS2_ID:
case UNIPHIER_LD6B_ID:
return uniphier_pxs2_boot_device();
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11) || defined(CONFIG_ARCH_UNIPHIER_LD20)
case SOC_UNIPHIER_LD11:
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD11_ID:
case UNIPHIER_LD20_ID:
return uniphier_ld20_boot_device();
#endif
default:
@ -55,17 +55,17 @@ u32 spl_boot_device(void)
mode = spl_boot_device_raw();
switch (uniphier_get_soc_type()) {
switch (uniphier_get_soc_id()) {
#if defined(CONFIG_ARCH_UNIPHIER_PXS2) || defined(CONFIG_ARCH_UNIPHIER_LD6B)
case SOC_UNIPHIER_PXS2:
case SOC_UNIPHIER_LD6B:
case UNIPHIER_PXS2_ID:
case UNIPHIER_LD6B_ID:
if (mode == BOOT_DEVICE_USB)
mode = BOOT_DEVICE_NOR;
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11) || defined(CONFIG_ARCH_UNIPHIER_LD20)
case SOC_UNIPHIER_LD11:
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD11_ID:
case UNIPHIER_LD20_ID:
if (mode == BOOT_DEVICE_MMC1 || mode == BOOT_DEVICE_USB)
mode = BOOT_DEVICE_BOARD;
break;

View File

@ -14,34 +14,34 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
printf("Boot Swap: %s\n\n", boot_is_swapped() ? "ON" : "OFF");
switch (uniphier_get_soc_type()) {
switch (uniphier_get_soc_id()) {
#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
case SOC_UNIPHIER_SLD3:
case UNIPHIER_SLD3_ID:
uniphier_sld3_boot_mode_show();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4) || defined(CONFIG_ARCH_UNIPHIER_PRO4) || \
defined(CONFIG_ARCH_UNIPHIER_SLD8)
case SOC_UNIPHIER_LD4:
case SOC_UNIPHIER_PRO4:
case SOC_UNIPHIER_SLD8:
case UNIPHIER_LD4_ID:
case UNIPHIER_PRO4_ID:
case UNIPHIER_SLD8_ID:
uniphier_ld4_boot_mode_show();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
case SOC_UNIPHIER_PRO5:
case UNIPHIER_PRO5_ID:
uniphier_pro5_boot_mode_show();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2) || defined(CONFIG_ARCH_UNIPHIER_LD6B)
case SOC_UNIPHIER_PXS2:
case SOC_UNIPHIER_LD6B:
case UNIPHIER_PXS2_ID:
case UNIPHIER_LD6B_ID:
uniphier_pxs2_boot_mode_show();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11) || defined(CONFIG_ARCH_UNIPHIER_LD20)
case SOC_UNIPHIER_LD11:
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD11_ID:
case UNIPHIER_LD20_ID:
uniphier_ld20_boot_mode_show();
break;
#endif

View File

@ -40,11 +40,11 @@ int uniphier_rom_get_mmc_funcptr(int (**send_cmd)(u32, u32),
{
const struct uniphier_romfunc_table *table;
switch (uniphier_get_soc_type()) {
case SOC_UNIPHIER_LD11:
switch (uniphier_get_soc_id()) {
case UNIPHIER_LD11_ID:
table = &uniphier_ld11_romfunc_table;
break;
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD20_ID:
table = &uniphier_ld20_romfunc_table;
break;
default:

View File

@ -0,0 +1,73 @@
/*
* Copyright (C) 2013-2014 Panasonic Corporation
* Copyright (C) 2015-2017 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <linux/errno.h>
#include <linux/io.h>
#include "soc-info.h"
int print_cpuinfo(void)
{
unsigned int id, model, rev, required_model = 1, required_rev = 1;
id = uniphier_get_soc_id();
model = uniphier_get_soc_model();
rev = uniphier_get_soc_revision();
puts("CPU: ");
switch (id) {
case UNIPHIER_SLD3_ID:
puts("sLD3 (MN2WS0220)");
required_model = 2;
break;
case UNIPHIER_LD4_ID:
puts("LD4 (MN2WS0250)");
required_rev = 2;
break;
case UNIPHIER_PRO4_ID:
puts("Pro4 (MN2WS0230)");
break;
case UNIPHIER_SLD8_ID:
puts("sLD8 (MN2WS0270)");
break;
case UNIPHIER_PRO5_ID:
puts("Pro5 (MN2WS0300)");
break;
case UNIPHIER_PXS2_ID:
puts("PXs2 (MN2WS0310)");
break;
case UNIPHIER_LD6B_ID:
puts("LD6b (MN2WS0320)");
break;
case UNIPHIER_LD11_ID:
puts("LD11 (SC1405AP1)");
break;
case UNIPHIER_LD20_ID:
puts("LD20 (SC1401AJ1)");
break;
default:
printf("Unknown Processor ID (0x%x)\n", id);
return -ENOTSUPP;
}
printf(" model %d (revision %d)\n", model, rev);
if (model < required_model) {
printf("Only model %d or newer is supported.\n",
required_model);
return -ENOTSUPP;
} else if (rev < required_rev) {
printf("Only revision %d or newer is supported.\n",
required_rev);
return -ENOTSUPP;
}
return 0;
}

View File

@ -1,73 +0,0 @@
/*
* Copyright (C) 2013-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <linux/io.h>
#include "sg-regs.h"
int print_cpuinfo(void)
{
u32 revision, type, model, rev, required_model = 1, required_rev = 1;
revision = readl(SG_REVISION);
type = (revision & SG_REVISION_TYPE_MASK) >> SG_REVISION_TYPE_SHIFT;
model = (revision & SG_REVISION_MODEL_MASK) >> SG_REVISION_MODEL_SHIFT;
rev = (revision & SG_REVISION_REV_MASK) >> SG_REVISION_REV_SHIFT;
puts("CPU: ");
switch (type) {
case 0x25:
puts("PH1-sLD3 (MN2WS0220)");
required_model = 2;
break;
case 0x26:
puts("PH1-LD4 (MN2WS0250)");
required_rev = 2;
break;
case 0x28:
puts("PH1-Pro4 (MN2WS0230)");
break;
case 0x29:
puts("PH1-sLD8 (MN2WS0270)");
break;
case 0x2A:
puts("PH1-Pro5 (MN2WS0300)");
break;
case 0x2E:
puts("ProXstream2 (MN2WS0310)");
break;
case 0x2F:
puts("PH1-LD6b (MN2WS0320)");
break;
case 0x31:
puts("PH1-LD11 (SC1405AP1)");
break;
case 0x32:
puts("PH1-LD20 (SC1401AJ1)");
break;
default:
printf("Unknown Processor ID (0x%x)\n", revision);
return -1;
}
printf(" model %d", model);
printf(" (rev. %d)\n", rev);
if (model < required_model) {
printf("Sorry, this model is not supported.\n");
printf("Required model is %d.", required_model);
return -1;
} else if (rev < required_rev) {
printf("Sorry, this revision is not supported.\n");
printf("Required revision is %d.", required_rev);
return -1;
}
return 0;
}

View File

@ -32,45 +32,45 @@ void _debug_uart_init(void)
void __iomem *base = (void __iomem *)CONFIG_DEBUG_UART_BASE;
unsigned int divisor;
switch (uniphier_get_soc_type()) {
switch (uniphier_get_soc_id()) {
#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
case SOC_UNIPHIER_SLD3:
case UNIPHIER_SLD3_ID:
divisor = uniphier_sld3_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4)
case SOC_UNIPHIER_LD4:
case UNIPHIER_LD4_ID:
divisor = uniphier_ld4_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
case SOC_UNIPHIER_PRO4:
case UNIPHIER_PRO4_ID:
divisor = uniphier_pro4_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
case SOC_UNIPHIER_SLD8:
case UNIPHIER_SLD8_ID:
divisor = uniphier_sld8_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
case SOC_UNIPHIER_PRO5:
case UNIPHIER_PRO5_ID:
divisor = uniphier_pro5_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
case SOC_UNIPHIER_PXS2:
case UNIPHIER_PXS2_ID:
divisor = uniphier_pxs2_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
case SOC_UNIPHIER_LD6B:
case UNIPHIER_LD6B_ID:
divisor = uniphier_ld6b_debug_uart_init();
break;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11) || defined(CONFIG_ARCH_UNIPHIER_LD20)
case SOC_UNIPHIER_LD11:
case SOC_UNIPHIER_LD20:
case UNIPHIER_LD11_ID:
case UNIPHIER_LD20_ID:
divisor = uniphier_ld20_debug_uart_init();
break;
#endif

View File

@ -245,17 +245,17 @@ static int do_ddr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
char *cmd = argv[1];
const struct phy_param *phy_param;
switch (uniphier_get_soc_type()) {
case SOC_UNIPHIER_LD4:
switch (uniphier_get_soc_id()) {
case UNIPHIER_LD4_ID:
phy_param = uniphier_ld4_phy_param;
break;
case SOC_UNIPHIER_PRO4:
case UNIPHIER_PRO4_ID:
phy_param = uniphier_pro4_phy_param;
break;
case SOC_UNIPHIER_SLD8:
case UNIPHIER_SLD8_ID:
phy_param = uniphier_sld8_phy_param;
break;
case SOC_UNIPHIER_LD11:
case UNIPHIER_LD11_ID:
phy_param = uniphier_ld11_phy_param;
break;
default:

View File

@ -97,7 +97,7 @@ int ft_board_setup(void *fdt, bd_t *bd)
const unsigned long rsv_size = 64;
int ch, ret;
if (uniphier_get_soc_type() != SOC_UNIPHIER_LD20)
if (uniphier_get_soc_id() != UNIPHIER_LD20_ID)
return 0;
param = uniphier_get_board_param();

View File

@ -1,13 +1,15 @@
/*
* UniPhier SG (SoC Glue) block registers
*
* Copyright (C) 2011-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
* Copyright (C) 2011-2015 Copyright (C) 2011-2015 Panasonic Corporation
* Copyright (C) 2016-2017 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef ARCH_SG_REGS_H
#define ARCH_SG_REGS_H
#ifndef UNIPHIER_SG_REGS_H
#define UNIPHIER_SG_REGS_H
/* Base Address */
#define SG_CTRL_BASE 0x5f800000
@ -15,12 +17,6 @@
/* Revision */
#define SG_REVISION (SG_CTRL_BASE | 0x0000)
#define SG_REVISION_TYPE_SHIFT 16
#define SG_REVISION_TYPE_MASK (0xff << SG_REVISION_TYPE_SHIFT)
#define SG_REVISION_MODEL_SHIFT 8
#define SG_REVISION_MODEL_MASK (0x3 << SG_REVISION_MODEL_SHIFT)
#define SG_REVISION_REV_SHIFT 0
#define SG_REVISION_REV_MASK (0x1f << SG_REVISION_REV_SHIFT)
/* Memory Configuration */
#define SG_MEMCONF (SG_CTRL_BASE | 0x0400)
@ -140,4 +136,4 @@ static inline void sg_set_iectrl_range(unsigned min, unsigned max)
#endif /* __ASSEMBLY__ */
#endif /* ARCH_SG_REGS_H */
#endif /* UNIPHIER_SG_REGS_H */

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <linux/io.h>
#include <linux/types.h>
#include "sg-regs.h"
#include "soc-info.h"
static unsigned int __uniphier_get_revision_field(unsigned int mask,
unsigned int shift)
{
u32 revision = readl(SG_REVISION);
return (revision >> shift) & mask;
}
unsigned int uniphier_get_soc_id(void)
{
return __uniphier_get_revision_field(0xff, 16);
}
unsigned int uniphier_get_soc_model(void)
{
return __uniphier_get_revision_field(0x3, 8);
}
unsigned int uniphier_get_soc_revision(void)
{
return __uniphier_get_revision_field(0x1f, 0);
}

View File

@ -1,76 +1,25 @@
/*
* Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
* Copyright (C) 2017 Socionext Inc.
* Author: Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __MACH_SOC_INFO_H__
#define __MACH_SOC_INFO_H__
#ifndef __UNIPHIER_SOC_INFO_H__
#define __UNIPHIER_SOC_INFO_H__
enum uniphier_soc_id {
SOC_UNIPHIER_SLD3,
SOC_UNIPHIER_LD4,
SOC_UNIPHIER_PRO4,
SOC_UNIPHIER_SLD8,
SOC_UNIPHIER_PRO5,
SOC_UNIPHIER_PXS2,
SOC_UNIPHIER_LD6B,
SOC_UNIPHIER_LD11,
SOC_UNIPHIER_LD20,
SOC_UNIPHIER_UNKNOWN,
};
#define UNIPHIER_SLD3_ID 0x25
#define UNIPHIER_LD4_ID 0x26
#define UNIPHIER_PRO4_ID 0x28
#define UNIPHIER_SLD8_ID 0x29
#define UNIPHIER_PRO5_ID 0x2a
#define UNIPHIER_PXS2_ID 0x2e
#define UNIPHIER_LD6B_ID 0x2f
#define UNIPHIER_LD11_ID 0x31
#define UNIPHIER_LD20_ID 0x32
#define UNIPHIER_NR_ENABLED_SOCS \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_SLD3) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_LD4) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_PRO4) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_SLD8) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_PRO5) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_PXS2) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_LD6B) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_LD11) + \
IS_ENABLED(CONFIG_ARCH_UNIPHIER_LD20)
unsigned int uniphier_get_soc_id(void);
unsigned int uniphier_get_soc_model(void);
unsigned int uniphier_get_soc_revision(void);
#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_SLD3)
return SOC_UNIPHIER_SLD3;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4)
return SOC_UNIPHIER_LD4;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
return SOC_UNIPHIER_PRO4;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
return SOC_UNIPHIER_SLD8;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
return SOC_UNIPHIER_PRO5;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
return SOC_UNIPHIER_PXS2;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
return SOC_UNIPHIER_LD6B;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11)
return SOC_UNIPHIER_LD11;
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD20)
return SOC_UNIPHIER_LD20;
#endif
return SOC_UNIPHIER_UNKNOWN;
}
#endif
int uniphier_get_soc_model(void);
int uniphier_get_soc_revision(void);
#endif /* __MACH_SOC_INFO_H__ */
#endif /* __UNIPHIER_SOC_INFO_H__ */

View File

@ -1,84 +0,0 @@
/*
* Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <linux/io.h>
#include <linux/types.h>
#include "sg-regs.h"
#include "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_SLD3
case 0x25:
ret = SOC_UNIPHIER_SLD3;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_LD4
case 0x26:
ret = SOC_UNIPHIER_LD4;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_PRO4
case 0x28:
ret = SOC_UNIPHIER_PRO4;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_SLD8
case 0x29:
ret = SOC_UNIPHIER_SLD8;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_PRO5
case 0x2A:
ret = SOC_UNIPHIER_PRO5;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_PXS2
case 0x2E:
ret = SOC_UNIPHIER_PXS2;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_LD6B
case 0x2F:
ret = SOC_UNIPHIER_LD6B;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_LD11
case 0x31:
ret = SOC_UNIPHIER_LD11;
break;
#endif
#ifdef CONFIG_ARCH_UNIPHIER_LD20
case 0x32:
ret = SOC_UNIPHIER_LD20;
break;
#endif
default:
ret = SOC_UNIPHIER_UNKNOWN;
break;
}
return ret;
}
#endif
int uniphier_get_soc_model(void)
{
return (readl(SG_REVISION) & SG_REVISION_MODEL_MASK) >>
SG_REVISION_MODEL_SHIFT;
}
int uniphier_get_soc_revision(void)
{
return (readl(SG_REVISION) & SG_REVISION_REV_MASK) >>
SG_REVISION_REV_SHIFT;
}

View File

@ -14,7 +14,7 @@
#include "soc-info.h"
struct uniphier_spl_initdata {
enum uniphier_soc_id soc_id;
unsigned int soc_id;
void (*bcu_init)(const struct uniphier_board_data *bd);
void (*early_clk_init)(void);
int (*dpll_init)(const struct uniphier_board_data *bd);
@ -26,7 +26,7 @@ struct uniphier_spl_initdata {
static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
{
.soc_id = SOC_UNIPHIER_SLD3,
.soc_id = UNIPHIER_SLD3_ID,
.bcu_init = uniphier_sld3_bcu_init,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_sld3_dpll_init,
@ -37,7 +37,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD4)
{
.soc_id = SOC_UNIPHIER_LD4,
.soc_id = UNIPHIER_LD4_ID,
.bcu_init = uniphier_ld4_bcu_init,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_ld4_dpll_init,
@ -48,7 +48,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
{
.soc_id = SOC_UNIPHIER_PRO4,
.soc_id = UNIPHIER_PRO4_ID,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_pro4_dpll_init,
.memconf_init = uniphier_memconf_2ch_init,
@ -58,7 +58,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
{
.soc_id = SOC_UNIPHIER_SLD8,
.soc_id = UNIPHIER_SLD8_ID,
.bcu_init = uniphier_ld4_bcu_init,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_sld8_dpll_init,
@ -69,7 +69,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
{
.soc_id = SOC_UNIPHIER_PRO5,
.soc_id = UNIPHIER_PRO5_ID,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_pro5_dpll_init,
.memconf_init = uniphier_memconf_2ch_init,
@ -79,7 +79,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
{
.soc_id = SOC_UNIPHIER_PXS2,
.soc_id = UNIPHIER_PXS2_ID,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_pxs2_dpll_init,
.memconf_init = uniphier_memconf_3ch_init,
@ -89,7 +89,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
{
.soc_id = SOC_UNIPHIER_LD6B,
.soc_id = UNIPHIER_LD6B_ID,
.early_clk_init = uniphier_sld3_early_clk_init,
.dpll_init = uniphier_pxs2_dpll_init,
.memconf_init = uniphier_memconf_3ch_init,
@ -99,7 +99,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD11)
{
.soc_id = SOC_UNIPHIER_LD11,
.soc_id = UNIPHIER_LD11_ID,
.early_clk_init = uniphier_ld11_early_clk_init,
.dpll_init = uniphier_ld11_dpll_init,
.memconf_init = uniphier_memconf_2ch_init,
@ -109,7 +109,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
#endif
#if defined(CONFIG_ARCH_UNIPHIER_LD20)
{
.soc_id = SOC_UNIPHIER_LD20,
.soc_id = UNIPHIER_LD20_ID,
.early_clk_init = uniphier_ld11_early_clk_init,
.dpll_init = uniphier_ld20_dpll_init,
.memconf_init = uniphier_memconf_3ch_init,
@ -120,7 +120,7 @@ static const struct uniphier_spl_initdata uniphier_spl_initdata[] = {
};
static const struct uniphier_spl_initdata *uniphier_get_spl_initdata(
enum uniphier_soc_id soc_id)
unsigned int soc_id)
{
int i;
@ -136,7 +136,7 @@ void spl_board_init(void)
{
const struct uniphier_board_data *bd;
const struct uniphier_spl_initdata *initdata;
enum uniphier_soc_id soc_id;
unsigned int soc_id;
int ret;
#ifdef CONFIG_DEBUG_UART
@ -147,7 +147,7 @@ void spl_board_init(void)
if (!bd)
hang();
soc_id = uniphier_get_soc_type();
soc_id = uniphier_get_soc_id();
initdata = uniphier_get_spl_initdata(soc_id);
if (!initdata)
hang();