mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
7d7aa2fd92
This change makes the names of Broadcom targets consistent by using the common notation based on SoC/CPU ID (which is used internally anyway), bcmXXXX instead of brcmXXXX. This is even used for target TITLE in make menuconfig already, only the short target name used brcm so far. Despite, since subtargets range from bcm2708 to bcm2711, it seems appropriate to use bcm27xx instead of bcm2708 (again, as already done for BOARDNAME). This also renames the packages brcm2708-userland and brcm2708-gpu-fw. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Acked-by: Álvaro Fernández Rojas <noltari@gmail.com>
85 lines
2.8 KiB
Diff
85 lines
2.8 KiB
Diff
From fd483c4e43a983d90c308c4d668e83be4fd6a392 Mon Sep 17 00:00:00 2001
|
|
From: Tim Gover <990920+timg236@users.noreply.github.com>
|
|
Date: Wed, 15 Jan 2020 11:26:19 +0000
|
|
Subject: [PATCH] usb: xhci: Raspberry Pi FW loader for VIA VL805
|
|
|
|
The VL805 FW may either be loaded from an SPI EEPROM or alternatively
|
|
loaded directly by the VideoCore firmware. A PCI reset will reset
|
|
the VL805 XHCI controller on the Raspberry Pi4 requiring the firmware
|
|
to be reloaded if an SPI EEPROM is not present.
|
|
|
|
Use a VideoCore mailbox to trigger the loading of the VL805
|
|
firmware (if necessary) after a PCI reset.
|
|
|
|
Signed-off-by: Tim Gover <tim.gover@raspberrypi.org>
|
|
---
|
|
drivers/usb/host/pci-quirks.c | 31 +++++++++++++++++++++-
|
|
include/soc/bcm2835/raspberrypi-firmware.h | 2 +-
|
|
2 files changed, 31 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/usb/host/pci-quirks.c
|
|
+++ b/drivers/usb/host/pci-quirks.c
|
|
@@ -18,7 +18,7 @@
|
|
#include <linux/dmi.h>
|
|
#include "pci-quirks.h"
|
|
#include "xhci-ext-caps.h"
|
|
-
|
|
+#include <soc/bcm2835/raspberrypi-firmware.h>
|
|
|
|
#define UHCI_USBLEGSUP 0xc0 /* legacy support */
|
|
#define UHCI_USBCMD 0 /* command register */
|
|
@@ -632,6 +632,32 @@ EXPORT_SYMBOL_GPL(usb_amd_pt_check_port)
|
|
|
|
#endif /* CONFIG_PCI_DISABLE_COMMON_QUIRKS */
|
|
|
|
+/* The VL805 firmware may either be loaded from an EEPROM or by the BIOS into
|
|
+ * memory. If run from memory it must be reloaded after a PCI fundmental reset.
|
|
+ * The Raspberry Pi firmware acts as the BIOS in this case.
|
|
+ */
|
|
+static void usb_vl805_init(struct pci_dev *pdev)
|
|
+{
|
|
+#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
|
|
+ struct rpi_firmware *fw;
|
|
+ struct {
|
|
+ u32 dev_addr;
|
|
+ } packet;
|
|
+ int ret;
|
|
+
|
|
+ fw = rpi_firmware_get(NULL);
|
|
+ if (!fw)
|
|
+ return;
|
|
+
|
|
+ packet.dev_addr = (pdev->bus->number << 20) |
|
|
+ (PCI_SLOT(pdev->devfn) << 15) | (PCI_FUNC(pdev->devfn) << 12);
|
|
+
|
|
+ dev_dbg(&pdev->dev, "RPI_FIRMWARE_NOTIFY_XHCI_RESET %x", packet.dev_addr);
|
|
+ ret = rpi_firmware_property(fw, RPI_FIRMWARE_NOTIFY_XHCI_RESET,
|
|
+ &packet, sizeof(packet));
|
|
+#endif
|
|
+}
|
|
+
|
|
#if IS_ENABLED(CONFIG_USB_UHCI_HCD)
|
|
|
|
/*
|
|
@@ -1226,6 +1252,9 @@ hc_init:
|
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL)
|
|
usb_enable_intel_xhci_ports(pdev);
|
|
|
|
+ if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3483)
|
|
+ usb_vl805_init(pdev);
|
|
+
|
|
op_reg_base = base + XHCI_HC_LENGTH(readl(base));
|
|
|
|
/* Wait for the host controller to be ready before writing any
|
|
--- a/include/soc/bcm2835/raspberrypi-firmware.h
|
|
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
|
|
@@ -98,7 +98,7 @@ enum rpi_firmware_property_tag {
|
|
RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045,
|
|
RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049,
|
|
RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050,
|
|
-
|
|
+ RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058,
|
|
|
|
/* Dispmanx TAGS */
|
|
RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
|