diff options
author | Robert Jennings <rcj@linux.vnet.ibm.com> | 2008-08-15 15:07:31 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-08-18 00:22:34 -0400 |
commit | 81f14997e8e8a10eb75ca593674d2b0c94129a21 (patch) | |
tree | aaf13e68aed1e8ce33ff98d1fa8a243180aeaad9 /arch/powerpc/platforms/pseries | |
parent | 22b8f9ee4a91638a4c8f57e957a91cf49788332a (diff) |
powerpc: Make CMO paging space pool ID and page size available
During platform setup, save off the primary/secondary paging space
pool IDs and the page size. Added accessors in hvcall.h for these
variables. This is needed for a subsequent fix.
Submitted-by: Robert Jennings <rcj@linux.vnet.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/pseries')
-rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 063a0d2fba30..3ce8a139b85d 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -68,6 +68,9 @@ | |||
68 | #include "plpar_wrappers.h" | 68 | #include "plpar_wrappers.h" |
69 | #include "pseries.h" | 69 | #include "pseries.h" |
70 | 70 | ||
71 | int CMO_PrPSP = -1; | ||
72 | int CMO_SecPSP = -1; | ||
73 | unsigned long CMO_PageSize = (ASM_CONST(1) << IOMMU_PAGE_SHIFT); | ||
71 | 74 | ||
72 | int fwnmi_active; /* TRUE if an FWNMI handler is present */ | 75 | int fwnmi_active; /* TRUE if an FWNMI handler is present */ |
73 | 76 | ||
@@ -325,8 +328,7 @@ void pSeries_cmo_feature_init(void) | |||
325 | { | 328 | { |
326 | char *ptr, *key, *value, *end; | 329 | char *ptr, *key, *value, *end; |
327 | int call_status; | 330 | int call_status; |
328 | int PrPSP = -1; | 331 | int page_order = IOMMU_PAGE_SHIFT; |
329 | int SecPSP = -1; | ||
330 | 332 | ||
331 | pr_debug(" -> fw_cmo_feature_init()\n"); | 333 | pr_debug(" -> fw_cmo_feature_init()\n"); |
332 | spin_lock(&rtas_data_buf_lock); | 334 | spin_lock(&rtas_data_buf_lock); |
@@ -365,21 +367,31 @@ void pSeries_cmo_feature_init(void) | |||
365 | break; | 367 | break; |
366 | } | 368 | } |
367 | 369 | ||
368 | if (0 == strcmp(key, "PrPSP")) | 370 | if (0 == strcmp(key, "CMOPageSize")) |
369 | PrPSP = simple_strtol(value, NULL, 10); | 371 | page_order = simple_strtol(value, NULL, 10); |
372 | else if (0 == strcmp(key, "PrPSP")) | ||
373 | CMO_PrPSP = simple_strtol(value, NULL, 10); | ||
370 | else if (0 == strcmp(key, "SecPSP")) | 374 | else if (0 == strcmp(key, "SecPSP")) |
371 | SecPSP = simple_strtol(value, NULL, 10); | 375 | CMO_SecPSP = simple_strtol(value, NULL, 10); |
372 | value = key = ptr + 1; | 376 | value = key = ptr + 1; |
373 | } | 377 | } |
374 | ptr++; | 378 | ptr++; |
375 | } | 379 | } |
376 | 380 | ||
377 | if (PrPSP != -1 || SecPSP != -1) { | 381 | /* Page size is returned as the power of 2 of the page size, |
382 | * convert to the page size in bytes before returning | ||
383 | */ | ||
384 | CMO_PageSize = 1 << page_order; | ||
385 | pr_debug("CMO_PageSize = %lu\n", CMO_PageSize); | ||
386 | |||
387 | if (CMO_PrPSP != -1 || CMO_SecPSP != -1) { | ||
378 | pr_info("CMO enabled\n"); | 388 | pr_info("CMO enabled\n"); |
379 | pr_debug("CMO enabled, PrPSP=%d, SecPSP=%d\n", PrPSP, SecPSP); | 389 | pr_debug("CMO enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP, |
390 | CMO_SecPSP); | ||
380 | powerpc_firmware_features |= FW_FEATURE_CMO; | 391 | powerpc_firmware_features |= FW_FEATURE_CMO; |
381 | } else | 392 | } else |
382 | pr_debug("CMO not enabled, PrPSP=%d, SecPSP=%d\n", PrPSP, SecPSP); | 393 | pr_debug("CMO not enabled, PrPSP=%d, SecPSP=%d\n", CMO_PrPSP, |
394 | CMO_SecPSP); | ||
383 | spin_unlock(&rtas_data_buf_lock); | 395 | spin_unlock(&rtas_data_buf_lock); |
384 | pr_debug(" <- fw_cmo_feature_init()\n"); | 396 | pr_debug(" <- fw_cmo_feature_init()\n"); |
385 | } | 397 | } |