3c1f6e358d
Patches are generated using the "format-patch" command from the following location: *https://www.codeaurora.org/cgit/quic/kernel/galak-msm/log/?h=apq_ipq_base *rev=0771849495b4128cac2faf7d49c85c729fc48b20 Patches numbered 76/77/102/103 have already been integrated in 3.14.12, so they're not in this list. All these patches are either integrated are pending integration into kernel.org, therefore these patches should go away once the kernel gets upgraded to 3.16. Support is currently limited to AP148 board but can be extended to other platforms in the future. These changes do not cover ethernet connectivity. Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> SVN-Revision: 42334
146 lines
4.8 KiB
Diff
146 lines
4.8 KiB
Diff
From d8bf5e13683e027c52476b89b874d50e5281c130 Mon Sep 17 00:00:00 2001
|
|
From: Stephen Boyd <sboyd@codeaurora.org>
|
|
Date: Fri, 18 Oct 2013 16:45:05 -0700
|
|
Subject: [PATCH 164/182] ARM: Add Krait L2 register accessor functions
|
|
|
|
Krait CPUs have a handful of L2 cache controller registers that
|
|
live behind a cp15 based indirection register. First you program
|
|
the indirection register (l2cpselr) to point the L2 'window'
|
|
register (l2cpdr) at what you want to read/write. Then you
|
|
read/write the 'window' register to do what you want. The
|
|
l2cpselr register is not banked per-cpu so we must lock around
|
|
accesses to it to prevent other CPUs from re-pointing l2cpdr
|
|
underneath us.
|
|
|
|
Cc: Mark Rutland <mark.rutland@arm.com>
|
|
Cc: Russell King <linux@arm.linux.org.uk>
|
|
Cc: Courtney Cavin <courtney.cavin@sonymobile.com>
|
|
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
|
---
|
|
arch/arm/common/Kconfig | 3 ++
|
|
arch/arm/common/Makefile | 1 +
|
|
arch/arm/common/krait-l2-accessors.c | 58 +++++++++++++++++++++++++++++
|
|
arch/arm/include/asm/krait-l2-accessors.h | 20 ++++++++++
|
|
4 files changed, 82 insertions(+)
|
|
create mode 100644 arch/arm/common/krait-l2-accessors.c
|
|
create mode 100644 arch/arm/include/asm/krait-l2-accessors.h
|
|
|
|
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
|
|
index c3a4e9c..9da52dc 100644
|
|
--- a/arch/arm/common/Kconfig
|
|
+++ b/arch/arm/common/Kconfig
|
|
@@ -9,6 +9,9 @@ config DMABOUNCE
|
|
bool
|
|
select ZONE_DMA
|
|
|
|
+config KRAIT_L2_ACCESSORS
|
|
+ bool
|
|
+
|
|
config SHARP_LOCOMO
|
|
bool
|
|
|
|
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
|
|
index 4bdc4162..2836f99 100644
|
|
--- a/arch/arm/common/Makefile
|
|
+++ b/arch/arm/common/Makefile
|
|
@@ -7,6 +7,7 @@ obj-y += firmware.o
|
|
obj-$(CONFIG_ICST) += icst.o
|
|
obj-$(CONFIG_SA1111) += sa1111.o
|
|
obj-$(CONFIG_DMABOUNCE) += dmabounce.o
|
|
+obj-$(CONFIG_KRAIT_L2_ACCESSORS) += krait-l2-accessors.o
|
|
obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
|
|
obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
|
|
obj-$(CONFIG_SHARP_SCOOP) += scoop.o
|
|
diff --git a/arch/arm/common/krait-l2-accessors.c b/arch/arm/common/krait-l2-accessors.c
|
|
new file mode 100644
|
|
index 0000000..5d514bb
|
|
--- /dev/null
|
|
+++ b/arch/arm/common/krait-l2-accessors.c
|
|
@@ -0,0 +1,58 @@
|
|
+/*
|
|
+ * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
|
|
+ *
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU General Public License version 2 and
|
|
+ * only version 2 as published by the Free Software Foundation.
|
|
+ *
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU General Public License for more details.
|
|
+ */
|
|
+
|
|
+#include <linux/spinlock.h>
|
|
+#include <linux/export.h>
|
|
+
|
|
+#include <asm/barrier.h>
|
|
+#include <asm/krait-l2-accessors.h>
|
|
+
|
|
+static DEFINE_RAW_SPINLOCK(krait_l2_lock);
|
|
+
|
|
+void krait_set_l2_indirect_reg(u32 addr, u32 val)
|
|
+{
|
|
+ unsigned long flags;
|
|
+
|
|
+ raw_spin_lock_irqsave(&krait_l2_lock, flags);
|
|
+ /*
|
|
+ * Select the L2 window by poking l2cpselr, then write to the window
|
|
+ * via l2cpdr.
|
|
+ */
|
|
+ asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr));
|
|
+ isb();
|
|
+ asm volatile ("mcr p15, 3, %0, c15, c0, 7 @ l2cpdr" : : "r" (val));
|
|
+ isb();
|
|
+
|
|
+ raw_spin_unlock_irqrestore(&krait_l2_lock, flags);
|
|
+}
|
|
+EXPORT_SYMBOL(krait_set_l2_indirect_reg);
|
|
+
|
|
+u32 krait_get_l2_indirect_reg(u32 addr)
|
|
+{
|
|
+ u32 val;
|
|
+ unsigned long flags;
|
|
+
|
|
+ raw_spin_lock_irqsave(&krait_l2_lock, flags);
|
|
+ /*
|
|
+ * Select the L2 window by poking l2cpselr, then read from the window
|
|
+ * via l2cpdr.
|
|
+ */
|
|
+ asm volatile ("mcr p15, 3, %0, c15, c0, 6 @ l2cpselr" : : "r" (addr));
|
|
+ isb();
|
|
+ asm volatile ("mrc p15, 3, %0, c15, c0, 7 @ l2cpdr" : "=r" (val));
|
|
+
|
|
+ raw_spin_unlock_irqrestore(&krait_l2_lock, flags);
|
|
+
|
|
+ return val;
|
|
+}
|
|
+EXPORT_SYMBOL(krait_get_l2_indirect_reg);
|
|
diff --git a/arch/arm/include/asm/krait-l2-accessors.h b/arch/arm/include/asm/krait-l2-accessors.h
|
|
new file mode 100644
|
|
index 0000000..48fe552
|
|
--- /dev/null
|
|
+++ b/arch/arm/include/asm/krait-l2-accessors.h
|
|
@@ -0,0 +1,20 @@
|
|
+/*
|
|
+ * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
|
|
+ *
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU General Public License version 2 and
|
|
+ * only version 2 as published by the Free Software Foundation.
|
|
+ *
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU General Public License for more details.
|
|
+ */
|
|
+
|
|
+#ifndef __ASMARM_KRAIT_L2_ACCESSORS_H
|
|
+#define __ASMARM_KRAIT_L2_ACCESSORS_H
|
|
+
|
|
+extern void krait_set_l2_indirect_reg(u32 addr, u32 val);
|
|
+extern u32 krait_get_l2_indirect_reg(u32 addr);
|
|
+
|
|
+#endif
|
|
--
|
|
1.7.10.4
|
|
|