Re: [RFC] pciehp: Add archdata setting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux