* Backport USB PCIe/XHCI patches to U-Boot 2020.07 Backport relevant patches required to make PCIe/USB XHCI work. * Backport/integrate PCIe device tree changes from upstream Linux U-Boot uses the device tree provided by upstream Linux. Make sure the device tree has the relevant chanages to make VL805 USB controller reset work. * Document RPi 4 USB mass storage support (#746)
141 lines
4.5 KiB
Diff
141 lines
4.5 KiB
Diff
From e9925f97c2c31253e1ff62de4049d90e19884f55 Mon Sep 17 00:00:00 2001
|
|
Message-Id: <e9925f97c2c31253e1ff62de4049d90e19884f55.1595101389.git.stefan@agner.ch>
|
|
In-Reply-To: <040a141f84f2f84bf8be18f85b4cdb34bf066df0.1595101389.git.stefan@agner.ch>
|
|
References: <040a141f84f2f84bf8be18f85b4cdb34bf066df0.1595101389.git.stefan@agner.ch>
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
Date: Mon, 29 Jun 2020 18:37:23 +0200
|
|
Subject: [PATCH 12/20] reset: Add Raspberry Pi 4 firmware reset controller
|
|
|
|
Raspberry Pi 4's co-processor controls some of the board's HW
|
|
initialization process, but it's up to Linux to trigger it when
|
|
relevant. Introduce a reset controller capable of interfacing with
|
|
RPi4's co-processor that models these firmware initialization routines as
|
|
reset lines.
|
|
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
---
|
|
drivers/reset/Kconfig | 10 ++++
|
|
drivers/reset/Makefile | 1 +
|
|
drivers/reset/reset-raspberrypi.c | 60 +++++++++++++++++++
|
|
.../reset/raspberrypi,firmware-reset.h | 13 ++++
|
|
4 files changed, 84 insertions(+)
|
|
create mode 100644 drivers/reset/reset-raspberrypi.c
|
|
create mode 100644 include/dt-bindings/reset/raspberrypi,firmware-reset.h
|
|
|
|
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
|
|
index 88d3be1593..d02c1522e5 100644
|
|
--- a/drivers/reset/Kconfig
|
|
+++ b/drivers/reset/Kconfig
|
|
@@ -148,4 +148,14 @@ config RESET_IMX7
|
|
help
|
|
Support for reset controller on i.MX7/8 SoCs.
|
|
|
|
+config RESET_RASPBERRYPI
|
|
+ bool "Raspberry Pi 4 Firmware Reset Controller Driver"
|
|
+ depends on DM_RESET && ARCH_BCM283X
|
|
+ default USB_XHCI_PCI
|
|
+ help
|
|
+ Raspberry Pi 4's co-processor controls some of the board's HW
|
|
+ initialization process, but it's up to Linux to trigger it when
|
|
+ relevant. This driver provides a reset controller capable of
|
|
+ interfacing with RPi4's co-processor and model these firmware
|
|
+ initialization routines as reset lines.
|
|
endmenu
|
|
diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
|
|
index 0a044d5d8c..be54dae725 100644
|
|
--- a/drivers/reset/Makefile
|
|
+++ b/drivers/reset/Makefile
|
|
@@ -23,3 +23,4 @@ obj-$(CONFIG_RESET_MTMIPS) += reset-mtmips.o
|
|
obj-$(CONFIG_RESET_SUNXI) += reset-sunxi.o
|
|
obj-$(CONFIG_RESET_HISILICON) += reset-hisilicon.o
|
|
obj-$(CONFIG_RESET_IMX7) += reset-imx7.o
|
|
+obj-$(CONFIG_RESET_RASPBERRYPI) += reset-raspberrypi.o
|
|
diff --git a/drivers/reset/reset-raspberrypi.c b/drivers/reset/reset-raspberrypi.c
|
|
new file mode 100644
|
|
index 0000000000..e2d284e5ac
|
|
--- /dev/null
|
|
+++ b/drivers/reset/reset-raspberrypi.c
|
|
@@ -0,0 +1,60 @@
|
|
+// SPDX-License-Identifier: GPL-2.0
|
|
+/*
|
|
+ * Raspberry Pi 4 firmware reset driver
|
|
+ *
|
|
+ * Copyright (C) 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
+ */
|
|
+#include <common.h>
|
|
+#include <dm.h>
|
|
+#include <reset-uclass.h>
|
|
+#include <asm/arch/msg.h>
|
|
+#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
|
|
+
|
|
+static int raspberrypi_reset_request(struct reset_ctl *reset_ctl)
|
|
+{
|
|
+ if (reset_ctl->id >= RASPBERRYPI_FIRMWARE_RESET_NUM_IDS)
|
|
+ return -EINVAL;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int raspberrypi_reset_free(struct reset_ctl *reset_ctl)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int raspberrypi_reset_assert(struct reset_ctl *reset_ctl)
|
|
+{
|
|
+ switch (reset_ctl->id) {
|
|
+ case RASPBERRYPI_FIRMWARE_RESET_ID_USB:
|
|
+ bcm2711_notify_vl805_reset();
|
|
+ return 0;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
+}
|
|
+
|
|
+static int raspberrypi_reset_deassert(struct reset_ctl *reset_ctl)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+struct reset_ops raspberrypi_reset_ops = {
|
|
+ .request = raspberrypi_reset_request,
|
|
+ .rfree = raspberrypi_reset_free,
|
|
+ .rst_assert = raspberrypi_reset_assert,
|
|
+ .rst_deassert = raspberrypi_reset_deassert,
|
|
+};
|
|
+
|
|
+static const struct udevice_id raspberrypi_reset_ids[] = {
|
|
+ { .compatible = "raspberrypi,firmware-reset" },
|
|
+ { }
|
|
+};
|
|
+
|
|
+U_BOOT_DRIVER(raspberrypi_reset) = {
|
|
+ .name = "raspberrypi-reset",
|
|
+ .id = UCLASS_RESET,
|
|
+ .of_match = raspberrypi_reset_ids,
|
|
+ .ops = &raspberrypi_reset_ops,
|
|
+};
|
|
+
|
|
diff --git a/include/dt-bindings/reset/raspberrypi,firmware-reset.h b/include/dt-bindings/reset/raspberrypi,firmware-reset.h
|
|
new file mode 100644
|
|
index 0000000000..1a4f4c7927
|
|
--- /dev/null
|
|
+++ b/include/dt-bindings/reset/raspberrypi,firmware-reset.h
|
|
@@ -0,0 +1,13 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
+/*
|
|
+ * Copyright (c) 2020 Nicolas Saenz Julienne
|
|
+ * Author: Nicolas Saenz Julienne <nsaenzjulienne@suse.com>
|
|
+ */
|
|
+
|
|
+#ifndef _DT_BINDINGS_RASPBERRYPI_FIRMWARE_RESET_H
|
|
+#define _DT_BINDINGS_RASPBERRYPI_FIRMWARE_RESET_H
|
|
+
|
|
+#define RASPBERRYPI_FIRMWARE_RESET_ID_USB 0
|
|
+#define RASPBERRYPI_FIRMWARE_RESET_NUM_IDS 1
|
|
+
|
|
+#endif
|
|
--
|
|
2.27.0
|
|
|