
The patch adds plumbing to soc device info code necessary to support Vybrid devices. Use case in mind for this is CAAM driver, which utilizes said API. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Chris Healy <cphealy@gmail.com> Cc: Shawn Guo <shawnguo@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Cc: linux-imx@nxp.com Tested-by: Chris Healy <cphealy@gmail.com> Reviewed-by: Fabio Estevam <festevam@gmail.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
78 lines
1.5 KiB
C
78 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright 2012-2013 Freescale Semiconductor, Inc.
|
|
*/
|
|
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_platform.h>
|
|
#include <linux/io.h>
|
|
|
|
#include <linux/irqchip.h>
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/hardware/cache-l2x0.h>
|
|
|
|
#include "common.h"
|
|
#include "hardware.h"
|
|
|
|
#define MSCM_CPxCOUNT 0x00c
|
|
#define MSCM_CPxCFG1 0x014
|
|
|
|
static void __init vf610_detect_cpu(void)
|
|
{
|
|
struct device_node *np;
|
|
u32 cpxcount, cpxcfg1;
|
|
unsigned int cpu_type;
|
|
void __iomem *mscm;
|
|
|
|
np = of_find_compatible_node(NULL, NULL, "fsl,vf610-mscm-cpucfg");
|
|
if (WARN_ON(!np))
|
|
return;
|
|
|
|
mscm = of_iomap(np, 0);
|
|
of_node_put(np);
|
|
|
|
if (WARN_ON(!mscm))
|
|
return;
|
|
|
|
cpxcount = readl_relaxed(mscm + MSCM_CPxCOUNT);
|
|
cpxcfg1 = readl_relaxed(mscm + MSCM_CPxCFG1);
|
|
|
|
iounmap(mscm);
|
|
|
|
cpu_type = cpxcount ? MXC_CPU_VF600 : MXC_CPU_VF500;
|
|
|
|
if (cpxcfg1)
|
|
cpu_type |= MXC_CPU_VFx10;
|
|
|
|
mxc_set_cpu_type(cpu_type);
|
|
}
|
|
|
|
static void __init vf610_init_machine(void)
|
|
{
|
|
struct device *parent;
|
|
|
|
vf610_detect_cpu();
|
|
|
|
parent = imx_soc_device_init();
|
|
if (parent == NULL)
|
|
pr_warn("failed to initialize soc device\n");
|
|
|
|
of_platform_default_populate(NULL, NULL, parent);
|
|
}
|
|
|
|
static const char * const vf610_dt_compat[] __initconst = {
|
|
"fsl,vf500",
|
|
"fsl,vf510",
|
|
"fsl,vf600",
|
|
"fsl,vf610",
|
|
"fsl,vf610m4",
|
|
NULL,
|
|
};
|
|
|
|
DT_MACHINE_START(VYBRID_VF610, "Freescale Vybrid VF5xx/VF6xx (Device Tree)")
|
|
.l2c_aux_val = 0,
|
|
.l2c_aux_mask = ~0,
|
|
.init_machine = vf610_init_machine,
|
|
.dt_compat = vf610_dt_compat,
|
|
MACHINE_END
|