Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 588ef769 authored by Dan Williams's avatar Dan Williams Committed by Russell King
Browse files

[ARM] 4184/1: iop: cp6 access handler (undef_hook)



Enable svc access to cp6 via an undefined instruction hook.  Do not enable
access for usr code.

This patch also makes iop13xx select PLAT_IOP, this requires a small change
to drivers/i2c/busses/i2c-iop3xx.c.

Per Lennert Buytenhek's note, the cp6 trap routine is moved to arch/arm/plat-iop
Per Nicolas Pitre's note, the cp_wait is skipped since the latency to
return to the faulting function is longer than cp_wait.

Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent dfc544c7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -233,6 +233,8 @@ config ARCH_IOP33X

config ARCH_IOP13XX
	bool "IOP13xx-based"
	depends on MMU
	select PLAT_IOP
	select PCI
	help
	  Support for Intel's IOP13XX (XScale) family of processors.
+3 −0
Original line number Diff line number Diff line
@@ -250,11 +250,14 @@ static struct irq_chip iop13xx_irqchip4 = {
	.unmask = iop13xx_irq_unmask3,
};

extern void iop_init_cp6_handler(void);

void __init iop13xx_init_irq(void)
{
	unsigned int i;

	u32 cp_flags = iop13xx_cp6_save();
	iop_init_cp6_handler();

	/* disable all interrupts */
	write_intctl_0(0);
+2 −0
Original line number Diff line number Diff line
@@ -60,6 +60,8 @@ void __init iop32x_init_irq(void)
{
	int i;

	iop_init_cp6_handler();

	intctl_write(0);
	intstr_write(0);
	if (machine_is_glantank() ||
+2 −0
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@ void __init iop33x_init_irq(void)
{
	int i;

	iop_init_cp6_handler();

	intctl0_write(0);
	intctl1_write(0);
	intstr0_write(0);
+26 −4
Original line number Diff line number Diff line
@@ -2,7 +2,29 @@
# Makefile for the linux kernel.
#

obj-y			:= gpio.o i2c.o pci.o setup.o time.o io.o
obj-y :=

# IOP32X
obj-$(CONFIG_ARCH_IOP32X) += gpio.o
obj-$(CONFIG_ARCH_IOP32X) += i2c.o
obj-$(CONFIG_ARCH_IOP32X) += pci.o
obj-$(CONFIG_ARCH_IOP32X) += setup.o
obj-$(CONFIG_ARCH_IOP32X) += time.o
obj-$(CONFIG_ARCH_IOP32X) += io.o
obj-$(CONFIG_ARCH_IOP32X) += cp6.o

# IOP33X
obj-$(CONFIG_ARCH_IOP33X) += gpio.o
obj-$(CONFIG_ARCH_IOP33X) += i2c.o
obj-$(CONFIG_ARCH_IOP33X) += pci.o
obj-$(CONFIG_ARCH_IOP33X) += setup.o
obj-$(CONFIG_ARCH_IOP33X) += time.o
obj-$(CONFIG_ARCH_IOP33X) += io.o
obj-$(CONFIG_ARCH_IOP33X) += cp6.o

# IOP13XX
obj-$(CONFIG_ARCH_IOP13XX) += cp6.o

obj-m                  :=
obj-n                  :=
obj-                   :=
Loading