summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2019-02-08 12:28:13 -0500
committerHelge Deller <deller@gmx.de>2019-02-21 14:37:13 -0500
commit8207d4ee44d3f525bf9aa57807ac9db5d0d90c1a (patch)
tree13c14cc3d981f137402301355c92cf4f58abb351
parent661faf31021dda4df1ea46594ec03de68f5ac47d (diff)
parisc: Show machine product number during boot
Ask PDC firmware during boot for the original and current product number as well as the serial number and show it (if available). Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--arch/parisc/include/asm/pdc.h1
-rw-r--r--arch/parisc/kernel/firmware.c24
-rw-r--r--arch/parisc/kernel/processor.c9
3 files changed, 34 insertions, 0 deletions
diff --git a/arch/parisc/include/asm/pdc.h b/arch/parisc/include/asm/pdc.h
index 5b187d40d604..19bb2e46cd36 100644
--- a/arch/parisc/include/asm/pdc.h
+++ b/arch/parisc/include/asm/pdc.h
@@ -44,6 +44,7 @@ int pdc_model_sysmodel(char *name);
44int pdc_model_cpuid(unsigned long *cpu_id); 44int pdc_model_cpuid(unsigned long *cpu_id);
45int pdc_model_versions(unsigned long *versions, int id); 45int pdc_model_versions(unsigned long *versions, int id);
46int pdc_model_capabilities(unsigned long *capabilities); 46int pdc_model_capabilities(unsigned long *capabilities);
47int pdc_model_platform_info(char *orig_prod_num, char *current_prod_num, char *serial_no);
47int pdc_cache_info(struct pdc_cache_info *cache); 48int pdc_cache_info(struct pdc_cache_info *cache);
48int pdc_spaceid_bits(unsigned long *space_bits); 49int pdc_spaceid_bits(unsigned long *space_bits);
49#ifndef CONFIG_PA20 50#ifndef CONFIG_PA20
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
index e6f3b49f2fd7..7a17551ea31e 100644
--- a/arch/parisc/kernel/firmware.c
+++ b/arch/parisc/kernel/firmware.c
@@ -569,6 +569,30 @@ int pdc_model_capabilities(unsigned long *capabilities)
569} 569}
570 570
571/** 571/**
572 * pdc_model_platform_info - Returns machine product and serial number.
573 * @orig_prod_num: Return buffer for original product number.
574 * @current_prod_num: Return buffer for current product number.
575 * @serial_no: Return buffer for serial number.
576 *
577 * Returns strings containing the original and current product numbers and the
578 * serial number of the system.
579 */
580int pdc_model_platform_info(char *orig_prod_num, char *current_prod_num,
581 char *serial_no)
582{
583 int retval;
584 unsigned long flags;
585
586 spin_lock_irqsave(&pdc_lock, flags);
587 retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_GET_PLATFORM_INFO,
588 __pa(orig_prod_num), __pa(current_prod_num), __pa(serial_no));
589 convert_to_wide(pdc_result);
590 spin_unlock_irqrestore(&pdc_lock, flags);
591
592 return retval;
593}
594
595/**
572 * pdc_cache_info - Return cache and TLB information. 596 * pdc_cache_info - Return cache and TLB information.
573 * @cache_info: The return buffer. 597 * @cache_info: The return buffer.
574 * 598 *
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c
index 82bd0d0927ce..7f4d042856b5 100644
--- a/arch/parisc/kernel/processor.c
+++ b/arch/parisc/kernel/processor.c
@@ -242,6 +242,7 @@ static int __init processor_probe(struct parisc_device *dev)
242void __init collect_boot_cpu_data(void) 242void __init collect_boot_cpu_data(void)
243{ 243{
244 unsigned long cr16_seed; 244 unsigned long cr16_seed;
245 char orig_prod_num[64], current_prod_num[64], serial_no[64];
245 246
246 memset(&boot_cpu_data, 0, sizeof(boot_cpu_data)); 247 memset(&boot_cpu_data, 0, sizeof(boot_cpu_data));
247 248
@@ -301,6 +302,14 @@ void __init collect_boot_cpu_data(void)
301 _parisc_requires_coherency = (boot_cpu_data.cpu_type == mako) || 302 _parisc_requires_coherency = (boot_cpu_data.cpu_type == mako) ||
302 (boot_cpu_data.cpu_type == mako2); 303 (boot_cpu_data.cpu_type == mako2);
303#endif 304#endif
305
306 if (pdc_model_platform_info(orig_prod_num, current_prod_num, serial_no) == PDC_OK) {
307 printk(KERN_INFO "product %s, original product %s, S/N: %s\n",
308 current_prod_num, orig_prod_num, serial_no);
309 add_device_randomness(orig_prod_num, strlen(orig_prod_num));
310 add_device_randomness(current_prod_num, strlen(current_prod_num));
311 add_device_randomness(serial_no, strlen(serial_no));
312 }
304} 313}
305 314
306 315