On Mon, Apr 2, 2012 at 1:42 AM, 松本博郎 <matsumoto.hiroo@xxxxxxxxxxxxxx> wrote: > I'm trying to use pciehp on powerpc platform. > I set e1000e card to PCI Express bridge that has PCI Express HotPlug > Capability. > > There is problem when poweron PCI Express HotPlug slot with pciehp. > e1000e driver needs dma_ops in struct dev_archdata, but archdata isn't > set (dma_ops is NULL) when probe from pciehp. > Then e1000e driver returns error as below. > > -sh-3.2# echo 1 > /sys/bus/pci/slots/1/power > <snip> > [ 65.493662] pci 0000:03:00.0: BAR 2: set to [io > 0xff7ee000-0xff7ee01f] (PCI address [0x1000-0x101f]) > [ 65.502890] pcieport 0000:02:01.0: PCI bridge to [bus 03-03] > [ 65.508555] pcieport 0000:02:01.0: bridge window [io > 0xff7ee000-0xff7eefff] > [ 65.515785] pcieport 0000:02:01.0: bridge window [mem > 0xa0100000-0xa01fffff] > [ 65.523015] pcieport 0000:02:01.0: bridge window [mem > 0xa0200000-0xa02fffff 64bit pref] > [ 65.531238] pci 0000:03:00.0: no hotplug settings from platform > [ 65.538361] e1000e 0000:03:00.0: Disabling ASPM L1 > [ 65.543616] e1000e 0000:03:00.0: enabling device (0000 -> 0002) > [ 65.549876] e1000e 0000:03:00.0: No usable DMA configuration, aborting > [ 65.557194] e1000e: probe of 0000:03:00.0 failed with error -5 > -sh-3.2# lspci > <snip> > 0000:03:00.0 Ethernet controller: Intel Corporation 82572EI Gigabit > Ethernet Controller (Copper) (rev 06) > <snip> > -sh-3.2# ifconfig -a > <snip> // There is no network interface for 82572EI > > If archdata.dma_ops is NULL on x86 platform, e1000e will get dma_ops > without archdata. > So e1000e driver doesn't return error. > > I think that archdata should be set before driver probe (e.g pciehp). > I tried to fix it (pciehp-add-archdata.patch), but I'm not good at PCI > driver..., so please give better way. Interesting. It would be nice if we could set archdata the same way for both devices present at boot and those hot-added later. Can you figure out where archdata is set for devices present at boot? Bjorn > Signed-off-by: Hiroo MATSUMOTO <matsumoto.hiroo@xxxxxxxxxxxxxx> > diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c > index a4031df..a021fbc 100644 > --- a/drivers/pci/hotplug/pciehp_pci.c > +++ b/drivers/pci/hotplug/pciehp_pci.c > @@ -89,6 +89,7 @@ int pciehp_configure_device(struct slot *p_slot) > pciehp_add_bridge(dev); > } > pci_dev_put(dev); > + dev->dev.archdata = bridge->dev.archdata; > } > > pci_assign_unassigned_bridge_resources(bridge); > -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html