Thread (16 messages) flat view 16 messages, 3 authors, 2020-04-04

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help