mbox series

[v3,0/4] Raspberry Pi 4 VL805 firmware load support

Message ID 20200302155528.19505-1-nsaenzjulienne@suse.de
Headers show
Series Raspberry Pi 4 VL805 firmware load support | expand

Message

Nicolas Saenz Julienne March 2, 2020, 3:55 p.m. UTC
On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be
loaded directly from an EEPROM or, if not present, by the SoC's
VideCore. This series adds support for the later.

Note that there are a set of constraints we have to consider (some of
them I missed on v1):
 - We need to make sure the VideoCore firmware interface is up and
   running before running the VL805 firmware load call.

 - There is no way to discern RPi4's VL805 chip from other platforms',
   so we need the firmware load to happen *before* running
   quirk_usb_handoff_xhci(). Failure to do so results in an unwarranted
   5 second wait while the fixup code polls xHC's unexisting state.

As per Stefan Wahren's comments I tested the behaviour on outdated
firmware. Boards dependent on this will not boot if firmware is not
up-to-date. Older boards with outdated firmware will fail to execute the
VideoCore firmware call, but xHCI will perform reliably. I added a
warning printout in case of failure.

I'm aware that Florian Fianelli noted on the previous revision that
waiting on the VideoCore firmware interface during PCIe's probe is far
from ideal. But this was before taking into account the second
constraint mentioned above. Impact on non RPi4 boards is minimal.

---

Changes since v1:
 - Addressed Floarians comments

Nicolas Saenz Julienne (4):
  soc: bcm2835: Sync xHCI reset firmware property with downstream
  firmware: raspberrypi: Introduce vl805 init routine
  PCI: brcmstb: Wait for Raspberry Pi's firmware when present
  USB: pci-quirks: Add Raspberry Pi 4 quirk

 drivers/firmware/Kconfig                   |  1 +
 drivers/firmware/raspberrypi.c             | 38 ++++++++++++++++++++++
 drivers/pci/controller/pcie-brcmstb.c      | 15 +++++++++
 drivers/usb/host/pci-quirks.c              | 18 ++++++++++
 include/soc/bcm2835/raspberrypi-firmware.h |  9 ++++-
 5 files changed, 80 insertions(+), 1 deletion(-)

Comments

Oliver Neukum March 3, 2020, 8:43 a.m. UTC | #1
Am Montag, den 02.03.2020, 16:55 +0100 schrieb Nicolas Saenz Julienne:
> On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be
> loaded directly from an EEPROM or, if not present, by the SoC's
> VideCore. This series adds support for the later.

What happens if runtime PM strikes, in particular, how do
you deal with D4cold?

	Regards
		Oliver
Nicolas Saenz Julienne March 3, 2020, 11:08 a.m. UTC | #2
Hi Oliver,

On Tue, 2020-03-03 at 09:43 +0100, Oliver Neukum wrote:
> Am Montag, den 02.03.2020, 16:55 +0100 schrieb Nicolas Saenz Julienne:
> > On the Raspberry Pi 4, after a PCI reset, VL805's firmware may either be
> > loaded directly from an EEPROM or, if not present, by the SoC's
> > VideCore. This series adds support for the later.
> 
> What happens if runtime PM strikes, in particular, how do
> you deal with D4cold?

The RPi4 PCIe driver doesn't support runtime PM for now. Neither upstream nor
downstream. So I'd say it's not a problem. The same goes for suspend/resume,
which IIRC the Raspberry Pi foundation doesn't support.

Regards,
Nicolas