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>
This commit is contained in:
@@ -44,6 +44,7 @@ int pdc_model_sysmodel(char *name);
|
|||||||
int pdc_model_cpuid(unsigned long *cpu_id);
|
int pdc_model_cpuid(unsigned long *cpu_id);
|
||||||
int pdc_model_versions(unsigned long *versions, int id);
|
int pdc_model_versions(unsigned long *versions, int id);
|
||||||
int pdc_model_capabilities(unsigned long *capabilities);
|
int pdc_model_capabilities(unsigned long *capabilities);
|
||||||
|
int pdc_model_platform_info(char *orig_prod_num, char *current_prod_num, char *serial_no);
|
||||||
int pdc_cache_info(struct pdc_cache_info *cache);
|
int pdc_cache_info(struct pdc_cache_info *cache);
|
||||||
int pdc_spaceid_bits(unsigned long *space_bits);
|
int pdc_spaceid_bits(unsigned long *space_bits);
|
||||||
#ifndef CONFIG_PA20
|
#ifndef CONFIG_PA20
|
||||||
|
@@ -568,6 +568,30 @@ int pdc_model_capabilities(unsigned long *capabilities)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pdc_model_platform_info - Returns machine product and serial number.
|
||||||
|
* @orig_prod_num: Return buffer for original product number.
|
||||||
|
* @current_prod_num: Return buffer for current product number.
|
||||||
|
* @serial_no: Return buffer for serial number.
|
||||||
|
*
|
||||||
|
* Returns strings containing the original and current product numbers and the
|
||||||
|
* serial number of the system.
|
||||||
|
*/
|
||||||
|
int pdc_model_platform_info(char *orig_prod_num, char *current_prod_num,
|
||||||
|
char *serial_no)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&pdc_lock, flags);
|
||||||
|
retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_GET_PLATFORM_INFO,
|
||||||
|
__pa(orig_prod_num), __pa(current_prod_num), __pa(serial_no));
|
||||||
|
convert_to_wide(pdc_result);
|
||||||
|
spin_unlock_irqrestore(&pdc_lock, flags);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pdc_cache_info - Return cache and TLB information.
|
* pdc_cache_info - Return cache and TLB information.
|
||||||
* @cache_info: The return buffer.
|
* @cache_info: The return buffer.
|
||||||
|
@@ -242,6 +242,7 @@ static int __init processor_probe(struct parisc_device *dev)
|
|||||||
void __init collect_boot_cpu_data(void)
|
void __init collect_boot_cpu_data(void)
|
||||||
{
|
{
|
||||||
unsigned long cr16_seed;
|
unsigned long cr16_seed;
|
||||||
|
char orig_prod_num[64], current_prod_num[64], serial_no[64];
|
||||||
|
|
||||||
memset(&boot_cpu_data, 0, sizeof(boot_cpu_data));
|
memset(&boot_cpu_data, 0, sizeof(boot_cpu_data));
|
||||||
|
|
||||||
@@ -301,6 +302,14 @@ void __init collect_boot_cpu_data(void)
|
|||||||
_parisc_requires_coherency = (boot_cpu_data.cpu_type == mako) ||
|
_parisc_requires_coherency = (boot_cpu_data.cpu_type == mako) ||
|
||||||
(boot_cpu_data.cpu_type == mako2);
|
(boot_cpu_data.cpu_type == mako2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (pdc_model_platform_info(orig_prod_num, current_prod_num, serial_no) == PDC_OK) {
|
||||||
|
printk(KERN_INFO "product %s, original product %s, S/N: %s\n",
|
||||||
|
current_prod_num, orig_prod_num, serial_no);
|
||||||
|
add_device_randomness(orig_prod_num, strlen(orig_prod_num));
|
||||||
|
add_device_randomness(current_prod_num, strlen(current_prod_num));
|
||||||
|
add_device_randomness(serial_no, strlen(serial_no));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user