diff options
Diffstat (limited to 'arch/sparc/kernel/setup_64.c')
-rw-r--r-- | arch/sparc/kernel/setup_64.c | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index 1414d16712b2..0800e71d8a88 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c | |||
@@ -340,7 +340,12 @@ static const char *hwcaps[] = { | |||
340 | */ | 340 | */ |
341 | "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2", | 341 | "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2", |
342 | "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau", | 342 | "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau", |
343 | "ima", "cspare", | 343 | "ima", "cspare", "pause", "cbcond", |
344 | }; | ||
345 | |||
346 | static const char *crypto_hwcaps[] = { | ||
347 | "aes", "des", "kasumi", "camellia", "md5", "sha1", "sha256", | ||
348 | "sha512", "mpmul", "montmul", "montsqr", "crc32c", | ||
344 | }; | 349 | }; |
345 | 350 | ||
346 | void cpucap_info(struct seq_file *m) | 351 | void cpucap_info(struct seq_file *m) |
@@ -357,27 +362,61 @@ void cpucap_info(struct seq_file *m) | |||
357 | printed++; | 362 | printed++; |
358 | } | 363 | } |
359 | } | 364 | } |
365 | if (caps & HWCAP_SPARC_CRYPTO) { | ||
366 | unsigned long cfr; | ||
367 | |||
368 | __asm__ __volatile__("rd %%asr26, %0" : "=r" (cfr)); | ||
369 | for (i = 0; i < ARRAY_SIZE(crypto_hwcaps); i++) { | ||
370 | unsigned long bit = 1UL << i; | ||
371 | if (cfr & bit) { | ||
372 | seq_printf(m, "%s%s", | ||
373 | printed ? "," : "", crypto_hwcaps[i]); | ||
374 | printed++; | ||
375 | } | ||
376 | } | ||
377 | } | ||
360 | seq_putc(m, '\n'); | 378 | seq_putc(m, '\n'); |
361 | } | 379 | } |
362 | 380 | ||
381 | static void __init report_one_hwcap(int *printed, const char *name) | ||
382 | { | ||
383 | if ((*printed) == 0) | ||
384 | printk(KERN_INFO "CPU CAPS: ["); | ||
385 | printk(KERN_CONT "%s%s", | ||
386 | (*printed) ? "," : "", name); | ||
387 | if (++(*printed) == 8) { | ||
388 | printk(KERN_CONT "]\n"); | ||
389 | *printed = 0; | ||
390 | } | ||
391 | } | ||
392 | |||
393 | static void __init report_crypto_hwcaps(int *printed) | ||
394 | { | ||
395 | unsigned long cfr; | ||
396 | int i; | ||
397 | |||
398 | __asm__ __volatile__("rd %%asr26, %0" : "=r" (cfr)); | ||
399 | |||
400 | for (i = 0; i < ARRAY_SIZE(crypto_hwcaps); i++) { | ||
401 | unsigned long bit = 1UL << i; | ||
402 | if (cfr & bit) | ||
403 | report_one_hwcap(printed, crypto_hwcaps[i]); | ||
404 | } | ||
405 | } | ||
406 | |||
363 | static void __init report_hwcaps(unsigned long caps) | 407 | static void __init report_hwcaps(unsigned long caps) |
364 | { | 408 | { |
365 | int i, printed = 0; | 409 | int i, printed = 0; |
366 | 410 | ||
367 | printk(KERN_INFO "CPU CAPS: ["); | ||
368 | for (i = 0; i < ARRAY_SIZE(hwcaps); i++) { | 411 | for (i = 0; i < ARRAY_SIZE(hwcaps); i++) { |
369 | unsigned long bit = 1UL << i; | 412 | unsigned long bit = 1UL << i; |
370 | if (caps & bit) { | 413 | if (caps & bit) |
371 | printk(KERN_CONT "%s%s", | 414 | report_one_hwcap(&printed, hwcaps[i]); |
372 | printed ? "," : "", hwcaps[i]); | ||
373 | if (++printed == 8) { | ||
374 | printk(KERN_CONT "]\n"); | ||
375 | printk(KERN_INFO "CPU CAPS: ["); | ||
376 | printed = 0; | ||
377 | } | ||
378 | } | ||
379 | } | 415 | } |
380 | printk(KERN_CONT "]\n"); | 416 | if (caps & HWCAP_SPARC_CRYPTO) |
417 | report_crypto_hwcaps(&printed); | ||
418 | if (printed != 0) | ||
419 | printk(KERN_CONT "]\n"); | ||
381 | } | 420 | } |
382 | 421 | ||
383 | static unsigned long __init mdesc_cpu_hwcap_list(void) | 422 | static unsigned long __init mdesc_cpu_hwcap_list(void) |
@@ -411,6 +450,10 @@ static unsigned long __init mdesc_cpu_hwcap_list(void) | |||
411 | break; | 450 | break; |
412 | } | 451 | } |
413 | } | 452 | } |
453 | for (i = 0; i < ARRAY_SIZE(crypto_hwcaps); i++) { | ||
454 | if (!strcmp(prop, crypto_hwcaps[i])) | ||
455 | caps |= HWCAP_SPARC_CRYPTO; | ||
456 | } | ||
414 | 457 | ||
415 | plen = strlen(prop) + 1; | 458 | plen = strlen(prop) + 1; |
416 | prop += plen; | 459 | prop += plen; |