|
@@ -120,22 +120,28 @@ static int __cpuinit processor_probe(struct parisc_device *dev)
|
|
if (is_pdc_pat()) {
|
|
if (is_pdc_pat()) {
|
|
ulong status;
|
|
ulong status;
|
|
unsigned long bytecnt;
|
|
unsigned long bytecnt;
|
|
- pdc_pat_cell_mod_maddr_block_t pa_pdc_cell;
|
|
|
|
|
|
+ pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell;
|
|
#undef USE_PAT_CPUID
|
|
#undef USE_PAT_CPUID
|
|
#ifdef USE_PAT_CPUID
|
|
#ifdef USE_PAT_CPUID
|
|
struct pdc_pat_cpu_num cpu_info;
|
|
struct pdc_pat_cpu_num cpu_info;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+ pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL);
|
|
|
|
+ if (!pa_pdc_cell)
|
|
|
|
+ panic("couldn't allocate memory for PDC_PAT_CELL!");
|
|
|
|
+
|
|
status = pdc_pat_cell_module(&bytecnt, dev->pcell_loc,
|
|
status = pdc_pat_cell_module(&bytecnt, dev->pcell_loc,
|
|
- dev->mod_index, PA_VIEW, &pa_pdc_cell);
|
|
|
|
|
|
+ dev->mod_index, PA_VIEW, pa_pdc_cell);
|
|
|
|
|
|
BUG_ON(PDC_OK != status);
|
|
BUG_ON(PDC_OK != status);
|
|
|
|
|
|
/* verify it's the same as what do_pat_inventory() found */
|
|
/* verify it's the same as what do_pat_inventory() found */
|
|
- BUG_ON(dev->mod_info != pa_pdc_cell.mod_info);
|
|
|
|
- BUG_ON(dev->pmod_loc != pa_pdc_cell.mod_location);
|
|
|
|
|
|
+ BUG_ON(dev->mod_info != pa_pdc_cell->mod_info);
|
|
|
|
+ BUG_ON(dev->pmod_loc != pa_pdc_cell->mod_location);
|
|
|
|
+
|
|
|
|
+ txn_addr = pa_pdc_cell->mod[0]; /* id_eid for IO sapic */
|
|
|
|
|
|
- txn_addr = pa_pdc_cell.mod[0]; /* id_eid for IO sapic */
|
|
|
|
|
|
+ kfree(pa_pdc_cell);
|
|
|
|
|
|
#ifdef USE_PAT_CPUID
|
|
#ifdef USE_PAT_CPUID
|
|
/* We need contiguous numbers for cpuid. Firmware's notion
|
|
/* We need contiguous numbers for cpuid. Firmware's notion
|