Re: [PATCH v3 4/8] reset: Add IPQ40xx reset controller driver

2020-09-19 Thread Tom Rini
On Thu, Sep 10, 2020 at 04:00:02PM +0200, Robert Marko wrote:

> On Qualcomm IPQ40xx SoC series, GCC clock IP also handles the resets.
> So since this will be needed by further drivers, lets add a driver for the 
> reset controller.
> 
> Signed-off-by: Robert Marko 
> Cc: Luka Perkov 

Applied to u-boot/next, thanks!

-- 
Tom


signature.asc
Description: PGP signature


[PATCH v3 4/8] reset: Add IPQ40xx reset controller driver

2020-09-10 Thread Robert Marko
On Qualcomm IPQ40xx SoC series, GCC clock IP also handles the resets.
So since this will be needed by further drivers, lets add a driver for the 
reset controller.

Signed-off-by: Robert Marko 
Cc: Luka Perkov 
---
 MAINTAINERS   |   2 +
 drivers/reset/Kconfig |   8 +
 drivers/reset/Makefile|   1 +
 drivers/reset/reset-ipq4019.c | 173 ++
 .../dt-bindings/reset/qcom,ipq4019-reset.h|  92 ++
 5 files changed, 276 insertions(+)
 create mode 100644 drivers/reset/reset-ipq4019.c
 create mode 100644 include/dt-bindings/reset/qcom,ipq4019-reset.h

diff --git a/MAINTAINERS b/MAINTAINERS
index fa73c4e025..1f00d5fced 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -238,6 +238,8 @@ M:  Luka Perkov 
 S: Maintained
 F: arch/arm/mach-ipq40xx/
 F: include/dt-bindings/clock/qcom,ipq4019-gcc.h
+F: include/dt-bindings/reset/qcom,ipq4019-reset.h
+F: drivers/reset/reset-ipq4019.c
 
 ARM MARVELL KIRKWOOD ARMADA-XP ARMADA-38X ARMADA-37XX ARMADA-7K/8K
 M: Stefan Roese 
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 253902ff57..3fdfe4a6cb 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -148,6 +148,14 @@ config RESET_IMX7
help
  Support for reset controller on i.MX7/8 SoCs.
 
+config RESET_IPQ419
+   bool "Reset driver for Qualcomm IPQ40xx SoCs"
+   depends on DM_RESET && ARCH_IPQ40XX
+   default y
+   help
+ Support for reset controller on Qualcomm
+ IPQ40xx SoCs.
+
 config RESET_SIFIVE
bool "Reset Driver for SiFive SoC's"
depends on DM_RESET && CLK_SIFIVE_FU540_PRCI && TARGET_SIFIVE_FU540
diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
index 3c7f066ae3..5176da5885 100644
--- a/drivers/reset/Makefile
+++ b/drivers/reset/Makefile
@@ -23,6 +23,7 @@ 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_IPQ419) += reset-ipq4019.o
 obj-$(CONFIG_RESET_SIFIVE) += reset-sifive.o
 obj-$(CONFIG_RESET_SYSCON) += reset-syscon.o
 obj-$(CONFIG_RESET_RASPBERRYPI) += reset-raspberrypi.o
diff --git a/drivers/reset/reset-ipq4019.c b/drivers/reset/reset-ipq4019.c
new file mode 100644
index 00..f216db4ce5
--- /dev/null
+++ b/drivers/reset/reset-ipq4019.c
@@ -0,0 +1,173 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Sartura Ltd.
+ *
+ * Author: Robert Marko 
+ *
+ * Based on Linux driver
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+struct ipq4019_reset_priv {
+   phys_addr_t base;
+};
+
+struct qcom_reset_map {
+   unsigned int reg;
+   u8 bit;
+};
+
+static const struct qcom_reset_map gcc_ipq4019_resets[] = {
+   [WIFI0_CPU_INIT_RESET] = { 0x1f008, 5 },
+   [WIFI0_RADIO_SRIF_RESET] = { 0x1f008, 4 },
+   [WIFI0_RADIO_WARM_RESET] = { 0x1f008, 3 },
+   [WIFI0_RADIO_COLD_RESET] = { 0x1f008, 2 },
+   [WIFI0_CORE_WARM_RESET] = { 0x1f008, 1 },
+   [WIFI0_CORE_COLD_RESET] = { 0x1f008, 0 },
+   [WIFI1_CPU_INIT_RESET] = { 0x20008, 5 },
+   [WIFI1_RADIO_SRIF_RESET] = { 0x20008, 4 },
+   [WIFI1_RADIO_WARM_RESET] = { 0x20008, 3 },
+   [WIFI1_RADIO_COLD_RESET] = { 0x20008, 2 },
+   [WIFI1_CORE_WARM_RESET] = { 0x20008, 1 },
+   [WIFI1_CORE_COLD_RESET] = { 0x20008, 0 },
+   [USB3_UNIPHY_PHY_ARES] = { 0x1e038, 5 },
+   [USB3_HSPHY_POR_ARES] = { 0x1e038, 4 },
+   [USB3_HSPHY_S_ARES] = { 0x1e038, 2 },
+   [USB2_HSPHY_POR_ARES] = { 0x1e01c, 4 },
+   [USB2_HSPHY_S_ARES] = { 0x1e01c, 2 },
+   [PCIE_PHY_AHB_ARES] = { 0x1d010, 11 },
+   [PCIE_AHB_ARES] = { 0x1d010, 10 },
+   [PCIE_PWR_ARES] = { 0x1d010, 9 },
+   [PCIE_PIPE_STICKY_ARES] = { 0x1d010, 8 },
+   [PCIE_AXI_M_STICKY_ARES] = { 0x1d010, 7 },
+   [PCIE_PHY_ARES] = { 0x1d010, 6 },
+   [PCIE_PARF_XPU_ARES] = { 0x1d010, 5 },
+   [PCIE_AXI_S_XPU_ARES] = { 0x1d010, 4 },
+   [PCIE_AXI_M_VMIDMT_ARES] = { 0x1d010, 3 },
+   [PCIE_PIPE_ARES] = { 0x1d010, 2 },
+   [PCIE_AXI_S_ARES] = { 0x1d010, 1 },
+   [PCIE_AXI_M_ARES] = { 0x1d010, 0 },
+   [ESS_RESET] = { 0x12008, 0},
+   [GCC_BLSP1_BCR] = {0x01000, 0},
+   [GCC_BLSP1_QUP1_BCR] = {0x02000, 0},
+   [GCC_BLSP1_UART1_BCR] = {0x02038, 0},
+   [GCC_BLSP1_QUP2_BCR] = {0x03008, 0},
+   [GCC_BLSP1_UART2_BCR] = {0x03028, 0},
+   [GCC_BIMC_BCR] = {0x04000, 0},
+   [GCC_TLMM_BCR] = {0x05000, 0},
+   [GCC_IMEM_BCR] = {0x0E000, 0},
+   [GCC_ESS_BCR] = {0x12008, 0},
+   [GCC_PRNG_BCR] = {0x13000, 0},
+   [GCC_BOOT_ROM_BCR] = {0x13008, 0},
+   [GCC_CRYPTO_BCR] = {0x16000, 0},
+   [GCC_SDCC1_BCR] = {0x18000, 0},
+   [GCC_SEC_CTRL_BCR] = {0x1A000, 0},
+   [GCC_AUDIO_BCR] = {0x1B008, 0},
+   [GCC_QPIC_BCR] = {0x1C000, 0},
+   [