From: Will Schmidt <will_schmidt@vnet.ibm.com>
To: linuxppc-dev list <linuxppc-dev@ozlabs.org>, paulus@samba.org
Subject: [RFC , PATCH] support for the ibm,pa_features cpu property
Date: Fri, 28 Apr 2006 13:41:24 -0500 [thread overview]
Message-ID: <1146249684.27214.18.camel@localhost.localdomain> (raw)
To determine if our processors support some features, such as large
pages, we should be using the ibm,pa_features property, rather than just
the PVR values.
This is an initial pass at the functionality. This has been tested in
the case where the property is missing, but still needs to be tested
against a system where the property actually exists. :-o
diff --git a/arch/powerpc/kernel/setup_64.c
b/arch/powerpc/kernel/setup_64.c
index 13e91c4..78ad054 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -106,6 +106,65 @@ static struct notifier_block ppc64_panic
.priority = INT_MIN /* may not return; must be done last */
};
+/*
+ * ibm,pa-features is a per-cpu property that contains a 2 byte header
+ * plus up to 256 bytes worth of processor attributes. First header
+ * byte specifies the number of bytes implemented by the platform.
+ * Second header byte is an "attribute-specifier" type, which should
+ * be zero. Remainder of the data consists of ones and zeros.
+ * Implementation: Pass in the byte and bit offset for the feature
+ * that we are interested in. The function will return -1 if the
+ * pa-features property is missing, or a 1/0 to indicate if the feature
+ * is supported/not supported.
+ */
+
+static int get_pa_features(int pabyte,int pabit)
+{
+ struct device_node *cpu;
+ char *pa_feature_table;
+
+ cpu = of_find_node_by_type(NULL, "cpu");
+ pa_feature_table =
+ (char *)get_property(cpu, "ibm,pa-features", NULL);
+
+ if ( pa_feature_table == NULL ) {
+ printk("ibm,pa-features property is missing.\n");
+ return -1;
+ }
+
+ /* sanity check */
+ if ( pabyte > pa_feature_table[0] ) {
+ printk("%s: %d out of range for table of size %d\n",
+ __FUNCTION__,pabyte,pa_feature_table[0]);
+ return -1;
+ }
+
+ return pa_feature_table[2+pabyte*8+pabit];
+}
+
+/*
+ * set values within the cur_cpu_spec table according to
+ * the ibm,pa_features property.
+ * potential entries include:
+ * Byte 0, bit 1 - FPU available
+ * Byte 1, bit 2 - Large Pages
+ * Byte 2, bit 3 - DAR set on alignment Interrupt.
+ */
+static void add_cpu_features()
+{
+ /* if no property, bail early */
+ if (get_pa_features(0,0) == -1 ) return;
+
+ if (get_pa_features(1,2) ) {
+ printk("Adding CI_LARGE_PAGE to cur_cpu_spec \n");
+ cur_cpu_spec->cpu_features |= CPU_FTR_CI_LARGE_PAGE;
+ }
+
+ /* add more here... */
+
+}
+
+
#ifdef CONFIG_SMP
static int smt_enabled_cmdline;
@@ -425,6 +484,8 @@ void __init setup_system(void)
parse_early_param();
+ add_cpu_features();
+
check_smt_enabled();
smp_setup_cpu_maps();
next reply other threads:[~2006-04-28 18:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-28 18:41 Will Schmidt [this message]
2006-04-28 19:21 ` [RFC , PATCH] support for the ibm,pa_features cpu property Olof Johansson
2006-04-29 1:57 ` Paul Mackerras
2006-04-29 3:46 ` Olof Johansson
2006-04-28 19:31 ` Nathan Lynch
2006-04-28 21:53 ` Will Schmidt
2006-04-29 2:20 ` Paul Mackerras
2006-04-29 2:38 ` Stephen Rothwell
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=1146249684.27214.18.camel@localhost.localdomain \
--to=will_schmidt@vnet.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.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 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).