static void
init_megasas(struct pci_device *pci)
{
- u16 bdf = pci->bdf;
- u32 iobase = pci_config_readl(pci->bdf, PCI_BASE_ADDRESS_2)
- & PCI_BASE_ADDRESS_IO_MASK;
-
+ u32 bar = PCI_BASE_ADDRESS_2;
+ if (!(pci_config_readl(pci->bdf, bar) & PCI_BASE_ADDRESS_IO_MASK))
+ bar = PCI_BASE_ADDRESS_0;
+ u32 iobase = pci_enable_iobar(pci, bar);
if (!iobase)
- iobase = pci_config_readl(pci->bdf, PCI_BASE_ADDRESS_0)
- & PCI_BASE_ADDRESS_IO_MASK;
+ return;
+ pci_enable_busmaster(pci);
dprintf(1, "found MegaRAID SAS at %02x:%02x.%x, io @ %x\n",
- pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf),
- pci_bdf_to_fn(bdf), iobase);
+ pci_bdf_to_bus(pci->bdf), pci_bdf_to_dev(pci->bdf),
+ pci_bdf_to_fn(pci->bdf), iobase);
- pci_config_maskw(pci->bdf, PCI_COMMAND, 0,
- PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
// reset
if (megasas_transition_to_ready(pci, iobase) == 0)
megasas_scan_target(pci, iobase);