Commit e0e5907e authored by Marc Zyngier's avatar Marc Zyngier Committed by Linus Torvalds

[PATCH] EISA: PA-RISC changes

- Probe the right number of EISA slots on PA-RISC. No more, no less.
parent 5fe1dbf4
...@@ -378,19 +378,21 @@ static int __devinit eisa_probe(struct parisc_device *dev) ...@@ -378,19 +378,21 @@ static int __devinit eisa_probe(struct parisc_device *dev)
} }
} }
eisa_eeprom_init(eisa_dev.eeprom_addr); eisa_eeprom_init(eisa_dev.eeprom_addr);
eisa_enumerator(eisa_dev.eeprom_addr, &eisa_dev.hba.io_space, &eisa_dev.hba.lmmio_space); result = eisa_enumerator(eisa_dev.eeprom_addr, &eisa_dev.hba.io_space, &eisa_dev.hba.lmmio_space);
init_eisa_pic(); init_eisa_pic();
/* FIXME : Get the number of slots from the enumerator, not a if (result >= 0) {
* hadcoded value. Also don't enumerate the bus twice. */ /* FIXME : Don't enumerate the bus twice. */
eisa_dev.root.dev = &dev->dev; eisa_dev.root.dev = &dev->dev;
dev->dev.driver_data = &eisa_dev.root; dev->dev.driver_data = &eisa_dev.root;
eisa_dev.root.bus_base_addr = 0; eisa_dev.root.bus_base_addr = 0;
eisa_dev.root.res = &eisa_dev.hba.io_space; eisa_dev.root.res = &eisa_dev.hba.io_space;
eisa_dev.root.slots = EISA_MAX_SLOTS; eisa_dev.root.slots = result;
if (eisa_root_register (&eisa_dev.root)) { eisa_dev.root.dma_mask = 0xffffffff; /* wild guess */
printk(KERN_ERR "EISA: Failed to register EISA root\n"); if (eisa_root_register (&eisa_dev.root)) {
return -1; printk(KERN_ERR "EISA: Failed to register EISA root\n");
return -1;
}
} }
return 0; return 0;
......
...@@ -438,6 +438,10 @@ static int init_slot(int slot, struct eeprom_eisa_slot_info *es) ...@@ -438,6 +438,10 @@ static int init_slot(int slot, struct eeprom_eisa_slot_info *es)
id = le32_to_cpu(inl(SLOT2PORT(slot)+EPI)); id = le32_to_cpu(inl(SLOT2PORT(slot)+EPI));
if (0xffffffff == id) { if (0xffffffff == id) {
/* Maybe we didn't expect a card to be here... */
if (es->eisa_slot_id == 0xffffffff)
return -1;
/* this board is not here or it does not /* this board is not here or it does not
* support readid * support readid
*/ */
...@@ -499,8 +503,7 @@ int eisa_enumerator(unsigned long eeprom_addr, ...@@ -499,8 +503,7 @@ int eisa_enumerator(unsigned long eeprom_addr,
(&eeprom_buf[HPEE_SLOT_INFO(i)]); (&eeprom_buf[HPEE_SLOT_INFO(i)]);
if (-1==init_slot(i+1, es)) { if (-1==init_slot(i+1, es)) {
return -1; continue;
} }
if (es->config_data_offset < HPEE_MAX_LENGTH) { if (es->config_data_offset < HPEE_MAX_LENGTH) {
...@@ -513,6 +516,6 @@ int eisa_enumerator(unsigned long eeprom_addr, ...@@ -513,6 +516,6 @@ int eisa_enumerator(unsigned long eeprom_addr,
return -1; return -1;
} }
} }
return 0; return eh->num_slots;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment