Re: [PATCH v6 2/4] firmware: raspberrypi: Introduce vl805 init routine
From: Bjorn Helgaas <helgaas@kernel.org>
Date: 2020-04-02 19:40:12
Also in:
linux-pci, linux-usb, lkml
On Thu, Apr 02, 2020 at 01:32:35PM +0200, Nicolas Saenz Julienne wrote:
On Wed, 2020-04-01 at 15:37 -0500, Bjorn Helgaas wrote:quoted
On Tue, Mar 24, 2020 at 07:28:10PM +0100, Nicolas Saenz Julienne wrote:quoted
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. The function informs VideCore that VL805 was just reset, or requests for a probe defer.
Is VL805 the XHCI USB device? A hint here would help non-RPi experts know how this fits into the topology.
quoted
quoted
Based on Tim Gover's downstream implementation.Maybe a URL?I was under the impression that adding links in the commit log that are likely to be short-lived was frowned upon. That said I could've added it into the cover letter. For reference here it is: https://github.com/raspberrypi/linux/commit/9935b4c7e360b4494b4cb6e3ce797238a1ab78bd
I think your impression is correct. If this was posted to a mailing list archived on lore.kernel.org, a link to the cover letter would be ideal.
To pass messages down the mailbox, you call rpi_firmware_property(), which takes care of contention, formating and DMA issues, before passing it into the actual mailbox interface and beyond.
OK. The "rpi_firmware_property" name doesn't give much of a hint that it is sending messages. It sounds like it might be a lookup function. But that's an existing thing, not something you're changing here.
quoted
quoted
+ */ +int rpi_firmware_init_vl805(struct pci_dev *pdev) +{ + struct device_node *fw_np; + struct rpi_firmware *fw; + u32 dev_addr; + int ret; + + fw_np = of_find_compatible_node(NULL, NULL, + "raspberrypi,bcm2835-firmware"); + if (!fw_np) + return 0; + + fw = rpi_firmware_get(fw_np); + of_node_put(fw_np); + if (!fw) + return -EPROBE_DEFER; + + dev_addr = pdev->bus->number << 20 | PCI_SLOT(pdev->devfn) << 15 | + PCI_FUNC(pdev->devfn) << 12; + + ret = rpi_firmware_property(fw, RPI_FIRMWARE_NOTIFY_XHCI_RESET, + &dev_addr, sizeof(dev_addr)); + if (ret) + return ret; + + dev_dbg(&pdev->dev, "loaded Raspberry Pi's VL805 firmware\n"); + + return 0; +} +EXPORT_SYMBOL_GPL(rpi_firmware_init_vl805); + static const struct of_device_id rpi_firmware_of_match[] = { { .compatible = "raspberrypi,bcm2835-firmware", }, {},[...] Regards, Nicolas
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel