Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Copyright 2012-2013 Freescale Semiconductor, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include <linux/of_address.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include <linux/of_platform.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #include <linux/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/irqchip.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <asm/mach/arch.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/hardware/cache-l2x0.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include "common.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "hardware.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define MSCM_CPxCOUNT		0x00c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define MSCM_CPxCFG1		0x014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) static void __init vf610_detect_cpu(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	struct device_node *np;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	u32 cpxcount, cpxcfg1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	unsigned int cpu_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	void __iomem *mscm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	np = of_find_compatible_node(NULL, NULL, "fsl,vf610-mscm-cpucfg");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	if (WARN_ON(!np))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	mscm = of_iomap(np, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	of_node_put(np);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	if (WARN_ON(!mscm))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	cpxcount = readl_relaxed(mscm + MSCM_CPxCOUNT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	cpxcfg1  = readl_relaxed(mscm + MSCM_CPxCFG1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	iounmap(mscm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	cpu_type = cpxcount ? MXC_CPU_VF600 : MXC_CPU_VF500;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	if (cpxcfg1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 		cpu_type |= MXC_CPU_VFx10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	mxc_set_cpu_type(cpu_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) static void __init vf610_init_machine(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	vf610_detect_cpu();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	of_platform_default_populate(NULL, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) static const char * const vf610_dt_compat[] __initconst = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	"fsl,vf500",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	"fsl,vf510",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	"fsl,vf600",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	"fsl,vf610",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	"fsl,vf610m4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) DT_MACHINE_START(VYBRID_VF610, "Freescale Vybrid VF5xx/VF6xx (Device Tree)")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	.l2c_aux_val	= 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	.l2c_aux_mask	= ~0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	.init_machine   = vf610_init_machine,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	.dt_compat	= vf610_dt_compat,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) MACHINE_END