diff options
| author | Khalid Aziz <khalid.aziz@oracle.com> | 2015-12-17 12:33:50 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-12-24 12:05:06 -0500 |
| commit | 82924e542f20e645bc7de86e2889fe3fb0858566 (patch) | |
| tree | 761f8c93f58d6c9180ad714d684ad14c6144bf22 | |
| parent | 01fd3c2744540ae7554bf098a9615a8310c6fc13 (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.h | 1 | ||||
| -rw-r--r-- | arch/sparc/kernel/setup_64.c | 9 |
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 | ||
| 386 | static const char *crypto_hwcaps[] = { | 387 | static 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 | } |
