72 lines
1.4 KiB
C
72 lines
1.4 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)
|
||
|
{
|
||
|
vf610_detect_cpu();
|
||
|
|
||
|
of_platform_default_populate(NULL, NULL, NULL);
|
||
|
}
|
||
|
|
||
|
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
|