From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linuxppc-dev@ozlabs.org
Subject: [RFC PATCH 07/10] powerpc/64: Build L1 cache shape info for userspace
Date: Wed, 17 Aug 2016 15:39:14 +1000 [thread overview]
Message-ID: <1471412357-3477-7-git-send-email-benh@kernel.crashing.org> (raw)
In-Reply-To: <1471412357-3477-1-git-send-email-benh@kernel.crashing.org>
Now that we have all the necessary information available we can
build the L1 cache shape info to be passed down to userspace via
the ELF AUX vectors.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
arch/powerpc/kernel/setup_64.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index d36b6f4..2079e2e 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -382,6 +382,34 @@ void smp_release_cpus(void)
}
#endif /* CONFIG_SMP || CONFIG_KEXEC */
+static long format_cache_shape(u32 size, u32 sets, u32 lsize)
+{
+ long result = 0;
+ u32 log2size = __ilog2(lsize);
+ u32 ways;
+
+ if (size == 0 || sets == 0)
+ return -1;
+ if (sets == 1)
+ ways = 0;
+ else
+ ways = size / (lsize * sets);
+ if (ways < 0x2ff)
+ result |= ways;
+ else
+ result |= 0x2ff;
+ if (log2size < 0xf)
+ result |= (log2size << 10);
+ else
+ result |= 0x3c00;
+ if (size >= 1024)
+ result |= (size >> 10) << 14;
+ else
+ result |= 0xfffffc000ul;
+
+ return result;
+}
+
/*
* Initialize some remaining members of the ppc64_caches and systemcfg
* structures
@@ -487,6 +515,12 @@ void __init initialize_cache_info(void)
/* For use by binfmt_elf */
dcache_bsize = ppc64_caches.dblock_size;
icache_bsize = ppc64_caches.iblock_size;
+ il1cache_shape = format_cache_shape(ppc64_caches.isize,
+ ppc64_caches.isets,
+ ppc64_caches.iline_size);
+ dl1cache_shape = format_cache_shape(ppc64_caches.dsize,
+ ppc64_caches.dsets,
+ ppc64_caches.dline_size);
DBG(" <- initialize_cache_info()\n");
}
--
2.7.4
next 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 ` Benjamin Herrenschmidt [this message]
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 ` [RFC PATCH 10/10] powerpc/64: Hard code cache geometry on POWER8 Benjamin Herrenschmidt
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-7-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.