Re: [PATCH v4 00/15] staging: mt7621-pci: avoid custom pci config read and writes

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

 



On Thu, Jul 26, 2018 at 04:45:41PM +1000, NeilBrown wrote:
> On Thu, Jul 26 2018, Sergio Paracuellos wrote:
> 
> > On Thu, Jul 26, 2018 at 6:50 AM, NeilBrown <neil@xxxxxxxxxx> wrote:
> >> On Wed, Jul 25 2018, Sergio Paracuellos wrote:
> >>
> >>> On Wed, Jul 25, 2018 at 08:21:35AM +1000, NeilBrown wrote:
> >>>> On Mon, Jul 16 2018, Sergio Paracuellos wrote:
> >>>>
> >>>> > This patch series include an attempt to avoid the use of custom
> >>>> > read and writes in driver code and use PCI subsystem common ones.
> >>>> >
> >>>> > In order to do this 'map_bus' callback is implemented and also
> >>>> > data structures for driver are included. The regs base address
> >>>> > is being readed from device tree and the driver gets clean a lot
> >>>> > of code.
> >>>> >
> >>>> > Changes in v4:
> >>>> >     - Rebased onto staging-next.
> >>>> >
> >>>> > Changes in v3:
> >>>> >     - Include new patches to delete all RALINK_BASE definition
> >>>> >       dependant code and be able to avoid use of pci_legacy code.
> >>>> >     - use devm_of_pci_get_host_bridge_resources,
> >>>> >       devm_request_pci_bus_resources and pci_scan_root_bus_bridge
> >>>> >       and pci_bus_add_devices
> >>>> >
> >>>> > Changes in v2:
> >>>> >     - squash PATCH 1 and PATCH 2 of previous series in only PATCH 1
> >>>> >     - Change name for host structure.
> >>>> >     - Create a new port structure (platform has 3 pcie controllers)
> >>>> >     - Replace the use of pci_generic_config_[read|write]32 in favour
> >>>> >       of pci_generic_config_[read|write] and change map_bus implemen-
> >>>> >       tation for hopefully the right one.
> >>>> >
> >>>> > Best regards,
> >>>>
> >>>> Thanks for these.
> >>>> I added
> >>>> diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig
> >>>> index 1f9cb0e3c79a..50779b3379db 100644
> >>>> --- a/arch/mips/ralink/Kconfig
> >>>> +++ b/arch/mips/ralink/Kconfig
> >>>> @@ -51,6 +51,7 @@ choice
> >>>>                 select COMMON_CLK
> >>>>                 select CLKSRC_MIPS_GIC
> >>>>                 select HW_HAS_PCI
> >>>> +               select PCI_DRIVERS_GENERIC
> >>>>  endchoice
> >>>>
> >>>>  choice
> >>>>
> >>>> so that I could build and test it - maybe there is somewhere else that
> >>>> "select" can go while this is still in staging..
> >>>>
> >>>> The system boots and can see the three pcie-attached SATA controllers:
> >>>>
> >>>> # lspci
> >>>> 00:00.0 PCI bridge: Device 0e8d:0801 (rev 01)
> >>>> 00:01.0 PCI bridge: Device 0e8d:0801 (rev 01)
> >>>> 00:02.0 PCI bridge: Device 0e8d:0801 (rev 01)
> >>>> 01:00.0 IDE interface: ASMedia Technology Inc. ASM1061 SATA IDE Controller (rev 02)
> >>>> 02:00.0 IDE interface: ASMedia Technology Inc. ASM1061 SATA IDE Controller (rev 02)
> >>>> 03:00.0 IDE interface: ASMedia Technology Inc. ASM1061 SATA IDE Controller (rev 02)
> >>>>
> >>>> but it cannot see the drive that is plugged into one of these.
> >>>> Below is the first 10 seconds of dmesg.
> >>>> I suspect the relevant bit is
> >>>>
> >>>> [    8.680000] ahci: probe of 0000:01:00.0 failed with error -22
> >>>> [    8.700000] ahci: probe of 0000:02:00.0 failed with error -22
> >>>> [    8.710000] ahci: probe of 0000:03:00.0 failed with error -22
> >>>>
> >>>> I haven't dug deeper yet.
> >>>
> >>> Hi Neil,
> >>>
> >>> Can you please make a test for me? Can you comment lines about pinctrl in the pcie
> >>> node of the device tree? I am not sure we have to use the reset pin there but just
> >>> use the reset_control in a proper way. These two:
> >>>
> >>> pinctrl-names = "default";
> >>> pinctrl-0 = <&pcie_pins>;
> >>>
> >>> Does this change make the plugged drives to work?
> >>
> >> Thanks for the suggestion.  No, this does change anything.
> >> I had a go at sprinking printks to see what exactly was failing.
> >> It is pcim_iomap_regions().
> >> "mask" is 0x20, is t wants to map region 5.
> >> However region 5 has size zero - hence -EINVAL.
> >
> > Thanks for this analysis. It is really helpful.
> >
> >>
> >> In the dmesg there is:
> >>
> >>>> [    2.530000] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00000200]
> >>>> [    2.540000] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00000200]
> >>
> >> I think this is where resource 5 is not getting set up properly.
> >> That is as far as I got today.
> >
> > It seems there are not space in bridges to assign to the downstream devices...
> >
> > As far as I know Linux assigns space for endpoint BARs, but it doesn't
> > automatically
> > reassign bridge windows to make space for downstream devices. We can
> > try two things.
> >
> > 1) Call pci_bus_size_bridges as follows (if you prefer I can send v5
> > including this change in the
> > first PATCH of the series, but I think it is better to test this
> > before sending anything):
> >
> > diff --git a/drivers/staging/mt7621-pci/pci-mt7621.c
> > b/drivers/staging/mt7621-pci/pci-mt7621.c
> > index f8e81aa..1f329d6 100644
> > --- a/drivers/staging/mt7621-pci/pci-mt7621.c
> > +++ b/drivers/staging/mt7621-pci/pci-mt7621.c
> > @@ -629,6 +629,7 @@ pcie(2/1/0) link status     pcie2_num
> > pcie1_num       pcie0_num
> >
> >         bus = bridge->bus;
> >
> > +       pci_bus_size_bridges(bridge->bus);
> >         pci_assign_unassigned_bus_resources(bridge->bus);
> >         list_for_each_entry(child, &bus->children, node)
> >                 pcie_bus_configure_settings(child);
> >
> > I think after this change the problem should disappear but if that is
> > not the case....

Ok, I think the problem is we are not setting the bridge->windows retrieved
with devm_request_pci_bus_resources in "res". So we have to set those properly
to the bridge to get all correctly assigned. So I think adding this should make
the system to work:

+ list_splice_init(&res, &bridge->windows);
bridge->busnr = 0;
bridge->dev.parent = dev;
bridge->sysdata = pcie;


(Sorry don't access to code now and cannot diff).

Let me know if this works. Is this the hopefully good one?

Best regards,
    Sergio Paracuellos
> >
> > 2) if that does not work, we can try also booting with "pci=realloc"
> > and see if there is any difference in dmesg.
> >
> > Thanks in advance.
> 
> Neither of these suggestions make any noticeable difference.
> 
> I'm a bit confused by something thought - your patch above puts the new
> line at line 633 of pci-mt7621.c.  It is line 584 in my code.
> There are only 614 lines.
> Do you have other code in there that might be relevant??
> 
> Thanks,
> NeilBrown


_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux