diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-23 15:14:41 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-23 15:14:41 +0100 |
commit | de3066bef705bd400a05e92305e634939d46f5a1 (patch) | |
tree | 729f5f95929d92b8727dee857f5f8ff33e3c789b /target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch | |
parent | 5f1bd952785e3257199879248e0b82216757b0b6 (diff) | |
download | upstream-de3066bef705bd400a05e92305e634939d46f5a1.tar.gz upstream-de3066bef705bd400a05e92305e634939d46f5a1.tar.bz2 upstream-de3066bef705bd400a05e92305e634939d46f5a1.zip |
bmips: rename upstream patches
These patches were applied in linux v5.11, not v5.12.
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch')
-rw-r--r-- | target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch b/target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch deleted file mode 100644 index 39b607d5bd..0000000000 --- a/target/linux/bmips/patches-5.10/003-v5.12-reset-add-BCM6345-reset-controller-driver.patch +++ /dev/null @@ -1,186 +0,0 @@ -From aac025437f14c1647dc6054b95daeebed34f6971 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> -Date: Wed, 17 Jun 2020 12:50:35 +0200 -Subject: [PATCH 3/9] reset: add BCM6345 reset controller driver -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add support for resetting blocks through the Linux reset controller -subsystem for BCM63xx SoCs. - -Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> -Reviewed-by: Florian Fainelli <F.fainelli@gmail.com> -Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> -Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> ---- - drivers/reset/Kconfig | 7 ++ - drivers/reset/Makefile | 1 + - drivers/reset/reset-bcm6345.c | 135 ++++++++++++++++++++++++++++++++++ - 3 files changed, 143 insertions(+) - create mode 100644 drivers/reset/reset-bcm6345.c - ---- a/drivers/reset/Kconfig -+++ b/drivers/reset/Kconfig -@@ -35,6 +35,13 @@ config RESET_AXS10X - help - This enables the reset controller driver for AXS10x. - -+config RESET_BCM6345 -+ bool "BCM6345 Reset Controller" -+ depends on BMIPS_GENERIC || COMPILE_TEST -+ default BMIPS_GENERIC -+ help -+ This enables the reset controller driver for BCM6345 SoCs. -+ - config RESET_BERLIN - bool "Berlin Reset Driver" if COMPILE_TEST - default ARCH_BERLIN ---- a/drivers/reset/Makefile -+++ b/drivers/reset/Makefile -@@ -6,6 +6,7 @@ obj-$(CONFIG_ARCH_TEGRA) += tegra/ - obj-$(CONFIG_RESET_A10SR) += reset-a10sr.o - obj-$(CONFIG_RESET_ATH79) += reset-ath79.o - obj-$(CONFIG_RESET_AXS10X) += reset-axs10x.o -+obj-$(CONFIG_RESET_BCM6345) += reset-bcm6345.o - obj-$(CONFIG_RESET_BERLIN) += reset-berlin.o - obj-$(CONFIG_RESET_BRCMSTB) += reset-brcmstb.o - obj-$(CONFIG_RESET_BRCMSTB_RESCAL) += reset-brcmstb-rescal.o ---- /dev/null -+++ b/drivers/reset/reset-bcm6345.c -@@ -0,0 +1,135 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+/* -+ * BCM6345 Reset Controller Driver -+ * -+ * Copyright (C) 2020 Álvaro Fernández Rojas <noltari@gmail.com> -+ */ -+ -+#include <linux/delay.h> -+#include <linux/init.h> -+#include <linux/io.h> -+#include <linux/mod_devicetable.h> -+#include <linux/platform_device.h> -+#include <linux/reset-controller.h> -+ -+#define BCM6345_RESET_NUM 32 -+#define BCM6345_RESET_SLEEP_MIN_US 10000 -+#define BCM6345_RESET_SLEEP_MAX_US 20000 -+ -+struct bcm6345_reset { -+ struct reset_controller_dev rcdev; -+ void __iomem *base; -+ spinlock_t lock; -+}; -+ -+static inline struct bcm6345_reset * -+to_bcm6345_reset(struct reset_controller_dev *rcdev) -+{ -+ return container_of(rcdev, struct bcm6345_reset, rcdev); -+} -+ -+static int bcm6345_reset_update(struct reset_controller_dev *rcdev, -+ unsigned long id, bool assert) -+{ -+ struct bcm6345_reset *bcm6345_reset = to_bcm6345_reset(rcdev); -+ unsigned long flags; -+ uint32_t val; -+ -+ spin_lock_irqsave(&bcm6345_reset->lock, flags); -+ val = __raw_readl(bcm6345_reset->base); -+ if (assert) -+ val &= ~BIT(id); -+ else -+ val |= BIT(id); -+ __raw_writel(val, bcm6345_reset->base); -+ spin_unlock_irqrestore(&bcm6345_reset->lock, flags); -+ -+ return 0; -+} -+ -+static int bcm6345_reset_assert(struct reset_controller_dev *rcdev, -+ unsigned long id) -+{ -+ return bcm6345_reset_update(rcdev, id, true); -+} -+ -+static int bcm6345_reset_deassert(struct reset_controller_dev *rcdev, -+ unsigned long id) -+{ -+ return bcm6345_reset_update(rcdev, id, false); -+} -+ -+static int bcm6345_reset_reset(struct reset_controller_dev *rcdev, -+ unsigned long id) -+{ -+ bcm6345_reset_update(rcdev, id, true); -+ usleep_range(BCM6345_RESET_SLEEP_MIN_US, -+ BCM6345_RESET_SLEEP_MAX_US); -+ -+ bcm6345_reset_update(rcdev, id, false); -+ /* -+ * Ensure component is taken out reset state by sleeping also after -+ * deasserting the reset. Otherwise, the component may not be ready -+ * for operation. -+ */ -+ usleep_range(BCM6345_RESET_SLEEP_MIN_US, -+ BCM6345_RESET_SLEEP_MAX_US); -+ -+ return 0; -+} -+ -+static int bcm6345_reset_status(struct reset_controller_dev *rcdev, -+ unsigned long id) -+{ -+ struct bcm6345_reset *bcm6345_reset = to_bcm6345_reset(rcdev); -+ -+ return !(__raw_readl(bcm6345_reset->base) & BIT(id)); -+} -+ -+static struct reset_control_ops bcm6345_reset_ops = { -+ .assert = bcm6345_reset_assert, -+ .deassert = bcm6345_reset_deassert, -+ .reset = bcm6345_reset_reset, -+ .status = bcm6345_reset_status, -+}; -+ -+static int bcm6345_reset_probe(struct platform_device *pdev) -+{ -+ struct bcm6345_reset *bcm6345_reset; -+ -+ bcm6345_reset = devm_kzalloc(&pdev->dev, -+ sizeof(*bcm6345_reset), GFP_KERNEL); -+ if (!bcm6345_reset) -+ return -ENOMEM; -+ -+ platform_set_drvdata(pdev, bcm6345_reset); -+ -+ bcm6345_reset->base = devm_platform_ioremap_resource(pdev, 0); -+ if (IS_ERR(bcm6345_reset->base)) -+ return PTR_ERR(bcm6345_reset->base); -+ -+ spin_lock_init(&bcm6345_reset->lock); -+ bcm6345_reset->rcdev.ops = &bcm6345_reset_ops; -+ bcm6345_reset->rcdev.owner = THIS_MODULE; -+ bcm6345_reset->rcdev.of_node = pdev->dev.of_node; -+ bcm6345_reset->rcdev.of_reset_n_cells = 1; -+ bcm6345_reset->rcdev.nr_resets = BCM6345_RESET_NUM; -+ -+ return devm_reset_controller_register(&pdev->dev, -+ &bcm6345_reset->rcdev); -+} -+ -+static const struct of_device_id bcm6345_reset_of_match[] = { -+ { .compatible = "brcm,bcm6345-reset" }, -+ { /* sentinel */ }, -+}; -+ -+static struct platform_driver bcm6345_reset_driver = { -+ .probe = bcm6345_reset_probe, -+ .driver = { -+ .name = "bcm6345-reset", -+ .of_match_table = bcm6345_reset_of_match, -+ .suppress_bind_attrs = true, -+ }, -+}; -+builtin_platform_driver(bcm6345_reset_driver); |