linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nishanth Menon <nm@ti.com>
To: Tony Lindgren <tony@atomide.com>, Russell King <linux@arm.linux.org.uk>
Cc: Nishanth Menon <nm@ti.com>, Sekhar Nori <nsekhar@ti.com>,
	Tomasz Figa <tomasz.figa@gmail.com>,
	linux-kernel@vger.kernel.org, Santosh <ssantosh@kernel.org>,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: [PATCH V2 1/2] ARM: l2c: OMAP4/AM437x: Introduce support for cache latency programming
Date: Fri, 2 Jan 2015 11:43:47 -0600	[thread overview]
Message-ID: <1420220628-23742-2-git-send-email-nm@ti.com> (raw)
In-Reply-To: <1420220628-23742-1-git-send-email-nm@ti.com>

OMAP4 and AM437x generations of processors support programming the
PL310 L2Cache controller's Latency control registers using a secure
montior call. Unfortunately, this varies from other PL310 programming
sequence with a requirement of two parameters instead of the generic
single parameter configuration.

Information based on:
OMAP4430 Public ROM Code API Functional Specfication revision 0.6 (Oct
27, 2010)
OMAP4440 Public ROM Code API Functional Specfication revision 0.1 (Oct
27, 2010)
Aegis ROM Code Memory and Peripheral Booting Functional Specification
version 1.00 (Jan 21, 2014)

Signed-off-by: Nishanth Menon <nm@ti.com>
---
Changed in V2: document data update for Aegis rom code doc

V1: https://patchwork.kernel.org/patch/5560131/

 arch/arm/mach-omap2/common.h       |    1 +
 arch/arm/mach-omap2/omap-secure.h  |    1 +
 arch/arm/mach-omap2/omap-smc.S     |   20 ++++++++++++++++++++
 arch/arm/mach-omap2/omap4-common.c |   15 +++++++++++++++
 4 files changed, 37 insertions(+)

diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
index 19c9144..d5f8a9c 100644
--- a/arch/arm/mach-omap2/common.h
+++ b/arch/arm/mach-omap2/common.h
@@ -240,6 +240,7 @@ extern void gic_dist_enable(void);
 extern bool gic_dist_disabled(void);
 extern void gic_timer_retrigger(void);
 extern void omap_smc1(u32 fn, u32 arg);
+extern void omap_smc1_2(u32 fn, u32 arg1, u32 arg2);
 extern void __iomem *omap4_get_sar_ram_base(void);
 extern void omap_do_wfi(void);
 
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index dec2b05..338fdab 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -42,6 +42,7 @@
 #define OMAP4_MON_L2X0_DBG_CTRL_INDEX	0x100
 #define OMAP4_MON_L2X0_CTRL_INDEX	0x102
 #define OMAP4_MON_L2X0_AUXCTRL_INDEX	0x109
+#define OMAP4_MON_L2X0_SETLATENCY_INDEX	0x112
 #define OMAP4_MON_L2X0_PREFETCH_INDEX	0x113
 
 #define OMAP5_DRA7_MON_SET_CNTFRQ_INDEX	0x109
diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
index fd90125..caf2bd1 100644
--- a/arch/arm/mach-omap2/omap-smc.S
+++ b/arch/arm/mach-omap2/omap-smc.S
@@ -33,6 +33,26 @@ ENTRY(omap_smc1)
 	ldmfd   sp!, {r2-r12, pc}
 ENDPROC(omap_smc1)
 
+/*
+ * This is common routine to manage secure monitor API
+ * used to modify the PL310 secure registers.
+ * 'r0' and 'r1' contains the value to be modified and 'r12' contains
+ * the monitor API number. It uses few CPU registers
+ * internally and hence they need be backed up including
+ * link register "lr".
+ * Function signature : void omap_smc1_2(u32 fn, u32 arg1, u32 arg2)
+ */
+
+ENTRY(omap_smc1_2)
+	stmfd   sp!, {r2-r12, lr}
+	mov	r12, r0
+	mov 	r0, r1
+	mov 	r1, r2
+	dsb
+	smc	#0
+	ldmfd   sp!, {r2-r12, pc}
+ENDPROC(omap_smc1_2)
+
 /**
  * u32 omap_smc2(u32 id, u32 falg, u32 pargs)
  * Low level common routine for secure HAL and PPA APIs.
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c
index fe99cef..25a0b2f 100644
--- a/arch/arm/mach-omap2/omap4-common.c
+++ b/arch/arm/mach-omap2/omap4-common.c
@@ -191,6 +191,21 @@ void omap4_l2c310_write_sec(unsigned long val, unsigned reg)
 		pr_info_once("OMAP L2C310: ROM does not support power control setting\n");
 		return;
 
+	case L310_TAG_LATENCY_CTRL:
+	case L310_DATA_LATENCY_CTRL:
+	{
+		void __iomem *base = omap4_get_l2cache_base();
+		u32 data_latency, tag_latency;
+
+		tag_latency = (reg == L310_TAG_LATENCY_CTRL) ? val :
+			       readl_relaxed(base + L310_TAG_LATENCY_CTRL);
+		data_latency = (reg == L310_DATA_LATENCY_CTRL) ? val :
+			       readl_relaxed(base + L310_DATA_LATENCY_CTRL);
+		omap_smc1_2(OMAP4_MON_L2X0_SETLATENCY_INDEX, tag_latency,
+			    data_latency);
+		return;
+	}
+
 	default:
 		WARN_ONCE(1, "OMAP L2C310: ignoring write to reg 0x%x\n", reg);
 		return;
-- 
1.7.9.5

  reply	other threads:[~2015-01-02 17:43 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-02 17:43 [PATCH V2 0/2] ARM: l2c: OMAP4/AM437x: Additional register programming support Nishanth Menon
2015-01-02 17:43 ` Nishanth Menon [this message]
2015-01-02 17:43 ` [PATCH V2 2/2] ARM: l2c: AM437x: Introduce support for cache filter programming Nishanth Menon
2015-01-03  6:40   ` Tomasz Figa
2015-01-03 15:34     ` Nishanth Menon
2015-01-03 16:16       ` Tomasz Figa
2015-01-03 16:45         ` Nishanth Menon
2015-01-04  7:47           ` Tomasz Figa
2015-01-02 18:46 ` [PATCH V2 0/2] ARM: l2c: OMAP4/AM437x: Additional register programming support santosh.shilimkar
2015-01-02 19:47   ` Nishanth Menon
2015-01-03  0:23     ` Tony Lindgren
2015-01-03  6:42       ` Tomasz Figa
2015-01-03 15:39         ` [PATCH V2 0/2] ARM: l2c: OMAP4/AM437x: Additional register programming support.\ Nishanth Menon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1420220628-23742-2-git-send-email-nm@ti.com \
    --to=nm@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=nsekhar@ti.com \
    --cc=ssantosh@kernel.org \
    --cc=tomasz.figa@gmail.com \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).