public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Ley Foon Tan <ley.foon.tan@intel.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 02/19] arm: socfpga: Restructure reset manager driver
Date: Wed,  5 Apr 2017 17:32:37 +0800	[thread overview]
Message-ID: <1491384774-49629-3-git-send-email-ley.foon.tan@intel.com> (raw)
In-Reply-To: <1491384774-49629-1-git-send-email-ley.foon.tan@intel.com>

Restructure reset manager driver in the preparation to support A10.
Move the Gen5 specific code to gen5 files. Change socfpga_per_reset() return type to int.

Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
---
 arch/arm/mach-socfpga/Makefile                     |  2 +-
 arch/arm/mach-socfpga/include/mach/reset_manager.h | 48 ++---------
 .../mach-socfpga/include/mach/reset_manager_gen5.h | 47 +++++++++++
 arch/arm/mach-socfpga/reset_manager.c              | 93 +---------------------
 .../{reset_manager.c => reset_manager_gen5.c}      | 51 ++++++------
 5 files changed, 81 insertions(+), 160 deletions(-)
 create mode 100644 arch/arm/mach-socfpga/include/mach/reset_manager_gen5.h
 copy arch/arm/mach-socfpga/{reset_manager.c => reset_manager_gen5.c} (75%)

diff --git a/arch/arm/mach-socfpga/Makefile b/arch/arm/mach-socfpga/Makefile
index b76de4c..97819ac 100644
--- a/arch/arm/mach-socfpga/Makefile
+++ b/arch/arm/mach-socfpga/Makefile
@@ -14,7 +14,7 @@ obj-$(CONFIG_SPL_BUILD) += spl.o freeze_controller.o
 
 # QTS-generated config file wrappers
 obj-$(CONFIG_TARGET_SOCFPGA_GEN5)	+= scan_manager.o wrap_pll_config.o \
-					   clock_manager_gen5.o
+					   clock_manager_gen5.o reset_manager_gen5.o
 obj-$(CONFIG_SPL_BUILD) += wrap_iocsr_config.o wrap_pinmux_config.o	\
 			   wrap_sdram_config.o
 CFLAGS_wrap_iocsr_config.o	+= -I$(srctree)/board/$(BOARDDIR)
diff --git a/arch/arm/mach-socfpga/include/mach/reset_manager.h b/arch/arm/mach-socfpga/include/mach/reset_manager.h
index 2f070f2..c99efa7 100644
--- a/arch/arm/mach-socfpga/include/mach/reset_manager.h
+++ b/arch/arm/mach-socfpga/include/mach/reset_manager.h
@@ -1,34 +1,19 @@
 /*
- *  Copyright (C) 2012 Altera Corporation <www.altera.com>
+ *  Copyright (C) 2012-2017 Altera Corporation <www.altera.com>
  *
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
-#ifndef	_RESET_MANAGER_H_
-#define	_RESET_MANAGER_H_
+#ifndef _RESET_MANAGER_H_
+#define _RESET_MANAGER_H_
 
 void reset_cpu(ulong addr);
-void reset_deassert_peripherals_handoff(void);
 
-void socfpga_bridges_reset(int enable);
+int socfpga_bridges_reset(int enable);
 
 void socfpga_per_reset(u32 reset, int set);
 void socfpga_per_reset_all(void);
 
-struct socfpga_reset_manager {
-	u32	status;
-	u32	ctrl;
-	u32	counts;
-	u32	padding1;
-	u32	mpu_mod_reset;
-	u32	per_mod_reset;
-	u32	per2_mod_reset;
-	u32	brg_mod_reset;
-	u32	misc_mod_reset;
-	u32	padding2[12];
-	u32	tstscratch;
-};
-
 #if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET)
 #define RSTMGR_CTRL_SWWARMRSTREQ_LSB 2
 #else
@@ -55,28 +40,11 @@ struct socfpga_reset_manager {
 #define RSTMGR_BANK(_reset)			\
 	(((_reset) >> RSTMGR_BANK_OFFSET) & RSTMGR_BANK_MASK)
 
-/*
- * SocFPGA Cyclone V/Arria V reset IDs, bank mapping is as follows:
- * 0 ... mpumodrst
- * 1 ... permodrst
- * 2 ... per2modrst
- * 3 ... brgmodrst
- * 4 ... miscmodrst
- */
-#define RSTMGR_EMAC0		RSTMGR_DEFINE(1, 0)
-#define RSTMGR_EMAC1		RSTMGR_DEFINE(1, 1)
-#define RSTMGR_NAND		RSTMGR_DEFINE(1, 4)
-#define RSTMGR_QSPI		RSTMGR_DEFINE(1, 5)
-#define RSTMGR_L4WD0		RSTMGR_DEFINE(1, 6)
-#define RSTMGR_OSC1TIMER0	RSTMGR_DEFINE(1, 8)
-#define RSTMGR_UART0		RSTMGR_DEFINE(1, 16)
-#define RSTMGR_SPIM0		RSTMGR_DEFINE(1, 18)
-#define RSTMGR_SPIM1		RSTMGR_DEFINE(1, 19)
-#define RSTMGR_SDMMC		RSTMGR_DEFINE(1, 22)
-#define RSTMGR_DMA		RSTMGR_DEFINE(1, 28)
-#define RSTMGR_SDR		RSTMGR_DEFINE(1, 29)
-
 /* Create a human-readable reference to SoCFPGA reset. */
 #define SOCFPGA_RESET(_name)	RSTMGR_##_name
 
+#if defined(CONFIG_TARGET_SOCFPGA_GEN5)
+#include <asm/arch/reset_manager_gen5.h>
+#endif
+
 #endif /* _RESET_MANAGER_H_ */
diff --git a/arch/arm/mach-socfpga/include/mach/reset_manager_gen5.h b/arch/arm/mach-socfpga/include/mach/reset_manager_gen5.h
new file mode 100644
index 0000000..672c519
--- /dev/null
+++ b/arch/arm/mach-socfpga/include/mach/reset_manager_gen5.h
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (C) 2012-2017 Altera Corporation <www.altera.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _RESET_MANAGER_GEN5_H_
+#define _RESET_MANAGER_GEN5_H_
+
+void reset_deassert_peripherals_handoff(void);
+
+struct socfpga_reset_manager {
+	u32	status;
+	u32	ctrl;
+	u32	counts;
+	u32	padding1;
+	u32	mpu_mod_reset;
+	u32	per_mod_reset;
+	u32	per2_mod_reset;
+	u32	brg_mod_reset;
+	u32	misc_mod_reset;
+	u32	padding2[12];
+	u32	tstscratch;
+};
+
+/*
+ * SocFPGA Cyclone V/Arria V reset IDs, bank mapping is as follows:
+ * 0 ... mpumodrst
+ * 1 ... permodrst
+ * 2 ... per2modrst
+ * 3 ... brgmodrst
+ * 4 ... miscmodrst
+ */
+#define RSTMGR_EMAC0		RSTMGR_DEFINE(1, 0)
+#define RSTMGR_EMAC1		RSTMGR_DEFINE(1, 1)
+#define RSTMGR_NAND		RSTMGR_DEFINE(1, 4)
+#define RSTMGR_QSPI		RSTMGR_DEFINE(1, 5)
+#define RSTMGR_L4WD0		RSTMGR_DEFINE(1, 6)
+#define RSTMGR_OSC1TIMER0	RSTMGR_DEFINE(1, 8)
+#define RSTMGR_UART0		RSTMGR_DEFINE(1, 16)
+#define RSTMGR_SPIM0		RSTMGR_DEFINE(1, 18)
+#define RSTMGR_SPIM1		RSTMGR_DEFINE(1, 19)
+#define RSTMGR_SDMMC		RSTMGR_DEFINE(1, 22)
+#define RSTMGR_DMA		RSTMGR_DEFINE(1, 28)
+#define RSTMGR_SDR		RSTMGR_DEFINE(1, 29)
+
+#endif /* _RESET_MANAGER_GEN5_H_ */
diff --git a/arch/arm/mach-socfpga/reset_manager.c b/arch/arm/mach-socfpga/reset_manager.c
index b6beaa2..29438ed 100644
--- a/arch/arm/mach-socfpga/reset_manager.c
+++ b/arch/arm/mach-socfpga/reset_manager.c
@@ -7,53 +7,12 @@
 
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/fpga_manager.h>
 #include <asm/arch/reset_manager.h>
-#include <asm/arch/system_manager.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 static const struct socfpga_reset_manager *reset_manager_base =
 		(void *)SOCFPGA_RSTMGR_ADDRESS;
-static struct socfpga_system_manager *sysmgr_regs =
-	(struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS;
-
-/* Assert or de-assert SoCFPGA reset manager reset. */
-void socfpga_per_reset(u32 reset, int set)
-{
-	const void *reg;
-
-	if (RSTMGR_BANK(reset) == 0)
-		reg = &reset_manager_base->mpu_mod_reset;
-	else if (RSTMGR_BANK(reset) == 1)
-		reg = &reset_manager_base->per_mod_reset;
-	else if (RSTMGR_BANK(reset) == 2)
-		reg = &reset_manager_base->per2_mod_reset;
-	else if (RSTMGR_BANK(reset) == 3)
-		reg = &reset_manager_base->brg_mod_reset;
-	else if (RSTMGR_BANK(reset) == 4)
-		reg = &reset_manager_base->misc_mod_reset;
-	else	/* Invalid reset register, do nothing */
-		return;
-
-	if (set)
-		setbits_le32(reg, 1 << RSTMGR_RESET(reset));
-	else
-		clrbits_le32(reg, 1 << RSTMGR_RESET(reset));
-}
-
-/*
- * Assert reset on every peripheral but L4WD0.
- * Watchdog must be kept intact to prevent glitches
- * and/or hangs.
- */
-void socfpga_per_reset_all(void)
-{
-	const u32 l4wd0 = 1 << RSTMGR_RESET(SOCFPGA_RESET(L4WD0));
-
-	writel(~l4wd0, &reset_manager_base->per_mod_reset);
-	writel(0xffffffff, &reset_manager_base->per2_mod_reset);
-}
 
 /*
  * Write the reset manager register to cause reset
@@ -61,8 +20,8 @@ void socfpga_per_reset_all(void)
 void reset_cpu(ulong addr)
 {
 	/* request a warm reset */
-	writel((1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB),
-		&reset_manager_base->ctrl);
+	writel(1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB,
+	       &reset_manager_base->ctrl);
 	/*
 	 * infinite loop here as watchdog will trigger and reset
 	 * the processor
@@ -70,51 +29,3 @@ void reset_cpu(ulong addr)
 	while (1)
 		;
 }
-
-/*
- * Release peripherals from reset based on handoff
- */
-void reset_deassert_peripherals_handoff(void)
-{
-	writel(0, &reset_manager_base->per_mod_reset);
-}
-
-#if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET)
-void socfpga_bridges_reset(int enable)
-{
-	/* For SoCFPGA-VT, this is NOP. */
-}
-#else
-
-#define L3REGS_REMAP_LWHPS2FPGA_MASK	0x10
-#define L3REGS_REMAP_HPS2FPGA_MASK	0x08
-#define L3REGS_REMAP_OCRAM_MASK		0x01
-
-void socfpga_bridges_reset(int enable)
-{
-	const uint32_t l3mask = L3REGS_REMAP_LWHPS2FPGA_MASK |
-				L3REGS_REMAP_HPS2FPGA_MASK |
-				L3REGS_REMAP_OCRAM_MASK;
-
-	if (enable) {
-		/* brdmodrst */
-		writel(0xffffffff, &reset_manager_base->brg_mod_reset);
-	} else {
-		writel(0, &sysmgr_regs->iswgrp_handoff[0]);
-		writel(l3mask, &sysmgr_regs->iswgrp_handoff[1]);
-
-		/* Check signal from FPGA. */
-		if (!fpgamgr_test_fpga_ready()) {
-			/* FPGA not ready, do nothing. */
-			printf("%s: FPGA not ready, aborting.\n", __func__);
-			return;
-		}
-
-		/* brdmodrst */
-		writel(0, &reset_manager_base->brg_mod_reset);
-
-		/* Remap the bridges into memory map */
-		writel(l3mask, SOCFPGA_L3REGS_ADDRESS);
-	}
-}
-#endif
diff --git a/arch/arm/mach-socfpga/reset_manager.c b/arch/arm/mach-socfpga/reset_manager_gen5.c
similarity index 75%
copy from arch/arm/mach-socfpga/reset_manager.c
copy to arch/arm/mach-socfpga/reset_manager_gen5.c
index b6beaa2..42be69a 100644
--- a/arch/arm/mach-socfpga/reset_manager.c
+++ b/arch/arm/mach-socfpga/reset_manager_gen5.c
@@ -15,26 +15,35 @@ DECLARE_GLOBAL_DATA_PTR;
 
 static const struct socfpga_reset_manager *reset_manager_base =
 		(void *)SOCFPGA_RSTMGR_ADDRESS;
-static struct socfpga_system_manager *sysmgr_regs =
+static const struct socfpga_system_manager *sysmgr_regs =
 	(struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS;
 
 /* Assert or de-assert SoCFPGA reset manager reset. */
 void socfpga_per_reset(u32 reset, int set)
 {
-	const void *reg;
+	const u32 *reg;
+	u32 rstmgr_bank = RSTMGR_BANK(reset);
 
-	if (RSTMGR_BANK(reset) == 0)
+	switch (rstmgr_bank) {
+	case 0:
 		reg = &reset_manager_base->mpu_mod_reset;
-	else if (RSTMGR_BANK(reset) == 1)
+		break;
+	case 1:
 		reg = &reset_manager_base->per_mod_reset;
-	else if (RSTMGR_BANK(reset) == 2)
+		break;
+	case 2:
 		reg = &reset_manager_base->per2_mod_reset;
-	else if (RSTMGR_BANK(reset) == 3)
+		break;
+	case 3:
 		reg = &reset_manager_base->brg_mod_reset;
-	else if (RSTMGR_BANK(reset) == 4)
+		break;
+	case 4:
 		reg = &reset_manager_base->misc_mod_reset;
-	else	/* Invalid reset register, do nothing */
+		break;
+
+	default:
 		return;
+	}
 
 	if (set)
 		setbits_le32(reg, 1 << RSTMGR_RESET(reset));
@@ -56,22 +65,6 @@ void socfpga_per_reset_all(void)
 }
 
 /*
- * Write the reset manager register to cause reset
- */
-void reset_cpu(ulong addr)
-{
-	/* request a warm reset */
-	writel((1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB),
-		&reset_manager_base->ctrl);
-	/*
-	 * infinite loop here as watchdog will trigger and reset
-	 * the processor
-	 */
-	while (1)
-		;
-}
-
-/*
  * Release peripherals from reset based on handoff
  */
 void reset_deassert_peripherals_handoff(void)
@@ -80,9 +73,10 @@ void reset_deassert_peripherals_handoff(void)
 }
 
 #if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET)
-void socfpga_bridges_reset(int enable)
+int socfpga_bridges_reset(int enable)
 {
 	/* For SoCFPGA-VT, this is NOP. */
+	return 0;
 }
 #else
 
@@ -90,9 +84,9 @@ void socfpga_bridges_reset(int enable)
 #define L3REGS_REMAP_HPS2FPGA_MASK	0x08
 #define L3REGS_REMAP_OCRAM_MASK		0x01
 
-void socfpga_bridges_reset(int enable)
+int socfpga_bridges_reset(int enable)
 {
-	const uint32_t l3mask = L3REGS_REMAP_LWHPS2FPGA_MASK |
+	const u32 l3mask = L3REGS_REMAP_LWHPS2FPGA_MASK |
 				L3REGS_REMAP_HPS2FPGA_MASK |
 				L3REGS_REMAP_OCRAM_MASK;
 
@@ -107,7 +101,7 @@ void socfpga_bridges_reset(int enable)
 		if (!fpgamgr_test_fpga_ready()) {
 			/* FPGA not ready, do nothing. */
 			printf("%s: FPGA not ready, aborting.\n", __func__);
-			return;
+			return -EINVAL;
 		}
 
 		/* brdmodrst */
@@ -116,5 +110,6 @@ void socfpga_bridges_reset(int enable)
 		/* Remap the bridges into memory map */
 		writel(l3mask, SOCFPGA_L3REGS_ADDRESS);
 	}
+	return 0;
 }
 #endif
-- 
1.8.2.3

  parent reply	other threads:[~2017-04-05  9:32 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-05  9:32 [U-Boot] [PATCH v4 00/19] Add Intel Arria 10 SoC support Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 01/19] arm: socfpga: Restructure clock manager driver Ley Foon Tan
2017-04-05 19:12   ` Dinh Nguyen
2017-04-06  8:31     ` Ley Foon Tan
2017-04-05  9:32 ` Ley Foon Tan [this message]
2017-04-05  9:32 ` [U-Boot] [PATCH v4 03/19] arm: socfpga: Restructure system manager Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 04/19] arm: socfpga: Restructure misc driver Ley Foon Tan
2017-04-05 10:39   ` Marek Vasut
2017-04-06  5:37     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 05/19] arm: socfpga: Add A10 macros Ley Foon Tan
2017-04-06 14:10   ` Dinh Nguyen
2017-04-07  0:32     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 06/19] arm: socfpga: Add reset driver support for Arria 10 Ley Foon Tan
2017-04-06 19:37   ` Dinh Nguyen
2017-04-07  7:43     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 07/19] arm: socfpga: Add clock driver " Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 08/19] arm: socfpga: Add system manager " Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 09/19] arm: socfpga: Add sdram header file " Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 10/19] arm: socfpga: Add misc support " Ley Foon Tan
2017-04-05 10:40   ` Marek Vasut
2017-04-06  3:20     ` Ley Foon Tan
2017-04-06 10:17       ` Marek Vasut
2017-04-07  0:33         ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 11/19] arm: socfpga: Add pinmux " Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 12/19] fdt: Add compatible strings " Ley Foon Tan
2017-04-05 10:41   ` Marek Vasut
2017-04-15 16:06   ` Simon Glass
2017-04-05  9:32 ` [U-Boot] [PATCH v4 13/19] arm: dts: Add dts and dtsi " Ley Foon Tan
2017-04-10 14:50   ` Dinh Nguyen
2017-04-11  5:50     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 14/19] arm: socfpga: Add SPL support " Ley Foon Tan
2017-04-10 20:43   ` Dinh Nguyen
2017-04-10 22:05     ` Dinh Nguyen
2017-04-11  3:42       ` Dinh Nguyen
2017-04-11  5:48         ` Ley Foon Tan
2017-04-11 12:28           ` Dinh Nguyen
2017-04-11 10:35         ` Marek Vasut
2017-04-11  5:45     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 15/19] drivers: fpga: Add compile switch for Gen5 only registers Ley Foon Tan
2017-04-07 14:26   ` Dinh Nguyen
2017-04-10  7:44     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 16/19] arm: socfpga: Convert Altera DDR SDRAM driver to use Kconfig Ley Foon Tan
2017-04-05 10:44   ` Marek Vasut
2017-04-05  9:32 ` [U-Boot] [PATCH v4 17/19] arm: socfpga: Add config and defconfig for Arria 10 Ley Foon Tan
2017-04-07 14:17   ` Dinh Nguyen
2017-04-10  7:40     ` Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 18/19] arm: socfpga: Add board files for the Arria10 Ley Foon Tan
2017-04-05  9:32 ` [U-Boot] [PATCH v4 19/19] arm: socfpga: Enable build for Arria 10 Ley Foon Tan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1491384774-49629-3-git-send-email-ley.foon.tan@intel.com \
    --to=ley.foon.tan@intel.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox