aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhalid Aziz <khalid.aziz@oracle.com>2015-12-17 12:33:50 -0500
committerDavid S. Miller <davem@davemloft.net>2015-12-24 12:05:06 -0500
commit82924e542f20e645bc7de86e2889fe3fb0858566 (patch)
tree761f8c93f58d6c9180ad714d684ad14c6144bf22
parent01fd3c2744540ae7554bf098a9615a8310c6fc13 (diff)
sparc64: Add ADI capability to cpu capabilities
Add ADI (Application Data Integrity) capability to cpu capabilities list. ADI capability allows virtual addresses to be encoded with a tag in bits 63-60. This tag serves as an access control key for the regions of virtual address with ADI enabled and a key set on them. Hypervisor encodes this capability as "adp" in "hwcap-list" property in machine description. Signed-off-by: Khalid Aziz <khalid.aziz@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/sparc/include/asm/elf_64.h1
-rw-r--r--arch/sparc/kernel/setup_64.c9
2 files changed, 6 insertions, 4 deletions
diff --git a/arch/sparc/include/asm/elf_64.h b/arch/sparc/include/asm/elf_64.h
index 370ca1e71ffb..93310837c2df 100644
--- a/arch/sparc/include/asm/elf_64.h
+++ b/arch/sparc/include/asm/elf_64.h
@@ -95,6 +95,7 @@
95 * really available. So we simply advertise only "crypto" support. 95 * really available. So we simply advertise only "crypto" support.
96 */ 96 */
97#define HWCAP_SPARC_CRYPTO 0x04000000 /* CRYPTO insns available */ 97#define HWCAP_SPARC_CRYPTO 0x04000000 /* CRYPTO insns available */
98#define HWCAP_SPARC_ADI 0x08000000 /* ADI available */
98 99
99#define CORE_DUMP_USE_REGSET 100#define CORE_DUMP_USE_REGSET
100 101
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
index f7b261749383..f3185e2b028b 100644
--- a/arch/sparc/kernel/setup_64.c
+++ b/arch/sparc/kernel/setup_64.c
@@ -380,7 +380,8 @@ static const char *hwcaps[] = {
380 */ 380 */
381 "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2", 381 "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
382 "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau", 382 "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau",
383 "ima", "cspare", "pause", "cbcond", 383 "ima", "cspare", "pause", "cbcond", NULL /*reserved for crypto */,
384 "adp",
384}; 385};
385 386
386static const char *crypto_hwcaps[] = { 387static const char *crypto_hwcaps[] = {
@@ -396,7 +397,7 @@ void cpucap_info(struct seq_file *m)
396 seq_puts(m, "cpucaps\t\t: "); 397 seq_puts(m, "cpucaps\t\t: ");
397 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) { 398 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) {
398 unsigned long bit = 1UL << i; 399 unsigned long bit = 1UL << i;
399 if (caps & bit) { 400 if (hwcaps[i] && (caps & bit)) {
400 seq_printf(m, "%s%s", 401 seq_printf(m, "%s%s",
401 printed ? "," : "", hwcaps[i]); 402 printed ? "," : "", hwcaps[i]);
402 printed++; 403 printed++;
@@ -450,7 +451,7 @@ static void __init report_hwcaps(unsigned long caps)
450 451
451 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) { 452 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) {
452 unsigned long bit = 1UL << i; 453 unsigned long bit = 1UL << i;
453 if (caps & bit) 454 if (hwcaps[i] && (caps & bit))
454 report_one_hwcap(&printed, hwcaps[i]); 455 report_one_hwcap(&printed, hwcaps[i]);
455 } 456 }
456 if (caps & HWCAP_SPARC_CRYPTO) 457 if (caps & HWCAP_SPARC_CRYPTO)
@@ -485,7 +486,7 @@ static unsigned long __init mdesc_cpu_hwcap_list(void)
485 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) { 486 for (i = 0; i < ARRAY_SIZE(hwcaps); i++) {
486 unsigned long bit = 1UL << i; 487 unsigned long bit = 1UL << i;
487 488
488 if (!strcmp(prop, hwcaps[i])) { 489 if (hwcaps[i] && !strcmp(prop, hwcaps[i])) {
489 caps |= bit; 490 caps |= bit;
490 break; 491 break;
491 } 492 }