From: rmk+kernel@arm•linux.org.uk (Russell King)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH 16/75] ARM: l2c: clean up OF initialisation a bit
Date: Fri, 28 Mar 2014 15:15:41 +0000 [thread overview]
Message-ID: <E1WTYVR-0005dr-ON@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20140328151249.GJ7528@n2100.arm.linux.org.uk>
Rather than having a boolean and other tricks to disable some bits of
l2x0_init(), split this function into two parts: a common part shared
between OF and non-OF, and the non-OF part.
The common part can take a block of function pointers, and the cache
ID (to cope with Aurora's DT specified ID.) Eliminate the redundant
setting of l2x0_base in the OF case, moving it to the non-OF init
function.
This allows us to localise the OF-specific initialisation handling
from the non-OF handling.
Signed-off-by: Russell King <rmk+kernel@arm•linux.org.uk>
---
arch/arm/mm/cache-l2x0.c | 66 +++++++++++++++++++++++++++++-------------------
1 file changed, 40 insertions(+), 26 deletions(-)
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index c39602ef2cdd..0d83b24b7971 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -42,14 +42,8 @@ static u32 l2x0_way_mask; /* Bitmask of active ways */
static u32 l2x0_size;
static unsigned long sync_reg_offset = L2X0_CACHE_SYNC;
-/* Aurora don't have the cache ID register available, so we have to
- * pass it though the device tree */
-static u32 cache_id_part_number_from_dt;
-
struct l2x0_regs l2x0_saved_regs;
-static bool of_init = false;
-
/*
* Common code for all cache controllers.
*/
@@ -343,20 +337,26 @@ static void l2x0_unlock(u32 cache_id)
l2c_unlock(l2x0_base, lockregs);
}
-void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
+static const struct l2c_init_data l2x0_init_fns __initconst = {
+ .outer_cache = {
+ .inv_range = l2x0_inv_range,
+ .clean_range = l2x0_clean_range,
+ .flush_range = l2x0_flush_range,
+ .flush_all = l2x0_flush_all,
+ .disable = l2x0_disable,
+ .sync = l2x0_cache_sync,
+ },
+};
+
+static void __init __l2c_init(const struct l2c_init_data *data,
+ u32 aux_val, u32 aux_mask, u32 cache_id)
{
u32 aux;
- u32 cache_id;
u32 way_size = 0;
int ways;
int way_size_shift = L2X0_WAY_SIZE_SHIFT;
const char *type;
- l2x0_base = base;
- if (cache_id_part_number_from_dt)
- cache_id = cache_id_part_number_from_dt;
- else
- cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID);
aux = readl_relaxed(l2x0_base + L2X0_AUX_CTRL);
aux &= aux_mask;
@@ -374,8 +374,6 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
/* Unmapped register. */
sync_reg_offset = L2X0_DUMMY_REG;
#endif
- if ((cache_id & L2X0_CACHE_ID_RTL_MASK) <= L310_CACHE_ID_RTL_R3P0)
- outer_cache.set_debug = pl310_set_debug;
break;
case L2X0_CACHE_ID_PART_L210:
ways = (aux >> 13) & 0xf;
@@ -430,23 +428,35 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
/* Save the value for resuming. */
l2x0_saved_regs.aux_ctrl = aux;
- if (!of_init) {
- outer_cache.inv_range = l2x0_inv_range;
- outer_cache.clean_range = l2x0_clean_range;
- outer_cache.flush_range = l2x0_flush_range;
- outer_cache.sync = l2x0_cache_sync;
- outer_cache.flush_all = l2x0_flush_all;
- outer_cache.disable = l2x0_disable;
- }
+ outer_cache = data->outer_cache;
+
+ if ((cache_id & L2X0_CACHE_ID_PART_MASK) == L2X0_CACHE_ID_PART_L310 &&
+ (cache_id & L2X0_CACHE_ID_RTL_MASK) <= L310_CACHE_ID_RTL_R3P0)
+ outer_cache.set_debug = pl310_set_debug;
pr_info("%s cache controller enabled\n", type);
pr_info("l2x0: %d ways, CACHE_ID 0x%08x, AUX_CTRL 0x%08x, Cache size: %d kB\n",
ways, cache_id, aux, l2x0_size >> 10);
}
+void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
+{
+ u32 cache_id;
+
+ l2x0_base = base;
+
+ cache_id = readl_relaxed(base + L2X0_CACHE_ID);
+
+ __l2c_init(&l2x0_init_fns, aux_val, aux_mask, cache_id);
+}
+
#ifdef CONFIG_OF
static int l2_wt_override;
+/* Aurora don't have the cache ID register available, so we have to
+ * pass it though the device tree */
+static u32 cache_id_part_number_from_dt;
+
/*
* Note that the end addresses passed to Linux primitives are
* noninclusive, while the hardware cache range operations use
@@ -985,6 +995,7 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
const struct l2c_init_data *data;
struct device_node *np;
struct resource res;
+ u32 cache_id;
np = of_find_matching_node(NULL, l2x0_ids);
if (!np)
@@ -1015,9 +1026,12 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
if (data->save)
data->save();
- of_init = true;
- memcpy(&outer_cache, &data->outer_cache, sizeof(outer_cache));
- l2x0_init(l2x0_base, aux_val, aux_mask);
+ if (cache_id_part_number_from_dt)
+ cache_id = cache_id_part_number_from_dt;
+ else
+ cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID);
+
+ __l2c_init(data, aux_val, aux_mask, cache_id);
return 0;
}
--
1.8.3.1
next prev parent reply other threads:[~2014-03-28 15:15 UTC|newest]
Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-28 15:12 [PATCH 00/75] l2c series Russell King - ARM Linux
2014-03-28 15:14 ` [PATCH 01/75] ARM: l2c: remove outer_inv_all() method Russell King
2014-03-28 15:14 ` [PATCH 02/75] ARM: l2c: remove unnecessary call to outer_flush_all() Russell King
2014-03-28 15:14 ` [PATCH 03/75] ARM: l2c: avoid calling outer_flush_all() unnecessarily (Spear) Russell King
2014-03-28 15:14 ` [PATCH 04/75] ARM: l2c: omap2: remove ES1.0 support Russell King
2014-03-28 15:54 ` Tony Lindgren
2014-03-28 15:14 ` [PATCH 05/75] ARM: l2c: remove unnecessary UL-suffix to mask values Russell King
2014-03-28 15:50 ` Rob Herring
2014-03-28 15:56 ` Russell King - ARM Linux
2014-03-28 15:14 ` [PATCH 06/75] ARM: outer cache: add documentation of outer cache functions Russell King
2014-04-02 9:30 ` Michal Simek
2014-04-03 19:03 ` Russell King - ARM Linux
2014-03-28 15:14 ` [PATCH 07/75] ARM: outer cache: add WARN_ON() to outer_disable() Russell King
2014-03-28 15:15 ` [PATCH 08/75] ARM: l2c: add helper for L2 cache controller DT IDs Russell King
2014-03-28 15:15 ` [PATCH 09/75] ARM: l2c: tidy up l2x0_of_data declarations Russell King
2014-03-28 15:15 ` [PATCH 10/75] ARM: l2c: rename OF specific things, making l2x0_of_data available to all Russell King
2014-03-28 15:15 ` [PATCH 11/75] ARM: l2c: provide generic function for calling set_debug method Russell King
2014-03-28 15:15 ` [PATCH 12/75] ARM: l2c: split out cache unlock code Russell King
2014-03-28 15:15 ` [PATCH 13/75] ARM: l2c: provide generic helper for way-based operations Russell King
2014-03-28 15:15 ` [PATCH 14/75] ARM: l2c: rename cache_wait_way() Russell King
2014-03-28 15:15 ` [PATCH 15/75] ARM: l2c: add and use L2C revision constants Russell King
2014-04-02 9:37 ` Michal Simek
2014-04-03 19:06 ` Russell King - ARM Linux
2014-03-28 15:15 ` Russell King [this message]
2014-03-28 15:15 ` [PATCH 17/75] ARM: l2c: pass iomem address into data->save function Russell King
2014-03-28 15:15 ` [PATCH 18/75] ARM: l2c: move l2c save function to __l2c_init() Russell King
2014-03-28 15:15 ` [PATCH 19/75] ARM: l2c: group implementation specific code together Russell King
2014-03-28 15:16 ` [PATCH 20/75] ARM: l2c: provide enable method Russell King
2014-03-28 15:16 ` [PATCH 21/75] ARM: l2c: write auxctrl register before unlocking Russell King
2014-03-28 15:16 ` [PATCH 22/75] ARM: l2c: only write the auxiliary control register if required Russell King
2014-03-28 15:16 ` [PATCH 23/75] ARM: l2c: move aurora broadcast setup to enable function Russell King
2014-03-28 15:16 ` [PATCH 24/75] ARM: l2c: implement fixups for L2 cache controller quirks/errata Russell King
2014-03-28 15:16 ` [PATCH 25/75] ARM: l2c: clean up L2 cache initialisation messages Russell King
2014-03-28 15:16 ` [PATCH 26/75] ARM: l2c: move and add ARM L2C-2x0/L2C-310 save/resume code to non-OF Russell King
2014-03-28 15:16 ` [PATCH 27/75] ARM: l2c: clean up save/resume functions Russell King
2014-03-28 15:16 ` [PATCH 28/75] ARM: l2c: simplify l2x0 unlocking code Russell King
2014-03-28 15:16 ` [PATCH 29/75] ARM: l2c: move pl310_set_debug() into l2c-310 code Russell King
2014-03-28 15:16 ` [PATCH 30/75] ARM: l2c: add L2C-210 specific handlers Russell King
2014-03-28 15:17 ` [PATCH 31/75] ARM: l2c: implement L2C-310 erratum 727915 as a method override Russell King
2014-03-28 15:17 ` [PATCH 32/75] ARM: l2c: implement L2C-310 erratum 588369 " Russell King
2014-03-28 20:41 ` Rob Herring
2014-03-28 20:54 ` Russell King - ARM Linux
2014-03-28 15:17 ` [PATCH 33/75] ARM: l2c: use L2C-210 handlers for L2C-310 errata-less implementations Russell King
2014-03-28 15:17 ` [PATCH 34/75] ARM: l2c: add L2C-220 specific handlers Russell King
2014-03-28 15:17 ` [PATCH 35/75] ARM: l2c: convert Broadcom L2C-310 to new code Russell King
2014-03-28 15:17 ` [PATCH 36/75] ARM: l2c: remove obsolete l2x0 ops for non-OF init Russell King
2014-03-28 15:17 ` [PATCH 37/75] ARM: l2c: move type string into l2c_init_data structure Russell King
2014-03-28 15:17 ` [PATCH 38/75] ARM: l2c: add decode for L2C-220 cache ways Russell King
2014-03-28 15:17 ` [PATCH 39/75] ARM: l2c: move way size calculation data into l2c_init_data Russell King
2014-03-28 15:17 ` [PATCH 40/75] ARM: l2c: move errata configuration options to arch/arm/mm/Kconfig Russell King
2014-03-28 15:17 ` [PATCH 41/75] ARM: l2c: provide generic hook to intercept writes to secure registers Russell King
2014-03-28 20:51 ` Josh Cartwright
2014-03-28 21:00 ` Russell King - ARM Linux
2014-03-28 15:18 ` [PATCH 42/75] ARM: l2c: omap2: implement new write_sec method Russell King
2014-03-28 15:56 ` Tony Lindgren
2014-03-28 15:18 ` [PATCH 43/75] ARM: l2c: omap2: remove explicit SMI calls to enable L2 cache Russell King
2014-03-28 15:56 ` Tony Lindgren
2014-03-28 15:18 ` [PATCH 44/75] ARM: l2c: highbank: implement new write_sec method Russell King
2014-03-28 15:18 ` [PATCH 45/75] ARM: l2c: highbank: remove explicit SMI call in L2 cache initialisation Russell King
2014-03-28 15:18 ` [PATCH 46/75] ARM: l2c: ux500: implement dummy write_sec method Russell King
2014-03-28 20:46 ` Linus Walleij
2014-03-28 15:18 ` [PATCH 47/75] ARM: l2c: remove old .set_debug method Russell King
2014-03-28 15:18 ` [PATCH 48/75] ARM: l2c: implement L2C-310 erratum 752271 in core L2C code Russell King
2014-03-28 15:18 ` [PATCH 49/75] ARM: l2c: fix register naming Russell King
2014-03-28 16:00 ` Tony Lindgren
2014-03-28 21:02 ` Russell King - ARM Linux
2014-03-28 22:15 ` Tony Lindgren
2014-03-28 16:01 ` Tony Lindgren
2014-03-28 18:51 ` [STLinux Kernel] " Maxime Coquelin
2014-03-28 19:01 ` Linus Walleij
2014-03-28 15:18 ` [PATCH 50/75] ARM: l2c: add automatic enable of early BRESP Russell King
2014-03-28 15:18 ` [PATCH 51/75] ARM: l2c: remove platforms/SoCs setting " Russell King
2014-03-28 16:02 ` Tony Lindgren
2014-03-28 15:18 ` [PATCH 52/75] ARM: l2c: tegra: remove associativity and way size from aux_ctrl Russell King
2014-03-28 15:18 ` [PATCH 53/75] ARM: l2c: ux500: " Russell King
2014-03-28 20:47 ` Linus Walleij
2014-03-28 15:19 ` [PATCH 54/75] ARM: l2c: ux500: don't try to change the L2 cache auxiliary control register Russell King
2014-03-28 20:48 ` Linus Walleij
2014-03-28 15:19 ` [PATCH 55/75] ARM: l2c: cns3xxx: remove cache size override Russell King
2014-03-28 15:19 ` [PATCH 56/75] ARM: l2c: exynos: " Russell King
2014-03-28 15:19 ` [PATCH 57/75] ARM: l2c: nomadik: " Russell King
2014-03-31 6:59 ` Linus Walleij
2014-03-28 15:19 ` [PATCH 58/75] ARM: l2c: omap2: " Russell King
2014-03-28 16:03 ` Tony Lindgren
2014-03-28 21:09 ` Russell King - ARM Linux
2014-03-28 22:21 ` Tony Lindgren
2014-03-31 10:55 ` Russell King - ARM Linux
2014-03-28 15:19 ` [PATCH 59/75] ARM: l2c: prima2: " Russell King
2014-04-04 13:40 ` Barry Song
2014-04-04 14:10 ` Russell King - ARM Linux
2014-04-04 14:56 ` Barry Song
2014-03-28 15:19 ` [PATCH 60/75] ARM: l2c: shmobile: " Russell King
2014-03-28 15:19 ` [PATCH 61/75] ARM: l2c: spear13xx: " Russell King
2014-03-28 15:19 ` [PATCH 62/75] ARM: l2c: sti: " Russell King
2014-03-31 8:28 ` [[PATCH " Maxime Coquelin
2014-03-28 15:19 ` [PATCH 63/75] ARM: l2c: zynq: " Russell King
2014-04-02 8:08 ` Michal Simek
2014-04-02 11:06 ` Michal Simek
2014-04-02 11:37 ` Sekhar Nori
2014-04-03 19:13 ` Russell King - ARM Linux
2014-04-04 5:40 ` Sekhar Nori
2014-04-03 19:11 ` Russell King - ARM Linux
2014-04-04 5:26 ` Michal Simek
2014-03-28 15:19 ` [PATCH 64/75] ARM: l2c: realview: improve commentry about the L2 cache requirements Russell King
2014-03-28 15:19 ` [PATCH 65/75] ARM: l2c: kill L2X0_AUX_CTRL_MASK before anyone else makes use of this Russell King
2014-03-28 15:20 ` [PATCH 66/75] ARM: l2c: print a warning with L2C-310 caches if the cache size is modified Russell King
2014-03-28 15:20 ` [PATCH 67/75] ARM: l2c: vexpress ca9x4: move L2 cache initialisation earlier Russell King
2014-03-28 15:20 ` [PATCH 68/75] ARM: l2c: add L2C-310 power control DT properties Russell King
2014-03-28 15:20 ` [PATCH 69/75] ARM: l2c: check that DT files specify the required "cache-unified" property Russell King
2014-03-28 15:20 ` [PATCH 70/75] ARM: l2c: add warnings for stuff modifying aux_ctrl register values Russell King
2014-03-28 15:20 ` [PATCH 71/75] ARM: l2c: permit flush_all() on large flush_range() XXX Needs more thought XXX Russell King
2014-03-28 15:20 ` [PATCH 72/75] ARM: l2c: trial at enabling some Cortex-A9 optimisations Russell King
2014-03-28 15:20 ` [PATCH 73/75] ARM: l2c: move L2 cache register saving to a more sensible location Russell King
2014-04-01 18:56 ` Stephen Warren
2014-04-01 19:03 ` Stephen Warren
2014-04-01 23:09 ` Russell King - ARM Linux
2014-04-02 19:21 ` Stephen Warren
2014-04-03 18:52 ` Russell King - ARM Linux
2014-04-04 22:10 ` Stephen Warren
2014-04-01 22:59 ` Russell King - ARM Linux
2014-03-28 15:20 ` [PATCH 74/75] ARM: l2c: always enable low power modes Russell King
2014-03-28 15:42 ` Rob Herring
2014-03-28 15:51 ` Russell King - ARM Linux
2014-04-04 16:53 ` Sören Brinkmann
2014-04-04 19:17 ` Russell King - ARM Linux
2014-04-04 20:47 ` Sören Brinkmann
2014-03-28 15:20 ` [PATCH 75/75] ARM: l2c: imx: remove direct write to power control register Russell King
2014-04-03 6:33 ` Shawn Guo
2014-04-03 18:53 ` Russell King - ARM Linux
2014-04-03 23:10 ` Shawn Guo
2014-03-28 18:39 ` [PATCH 00/75] l2c series - Olof's boot failures Russell King - ARM Linux
2014-03-28 19:35 ` Matt Porter
2014-04-03 14:55 ` [PATCH 00/75] l2c series Michal Simek
2014-04-03 19:33 ` Russell King - ARM Linux
2014-04-04 7:12 ` Michal Simek
2014-04-04 19:28 ` Russell King - ARM Linux
2014-04-07 6:22 ` Michal Simek
2014-04-07 9:00 ` Russell King - ARM Linux
2014-04-07 9:12 ` Michal Simek
2014-04-07 15:52 ` Punnaiah Choudary Kalluri
2014-04-07 15:58 ` Russell King - ARM Linux
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=E1WTYVR-0005dr-ON@rmk-PC.arm.linux.org.uk \
--to=rmk+kernel@arm$(echo .)linux.org.uk \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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