From: Robert Jennings <rcj@linux.vnet.ibm.com>
To: paulus@samba.org
Cc: Brian King <brking@linux.vnet.ibm.com>,
linuxppc-dev@ozlabs.org,
David Darrington <ddarring@linux.vnet.ibm.com>
Subject: [PATCH 05/18 v2] powerpc: Enable CMO feature during platform setup
Date: Wed, 25 Jun 2008 15:15:25 -0500 [thread overview]
Message-ID: <20080625201524.GG17020@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080625201202.GB17020@linux.vnet.ibm.com>
=46rom: Robert Jennings <rcj@linux.vnet.ibm.com>
For Cooperative Memory Overcommitment (CMO), set the FW_FEATURE_CMO
flag in powerpc_firmware_features from the rtas ibm,get-system-parameters
table prior to calling iommu_init_early_pSeries.
With this, any CMO specific functionality can be controlled by checking:
firmware_has_feature(FW_FEATURE_CMO)
Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com>
---
arch/powerpc/platforms/pseries/setup.c | 71 ++++++++++++++++++++++++++++=
+++++
include/asm-powerpc/firmware.h | 3 +
2 files changed, 73 insertions(+), 1 deletion(-)
Index: b/arch/powerpc/platforms/pseries/setup.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -314,6 +314,76 @@ static int pseries_set_xdabr(unsigned lo
H_DABRX_KERNEL | H_DABRX_USER);
}
=20
+#define CMO_CHARACTERISTICS_TOKEN 44
+#define CMO_MAXLENGTH 1026
+
+/**
+ * fw_cmo_feature_init - FW_FEATURE_CMO is not stored in ibm,hypertas-func=
tions,
+ * handle that here. (Stolen from parse_system_parameter_string)
+ */
+void pSeries_cmo_feature_init(void)
+{
+ char *ptr, *key, *value, *end;
+ int call_status;
+ int PrPSP =3D -1;
+ int SecPSP =3D -1;
+
+ pr_debug(" -> fw_cmo_feature_init()\n");
+ spin_lock(&rtas_data_buf_lock);
+ memset(rtas_data_buf, 0, RTAS_DATA_BUF_SIZE);
+ call_status =3D rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
+ NULL,
+ CMO_CHARACTERISTICS_TOKEN,
+ __pa(rtas_data_buf),
+ RTAS_DATA_BUF_SIZE);
+
+ if (call_status !=3D 0) {
+ spin_unlock(&rtas_data_buf_lock);
+ pr_debug("CMO not available\n");
+ pr_debug(" <- fw_cmo_feature_init()\n");
+ return;
+ }
+
+ end =3D rtas_data_buf + CMO_MAXLENGTH - 2;
+ ptr =3D rtas_data_buf + 2; /* step over strlen value */
+ key =3D value =3D ptr;
+
+ while (*ptr && (ptr <=3D end)) {
+ /* Separate the key and value by replacing '=3D' with '\0' and
+ * point the value at the string after the '=3D'
+ */
+ if (ptr[0] =3D=3D '=3D') {
+ ptr[0] =3D '\0';
+ value =3D ptr + 1;
+ } else if (ptr[0] =3D=3D '\0' || ptr[0] =3D=3D ',') {
+ /* Terminate the string containing the key/value pair */
+ ptr[0] =3D '\0';
+
+ if (key =3D=3D value) {
+ pr_debug("Malformed key/value pair\n");
+ /* Never found a '=3D', end processing */
+ break;
+ }
+
+ if (0 =3D=3D strcmp(key, "PrPSP"))
+ PrPSP =3D simple_strtoul(value, NULL, 10);
+ else if (0 =3D=3D strcmp(key, "SecPSP"))
+ SecPSP =3D simple_strtoul(value, NULL, 10);
+ value =3D key =3D ptr + 1;
+ }
+ ptr++;
+ }
+
+ if (PrPSP !=3D -1 || SecPSP !=3D -1) {
+ pr_info("CMO enabled\n");
+ pr_debug("CMO enabled, PrPSP=3D%d, SecPSP=3D%d\n", PrPSP, SecPSP);
+ powerpc_firmware_features |=3D FW_FEATURE_CMO;
+ } else
+ pr_debug("CMO not enabled, PrPSP=3D%d, SecPSP=3D%d\n", PrPSP, SecPSP);
+ spin_unlock(&rtas_data_buf_lock);
+ pr_debug(" <- fw_cmo_feature_init()\n");
+}
+
/*
* Early initialization. Relocation is on but do not reference unbolted p=
ages
*/
@@ -329,6 +399,7 @@ static void __init pSeries_init_early(vo
else if (firmware_has_feature(FW_FEATURE_XDABR))
ppc_md.set_dabr =3D pseries_set_xdabr;
=20
+ pSeries_cmo_feature_init();
iommu_init_early_pSeries();
=20
pr_debug(" <- pSeries_init_early()\n");
Index: b/include/asm-powerpc/firmware.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/include/asm-powerpc/firmware.h
+++ b/include/asm-powerpc/firmware.h
@@ -45,6 +45,7 @@
#define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000)
#define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000)
#define FW_FEATURE_BULK_REMOVE ASM_CONST(0x0000000002000000)
+#define FW_FEATURE_CMO ASM_CONST(0x0000000004000000)
=20
#ifndef __ASSEMBLY__
=20
@@ -57,7 +58,7 @@ enum {
FW_FEATURE_MIGRATE | FW_FEATURE_PERFMON | FW_FEATURE_CRQ |
FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN |
FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE |
- FW_FEATURE_SPLPAR | FW_FEATURE_LPAR,
+ FW_FEATURE_SPLPAR | FW_FEATURE_LPAR | FW_FEATURE_CMO,
FW_FEATURE_PSERIES_ALWAYS =3D 0,
FW_FEATURE_ISERIES_POSSIBLE =3D FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
FW_FEATURE_ISERIES_ALWAYS =3D FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
next prev parent reply other threads:[~2008-06-25 20:15 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-25 20:12 [PATCH 00/18 v2] powerpc: pSeries Cooperative Memory Overcommitment support Robert Jennings
2008-06-25 20:14 ` [PATCH 01/18 v2] powerpc: Remove extraneous error reporting for hcall failures in lparcfg Robert Jennings
2008-06-25 20:14 ` [PATCH 02/18 v2] powerpc: Split processor entitlement retrieval and gathering to helper routines Robert Jennings
2008-06-25 20:14 ` [PATCH 03/18 v2] powerpc: Add memory entitlement capabilities to /proc/ppc64/lparcfg Robert Jennings
2008-06-25 20:15 ` [PATCH 04/18 v2] powerpc: Split retrieval of processor entitlement data into a helper routine Robert Jennings
2008-06-25 20:15 ` Robert Jennings [this message]
2008-06-25 20:15 ` [PATCH 06/18 v2] powerpc: Utilities to set firmware page state Robert Jennings
2008-06-25 20:16 ` [PATCH 07/18 v2] powerpc: Add collaborative memory manager Robert Jennings
2008-06-25 20:17 ` [PATCH 08/18 v2] powerpc: Do not probe PCI buses or eBus devices if CMO is enabled Robert Jennings
2008-06-30 4:32 ` Paul Mackerras
2008-06-30 21:56 ` Brian King
2008-06-25 20:17 ` [PATCH 09/18 v2] powerpc: Add CMO paging statistics Robert Jennings
2008-06-25 20:17 ` [PATCH 10/18 v2] powerpc: iommu enablement for CMO Robert Jennings
2008-06-25 20:18 ` [PATCH 11/18 v2] powerpc: vio bus support " Robert Jennings
2008-06-25 20:18 ` [PATCH 12/18 v2] powerpc: Verify CMO memory entitlement updates with virtual I/O Robert Jennings
2008-06-25 20:18 ` [PATCH 13/18 v2] powerpc: hvc enablement for CMO Robert Jennings
2008-06-25 20:18 ` [PATCH 14/18 v2] powerpc: hvcs " Robert Jennings
2008-06-25 20:19 ` [PATCH 15/18 v2] ibmveth: Automatically enable larger rx buffer pools for larger mtu Robert Jennings
2008-06-25 20:19 ` [PATCH 16/18 v2] ibmveth: enable driver for CMO Robert Jennings
2008-06-25 20:19 ` [PATCH 17/18 v2] ibmvscsi: driver enablement " Robert Jennings
2008-06-25 20:19 ` Robert Jennings
2008-06-25 20:19 ` [PATCH 18/18 v2] powerpc: Update arch vector to indicate support " Robert Jennings
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=20080625201524.GG17020@linux.vnet.ibm.com \
--to=rcj@linux.vnet.ibm.com \
--cc=brking@linux.vnet.ibm.com \
--cc=ddarring@linux.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 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.