From: Florian Fainelli <f.fainelli@gmail.com>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Florian Fainelli <f.fainelli@gmail.com>,
bcm-kernel-feedback-list@broadcom.com,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Andrew Murray <amurray@thegoodpenguin.co.uk>,
linux-usb@vger.kernel.org, linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, gregkh@linuxfoundation.org,
tim.gover@raspberrypi.org, linux-pci@vger.kernel.org,
wahrenst@gmx.net, sergei.shtylyov@cogentembedded.com,
Rob Herring <robh+dt@kernel.org>
Subject: Re: [PATCH v6 3/4] PCI: brcmstb: Wait for Raspberry Pi's firmware when present
Date: Sat, 4 Apr 2020 13:09:56 -0700 [thread overview]
Message-ID: <dee8d364-e08d-61ae-d242-c347d1b73272@gmail.com> (raw)
In-Reply-To: <6b81402dd7ab6431f69dba301ce07822cb8dd753.camel@suse.de>
On 4/4/2020 12:20 PM, Nicolas Saenz Julienne wrote:
> On Thu, 2020-04-02 at 14:38 -0500, Bjorn Helgaas wrote:
>> [+cc Rob for DT platform device dependency question]
>>
>> On Thu, Apr 02, 2020 at 04:27:23PM +0200, Nicolas Saenz Julienne wrote:
>
> [...]
>
>>> Sorry it wasn't clear enough, I'll redo this comment. Also note that
>>> the PCIe bus and the XHCI chip are hardwired, so that's the only
>>> device that'll ever be available on the bus.
>>>
>>> VIA805's XHCI firmware has to be loaded trough RPi's firmware
>>> mailbox in between the PCIe bus probe and the subsequent USB probe.
>>> Note that a PCI reset clears the firmware. The only mechanism
>>> available in between the two operations are PCI Fixups. These are
>>> limited in their own way, as I can't return -EPROBE_DEFER if the
>>> firmware interface isn't available yet. Hence the need for an
>>> explicit dependency between pcie-brcmstb and raspberrypi's firmware
>>> mailbox device.
>>>
>>> Your concern here showcases this series' limitations. From a high
>>> level perspective it's not clear to me who should be responsible for
>>> downloading the firmware.
>>
>> I think it's fairly common for drivers to download firmware to their
>> devices. I guess there's not really any need to download the firmware
>> until a driver wants to use the device, right?
>>
>>> And I get the feeling I'm abusing PCI fixups. I haven't found any
>>> smart way to deal with this three way dependency of
>>> platform/non-platform devices.
>>
>> So IIUC, the three-way dependency involves:
>>
>> 1) brcm_pcie_probe(), which initialize the PCI host controller
>> platform device, enumerates PCI devices, and makes them available
>> for driver binding,
>
> Yes, and also resets the PCI bus, which will clear VL805's firmware (the XHCI
> chip).
>
>> 2) the firmware mailbox initialization (maybe
>> rpi_firmware_probe()?),
>>
>> 3) quirk_usb_early_handoff(), which downloads firmware to the VL805
>> PCI USB adapter via rpi_firmware_init_vl805(), which uses the
>> firmware mailbox?
>
> And yes, that's the general idea.
>
>> Is there some way to express a dependency between
>> "raspberrypi,bcm2835-firmware" (the platform device claimed by
>> rpi_firmware_probe() and "brcm,bcm2711-pcie"? If we could ensure that
>> rpi_firmware_probe() runs before brcm_pcie_probe(), would that solve
>> part of this?
>
> That's ultimately what this patch tries to achieve. If there was a way to
> offload it to DT it would be way nicer.
Have you looked whether device links between producer/consumer could
help here? AFAICT there is not usually a way to express an ordering
dependency other than by referencing symbols from a different module,
which falls apart when everything gets built into the kernel obviously
and then you are at the mercy of the linking order and initicall levels.
https://www.kernel.org/doc/html/v4.13/driver-api/device_link.html
--
Florian
WARNING: multiple messages have this Message-ID (diff)
From: Florian Fainelli <f.fainelli@gmail.com>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
Bjorn Helgaas <helgaas@kernel.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
wahrenst@gmx.net, sergei.shtylyov@cogentembedded.com,
tim.gover@raspberrypi.org, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Rob Herring <robh+dt@kernel.org>,
Florian Fainelli <f.fainelli@gmail.com>,
bcm-kernel-feedback-list@broadcom.com,
linux-rpi-kernel@lists.infradead.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Andrew Murray <amurray@thegoodpenguin.co.uk>
Subject: Re: [PATCH v6 3/4] PCI: brcmstb: Wait for Raspberry Pi's firmware when present
Date: Sat, 4 Apr 2020 13:09:56 -0700 [thread overview]
Message-ID: <dee8d364-e08d-61ae-d242-c347d1b73272@gmail.com> (raw)
In-Reply-To: <6b81402dd7ab6431f69dba301ce07822cb8dd753.camel@suse.de>
On 4/4/2020 12:20 PM, Nicolas Saenz Julienne wrote:
> On Thu, 2020-04-02 at 14:38 -0500, Bjorn Helgaas wrote:
>> [+cc Rob for DT platform device dependency question]
>>
>> On Thu, Apr 02, 2020 at 04:27:23PM +0200, Nicolas Saenz Julienne wrote:
>
> [...]
>
>>> Sorry it wasn't clear enough, I'll redo this comment. Also note that
>>> the PCIe bus and the XHCI chip are hardwired, so that's the only
>>> device that'll ever be available on the bus.
>>>
>>> VIA805's XHCI firmware has to be loaded trough RPi's firmware
>>> mailbox in between the PCIe bus probe and the subsequent USB probe.
>>> Note that a PCI reset clears the firmware. The only mechanism
>>> available in between the two operations are PCI Fixups. These are
>>> limited in their own way, as I can't return -EPROBE_DEFER if the
>>> firmware interface isn't available yet. Hence the need for an
>>> explicit dependency between pcie-brcmstb and raspberrypi's firmware
>>> mailbox device.
>>>
>>> Your concern here showcases this series' limitations. From a high
>>> level perspective it's not clear to me who should be responsible for
>>> downloading the firmware.
>>
>> I think it's fairly common for drivers to download firmware to their
>> devices. I guess there's not really any need to download the firmware
>> until a driver wants to use the device, right?
>>
>>> And I get the feeling I'm abusing PCI fixups. I haven't found any
>>> smart way to deal with this three way dependency of
>>> platform/non-platform devices.
>>
>> So IIUC, the three-way dependency involves:
>>
>> 1) brcm_pcie_probe(), which initialize the PCI host controller
>> platform device, enumerates PCI devices, and makes them available
>> for driver binding,
>
> Yes, and also resets the PCI bus, which will clear VL805's firmware (the XHCI
> chip).
>
>> 2) the firmware mailbox initialization (maybe
>> rpi_firmware_probe()?),
>>
>> 3) quirk_usb_early_handoff(), which downloads firmware to the VL805
>> PCI USB adapter via rpi_firmware_init_vl805(), which uses the
>> firmware mailbox?
>
> And yes, that's the general idea.
>
>> Is there some way to express a dependency between
>> "raspberrypi,bcm2835-firmware" (the platform device claimed by
>> rpi_firmware_probe() and "brcm,bcm2711-pcie"? If we could ensure that
>> rpi_firmware_probe() runs before brcm_pcie_probe(), would that solve
>> part of this?
>
> That's ultimately what this patch tries to achieve. If there was a way to
> offload it to DT it would be way nicer.
Have you looked whether device links between producer/consumer could
help here? AFAICT there is not usually a way to express an ordering
dependency other than by referencing symbols from a different module,
which falls apart when everything gets built into the kernel obviously
and then you are at the mercy of the linking order and initicall levels.
https://www.kernel.org/doc/html/v4.13/driver-api/device_link.html
--
Florian
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-04-04 20:10 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-24 18:28 [PATCH v6 0/4] USB: pci-quirks: Add Raspberry Pi 4 quirk Nicolas Saenz Julienne
2020-03-24 18:28 ` Nicolas Saenz Julienne
2020-03-24 18:28 ` [PATCH v6 1/4] soc: bcm2835: Sync xHCI reset firmware property with downstream Nicolas Saenz Julienne
2020-03-24 18:28 ` Nicolas Saenz Julienne
2020-04-02 18:01 ` Bjorn Helgaas
2020-04-02 18:01 ` Bjorn Helgaas
2020-04-04 20:11 ` Florian Fainelli
2020-04-04 20:11 ` Florian Fainelli
2020-03-24 18:28 ` [PATCH v6 2/4] firmware: raspberrypi: Introduce vl805 init routine Nicolas Saenz Julienne
2020-03-24 18:28 ` Nicolas Saenz Julienne
2020-04-01 20:37 ` Bjorn Helgaas
2020-04-01 20:37 ` Bjorn Helgaas
2020-04-02 11:32 ` Nicolas Saenz Julienne
2020-04-02 11:32 ` Nicolas Saenz Julienne
2020-04-02 19:40 ` Bjorn Helgaas
2020-04-02 19:40 ` Bjorn Helgaas
2020-04-04 18:56 ` Nicolas Saenz Julienne
2020-04-04 18:56 ` Nicolas Saenz Julienne
2020-03-24 18:28 ` [PATCH v6 3/4] PCI: brcmstb: Wait for Raspberry Pi's firmware when present Nicolas Saenz Julienne
2020-03-24 18:28 ` Nicolas Saenz Julienne
2020-04-01 20:41 ` Bjorn Helgaas
2020-04-01 20:41 ` Bjorn Helgaas
2020-04-02 14:27 ` Nicolas Saenz Julienne
2020-04-02 14:27 ` Nicolas Saenz Julienne
2020-04-02 19:38 ` Bjorn Helgaas
2020-04-02 19:38 ` Bjorn Helgaas
2020-04-04 19:20 ` Nicolas Saenz Julienne
2020-04-04 19:20 ` Nicolas Saenz Julienne
2020-04-04 20:09 ` Florian Fainelli [this message]
2020-04-04 20:09 ` Florian Fainelli
2020-03-24 18:28 ` [PATCH v6 4/4] USB: pci-quirks: Add Raspberry Pi 4 quirk Nicolas Saenz Julienne
2020-03-24 18:28 ` Nicolas Saenz Julienne
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dee8d364-e08d-61ae-d242-c347d1b73272@gmail.com \
--to=f.fainelli@gmail.com \
--cc=amurray@thegoodpenguin.co.uk \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=gregkh@linuxfoundation.org \
--cc=helgaas@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=nsaenzjulienne@suse.de \
--cc=robh+dt@kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=tim.gover@raspberrypi.org \
--cc=wahrenst@gmx.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.