Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 116747
b: refs/heads/master
c: 24b574d
h: refs/heads/master
i:
  116745: f7ca2a7
  116743: 4d50a2a
v: v3
  • Loading branch information
Kyle McMartin authored and Kyle McMartin committed Oct 10, 2008
1 parent 675ee4e commit d9b155b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: deae26bf6a10e47983606f5df080b91e97650ead
refs/heads/master: 24b574d052a1996bac42fbd56715ab602092c291
2 changes: 2 additions & 0 deletions trunk/arch/parisc/include/asm/pdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,7 @@ int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsi
int pdc_chassis_disp(unsigned long disp);
int pdc_chassis_warn(unsigned long *warn);
int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info);
int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
void *iodc_data, unsigned int iodc_data_size);
int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
Expand Down Expand Up @@ -641,6 +642,7 @@ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr,
#endif

void set_firmware_width(void);
void set_firmware_width_unlocked(void);
int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
int pdc_do_reset(void);
int pdc_soft_power_info(unsigned long *power_reg);
Expand Down
65 changes: 44 additions & 21 deletions trunk/arch/parisc/kernel/firmware.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,26 +150,40 @@ static void convert_to_wide(unsigned long *addr)
#endif
}

#ifdef CONFIG_64BIT
void __init set_firmware_width_unlocked(void)
{
int ret;

ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES,
__pa(pdc_result), 0);
convert_to_wide(pdc_result);
if (pdc_result[0] != NARROW_FIRMWARE)
parisc_narrow_firmware = 0;
}

/**
* set_firmware_width - Determine if the firmware is wide or narrow.
*
* This function must be called before any pdc_* function that uses the convert_to_wide
* function.
* This function must be called before any pdc_* function that uses the
* convert_to_wide function.
*/
void __init set_firmware_width(void)
{
#ifdef CONFIG_64BIT
int retval;
unsigned long flags;
spin_lock_irqsave(&pdc_lock, flags);
set_firmware_width_unlocked();
spin_unlock_irqrestore(&pdc_lock, flags);
}
#else
void __init set_firmware_width_unlocked(void) {
return;
}

spin_lock_irqsave(&pdc_lock, flags);
retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0);
convert_to_wide(pdc_result);
if(pdc_result[0] != NARROW_FIRMWARE)
parisc_narrow_firmware = 0;
spin_unlock_irqrestore(&pdc_lock, flags);
#endif
void __init set_firmware_width(void) {
return;
}
#endif /*CONFIG_64BIT*/

/**
* pdc_emergency_unlock - Unlock the linux pdc lock
Expand Down Expand Up @@ -288,6 +302,20 @@ int pdc_chassis_warn(unsigned long *warn)
return retval;
}

int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
{
int ret;

ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result));
convert_to_wide(pdc_result);
pdc_coproc_info->ccr_functional = pdc_result[0];
pdc_coproc_info->ccr_present = pdc_result[1];
pdc_coproc_info->revision = pdc_result[17];
pdc_coproc_info->model = pdc_result[18];

return ret;
}

/**
* pdc_coproc_cfg - To identify coprocessors attached to the processor.
* @pdc_coproc_info: Return buffer address.
Expand All @@ -297,19 +325,14 @@ int pdc_chassis_warn(unsigned long *warn)
*/
int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
{
int retval;
int ret;
unsigned long flags;

spin_lock_irqsave(&pdc_lock, flags);
retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result));
convert_to_wide(pdc_result);
pdc_coproc_info->ccr_functional = pdc_result[0];
pdc_coproc_info->ccr_present = pdc_result[1];
pdc_coproc_info->revision = pdc_result[17];
pdc_coproc_info->model = pdc_result[18];
spin_unlock_irqrestore(&pdc_lock, flags);
spin_lock_irqsave(&pdc_lock, flags);
ret = pdc_coproc_cfg_unlocked(pdc_coproc_info);
spin_unlock_irqrestore(&pdc_lock, flags);

return retval;
return ret;
}

/**
Expand Down

0 comments on commit d9b155b

Please sign in to comment.