forked from Minki/linux
ARM: tango4: Initial platform support
Support Sigma Designs ARM-based (specifically, Cortex-A9 MPCore r3p0) Tango4 "Secure Media Processor" platforms: smp8756, smp8758, smp8759 (8756 is single-core, the latter are dual-core). Note: 8758 vs 8759: same chip, different package. Support for older MIPS-based platforms can be found elsewhere: https://github.com/mansr/linux-tangox Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com> Reviewed-by: Kevin Hilman <khilman@linaro.org> Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
parent
9d67d4624f
commit
d6de5b0294
@ -1588,6 +1588,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/stm32.git
|
||||
N: stm32
|
||||
F: drivers/clocksource/armv7m_systick.c
|
||||
|
||||
ARM/TANGO ARCHITECTURE
|
||||
M: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
|
||||
L: linux-arm-kernel@lists.infradead.org
|
||||
S: Maintained
|
||||
F: arch/arm/mach-tango/
|
||||
F: arch/arm/boot/dts/tango*
|
||||
|
||||
ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
|
||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
|
@ -919,6 +919,8 @@ source "arch/arm/mach-sunxi/Kconfig"
|
||||
|
||||
source "arch/arm/mach-prima2/Kconfig"
|
||||
|
||||
source "arch/arm/mach-tango/Kconfig"
|
||||
|
||||
source "arch/arm/mach-tegra/Kconfig"
|
||||
|
||||
source "arch/arm/mach-u300/Kconfig"
|
||||
|
@ -211,6 +211,7 @@ machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
|
||||
machine-$(CONFIG_ARCH_STI) += sti
|
||||
machine-$(CONFIG_ARCH_STM32) += stm32
|
||||
machine-$(CONFIG_ARCH_SUNXI) += sunxi
|
||||
machine-$(CONFIG_ARCH_TANGO) += tango
|
||||
machine-$(CONFIG_ARCH_TEGRA) += tegra
|
||||
machine-$(CONFIG_ARCH_U300) += u300
|
||||
machine-$(CONFIG_ARCH_U8500) += ux500
|
||||
|
12
arch/arm/mach-tango/Kconfig
Normal file
12
arch/arm/mach-tango/Kconfig
Normal file
@ -0,0 +1,12 @@
|
||||
config ARCH_TANGO
|
||||
bool "Sigma Designs Tango4 (SMP87xx)" if ARCH_MULTI_V7
|
||||
# Cortex-A9 MPCore r3p0, PL310 r3p2
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
select ARM_ERRATA_754322
|
||||
select ARM_ERRATA_764369 if SMP
|
||||
select ARM_ERRATA_775420
|
||||
select ARM_GIC
|
||||
select CLKSRC_TANGO_XTAL
|
||||
select HAVE_ARM_SCU
|
||||
select HAVE_ARM_TWD
|
||||
select TANGO_IRQ
|
2
arch/arm/mach-tango/Makefile
Normal file
2
arch/arm/mach-tango/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
asflags-y += -mcpu=cortex-a9
|
||||
obj-y += setup.o smc.o
|
31
arch/arm/mach-tango/setup.c
Normal file
31
arch/arm/mach-tango/setup.c
Normal file
@ -0,0 +1,31 @@
|
||||
#include <linux/smp.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include "smc.h"
|
||||
|
||||
static int tango4_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
{
|
||||
tango_set_aux_boot_addr(virt_to_phys(secondary_startup));
|
||||
tango_start_aux_core(cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct smp_operations tango4_smp_ops __initdata = {
|
||||
.smp_boot_secondary = tango4_boot_secondary,
|
||||
};
|
||||
|
||||
CPU_METHOD_OF_DECLARE(tango4_smp, "sigma,tango4-smp", &tango4_smp_ops);
|
||||
|
||||
static void tango_l2c_write(unsigned long val, unsigned int reg)
|
||||
{
|
||||
if (reg == L2X0_CTRL)
|
||||
tango_set_l2_control(val);
|
||||
}
|
||||
|
||||
static const char *const tango_dt_compat[] = { "sigma,tango4", NULL };
|
||||
|
||||
DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
|
||||
.dt_compat = tango_dt_compat,
|
||||
.l2c_aux_mask = ~0,
|
||||
.l2c_write_sec = tango_l2c_write,
|
||||
MACHINE_END
|
9
arch/arm/mach-tango/smc.S
Normal file
9
arch/arm/mach-tango/smc.S
Normal file
@ -0,0 +1,9 @@
|
||||
#include <linux/linkage.h>
|
||||
|
||||
ENTRY(tango_smc)
|
||||
push {lr}
|
||||
mov ip, r1
|
||||
dsb /* This barrier is probably unnecessary */
|
||||
smc #0
|
||||
pop {pc}
|
||||
ENDPROC(tango_smc)
|
5
arch/arm/mach-tango/smc.h
Normal file
5
arch/arm/mach-tango/smc.h
Normal file
@ -0,0 +1,5 @@
|
||||
extern int tango_smc(unsigned int val, unsigned int service);
|
||||
|
||||
#define tango_set_l2_control(val) tango_smc(val, 0x102)
|
||||
#define tango_start_aux_core(val) tango_smc(val, 0x104)
|
||||
#define tango_set_aux_boot_addr(val) tango_smc((unsigned int)val, 0x105)
|
Loading…
Reference in New Issue
Block a user