Re: Problem with PCIe enumeration of Google/Coral TPU Edge module on Linux

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

 



Regarding my previous email please ignore the that device is being
detected as Ethernet controller I have forced class change by making
dev->class==0x020000, which also works. Which is also another option
for possible a solution...

On Thu, Apr 9, 2020 at 4:25 PM Luís Mendes <luis.p.mendes@xxxxxxxxx> wrote:
>
> Hi Bjorn,
>
> I've good news. I've found the culprit and it is a pretty simple
> issue, however the good solution is not obvious to me.
> Can you help in finding the best way to patch this issue?
>
> So first detailing the problem in file setup_bus.c there is this *if
> condition* to ignore resources from classless devices and so
> it is that this Google/Coral Edge TPU is a classless device with class 0xff:
>
> static void __dev_sort_resources(struct pci_dev *dev, struct list_head *head)
> {
>     u16 class = dev->class >> 8;
>
>        pci_info(dev, "%s\n", __func__);
>     /* Don't touch classless devices or host bridges or IOAPICs */
>     if (class == PCI_CLASS_NOT_DEFINED || class == PCI_CLASS_BRIDGE_HOST)
>         return;
>    ....
>
> So the one possible trivial, non generic, attempt that works is to do:
> static void __dev_sort_resources(struct pci_dev *dev, struct list_head *head)
> {
>     u16 class = dev->class >> 8;
>
>        pci_info(dev, "%s\n", __func__);
>     /* Don't touch classless devices or host bridges or IOAPICs */
>     if ((class == PCI_CLASS_NOT_DEFINED &&  !(dev->vendor == 0x1ac1 &&
> dev->device==0x089a)) || class == PCI_CLASS_BRIDGE_HOST)
>         return;
>    ....
>
> What is your suggestion to make the solution generic? Create a
> whitelist? Remove this verification? I have no idea... nothing sounds
> good to me...
> 01:00.0 Ethernet controller: Device 1ac1:089a (prog-if ff)
>     Subsystem: Device 1ac1:089a
>     Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop-
> ParErr+ Stepping- SERR+ FastB2B- DisINTx-
>     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
> <TAbort- <MAbort- >SERR- <PERR- INTx-
>     Interrupt: pin A routed to IRQ 0
>     Region 0: Memory at d0100000 (64-bit, prefetchable) [disabled] [size=16K]
>     Region 2: Memory at d0000000 (64-bit, prefetchable) [disabled] [size=1M]
>     Capabilities: <access denied>
>
>
>
> Best regards.
> Luís Mendes
>
> On Thu, Apr 9, 2020 at 12:05 AM Luís Mendes <luis.p.mendes@xxxxxxxxx> wrote:
> >
> > Hi Bjorn,
> >
> > I have successfully setup a JTAG remote debug environment.
> > And I found this:
> > First call to __pci_bus_assign_resources visits 11ab:6828 -> SLOT 1,
> > which in turn calls __pci_bus_assign_resources which visits device
> > 1ac1:089a on that slot and calls:




[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