From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linuxppc-dev@ozlabs.org
Subject: [RFC PATCH 10/10] powerpc/64: Hard code cache geometry on POWER8
Date: Wed, 17 Aug 2016 15:39:17 +1000 [thread overview]
Message-ID: <1471412357-3477-10-git-send-email-benh@kernel.crashing.org> (raw)
In-Reply-To: <1471412357-3477-1-git-send-email-benh@kernel.crashing.org>
All shipping firmware versions have it wrong in the device-tree
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
arch/powerpc/kernel/setup_64.c | 52 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 49 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 78d28ca..1243062 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -255,7 +255,7 @@ static void cpu_ready_for_interrupts(void)
void __init early_setup(unsigned long dt_ptr)
{
- static __initdata struct paca_struct boot_paca;
+ static struct paca_struct boot_paca __initdata ;
/* -------- printk is _NOT_ safe to use here ! ------- */
@@ -483,13 +483,59 @@ static bool __init parse_cache_info(struct device_node *np,
return success;
}
+static void __init populate_p8_cache_info(void)
+{
+ static const struct ppc_cache_info p8_l1i __initconst = {
+ .size = 0x8000,
+ .line_size = 128,
+ .block_size = 128,
+ .log_block_size = 7,
+ .blocks_per_page = PAGE_SIZE / 128,
+ .sets = 32
+ };
+ static const struct ppc_cache_info p8_l1d __initconst = {
+ .size = 0x10000,
+ .line_size = 128,
+ .block_size = 128,
+ .log_block_size = 7,
+ .blocks_per_page = PAGE_SIZE / 128,
+ .sets = 64
+ };
+ static const struct ppc_cache_info p8_l2 __initconst = {
+ .size = 0x80000,
+ .line_size = 128,
+ .sets = 512
+ };
+ static const struct ppc_cache_info p8_l3 __initconst = {
+ .size = 0x800000,
+ .line_size = 128,
+ .sets = 8192
+ };
+ ppc64_caches.l1i = p8_l1i;
+ ppc64_caches.l1d = p8_l1d;
+ ppc64_caches.l2 = p8_l2;
+ ppc64_caches.l3 = p8_l3;
+}
+
void __init initialize_cache_info(void)
{
- struct device_node *cpu, *l2, *l3 = NULL;
+ struct device_node *cpu = NULL, *l2, *l3 = NULL;
+ u32 pvr;
DBG(" -> initialize_cache_info()\n");
- cpu = of_find_node_by_type(NULL, "cpu");
+ /*
+ * All shipping POWER8 machines have a firmware bug that
+ * puts incorrect information in the device-tree. This will
+ * be (hopefully) fixed for future chips but for now hard
+ * code the values if we are running on one of these
+ */
+ pvr = PVR_VER(mfspr(SPRN_PVR));
+ if (pvr == PVR_POWER8 || pvr == PVR_POWER8E ||
+ pvr == PVR_POWER8NVL)
+ populate_p8_cache_info();
+ else
+ cpu = of_find_node_by_type(NULL, "cpu");
/*
* We're assuming *all* of the CPUs have the same
--
2.7.4
prev parent reply other threads:[~2016-08-17 5:43 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-17 5:39 [RFC PATCH 01/10] powerpc: Move ARCH_DLINFO out of uapi Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 02/10] powerpc: Move {d, i, u}cache_bsize definitions to a common place Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 03/10] powerpc: A new cache shape aux vectors Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 04/10] powerpc: Remove obsolete comment about patching instructions Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 05/10] powerpc/64: Fix naming of cache block vs. cache line Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 06/10] powerpc/64: Retrieve number of L1 cache sets from device-tree Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 07/10] powerpc/64: Build L1 cache shape info for userspace Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 08/10] powerpc/64: Clean up ppc64_caches using a struct per cache Benjamin Herrenschmidt
2016-08-17 5:39 ` [RFC PATCH 09/10] powerpc/64: Add L2 and L3 cache shape info Benjamin Herrenschmidt
2016-08-17 5:39 ` Benjamin Herrenschmidt [this message]
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=1471412357-3477-10-git-send-email-benh@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.