From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCHv4 3/9] arm: socfpga: arria10: add reset manager for Arria10
Date: Thu, 3 Dec 2015 03:44:41 +0100 [thread overview]
Message-ID: <201512030344.41370.marex@denx.de> (raw)
In-Reply-To: <1449084693-942-4-git-send-email-dinguyen@opensource.altera.com>
On Wednesday, December 02, 2015 at 08:31:27 PM, dinguyen at opensource.altera.com
wrote:
> From: Dinh Nguyen <dinguyen@opensource.altera.com>
>
> Add the defines for the reset manager and some basic reset functionality.
>
> Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com>
> ---
> v4: rename mod_reset names to be used by both gen5 and a10
> v3: remove duplicate reset function
> use CONFIG_SOCFPGA_GEN5
> v2: integrate into a5/c5 reset manager
> ---
> arch/arm/mach-socfpga/include/mach/reset_manager.h | 71
> +++++++++++++++++++++- arch/arm/mach-socfpga/reset_manager.c
> | 36 ++++++++--- 2 files changed, 97 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/mach-socfpga/include/mach/reset_manager.h
> b/arch/arm/mach-socfpga/include/mach/reset_manager.h index
> e50fbd8..b34c7c6 100644
> --- a/arch/arm/mach-socfpga/include/mach/reset_manager.h
> +++ b/arch/arm/mach-socfpga/include/mach/reset_manager.h
> @@ -15,19 +15,56 @@ void socfpga_bridges_reset(int enable);
> void socfpga_per_reset(u32 reset, int set);
> void socfpga_per_reset_all(void);
>
> +#if defined(CONFIG_TARGET_SOCFPGA_GEN5)
> 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 per0_mod_reset; /* per_mod_reset */
> + u32 per1_mod_reset; /* per2_mod_reset */
> u32 brg_mod_reset;
> - u32 misc_mod_reset;
> + u32 sys_mod_reset; /* misc_mod_reset */
OK, so why do you rename it for gen5 and not gen10 ?
> u32 padding2[12];
> u32 tstscratch;
[...]
> @@ -26,13 +28,13 @@ void socfpga_per_reset(u32 reset, int set)
> 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;
> + reg = &reset_manager_base->per0_mod_reset;
> else if (RSTMGR_BANK(reset) == 2)
> - reg = &reset_manager_base->per2_mod_reset;
> + reg = &reset_manager_base->per1_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;
> + reg = &reset_manager_base->sys_mod_reset;
This change would not be necessary than.
> else /* Invalid reset register, do nothing */
> return;
>
> @@ -46,13 +48,29 @@ void socfpga_per_reset(u32 reset, int set)
> * Assert reset on every peripheral but L4WD0.
> * Watchdog must be kept intact to prevent glitches
> * and/or hangs.
> + * For the Arria10, we disable all the peripherals except L4 watchdog0,
> + * L4 Timer 0, and ECC.
> */
> void socfpga_per_reset_all(void)
> {
> +#if defined(CONFIG_TARGET_SOCFPGA_GEN5)
> 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);
> + writel(~l4wd0, &reset_manager_base->per0_mod_reset);
> + writel(0xffffffff, &reset_manager_base->per1_mod_reset);
> +#else
> + const u32 l4wd0 = (1 << RSTMGR_RESET(SOCFPGA_RESET(L4WD0)) |
> + (1 << RSTMGR_RESET(SOCFPGA_RESET(L4SYSTIMER0))));
> +
> + unsigned mask_ecc_ocp = 0x0000FF00;
> +
> + /* disable all components except ECC_OCP, L4 Timer0 and L4 WD0 */
> + writel(~l4wd0, &reset_manager_base->per1_mod_reset);
> + setbits_le32(&reset_manager_base->per0_mod_reset, ~mask_ecc_ocp);
> +
> + /* Finally disable the ECC_OCP */
> + setbits_le32(&reset_manager_base->per0_mod_reset, mask_ecc_ocp);
> +#endif
> }
>
> /*
> @@ -71,13 +89,15 @@ void reset_cpu(ulong addr)
> ;
> }
>
> +#if defined(CONFIG_TARGET_SOCFPGA_GEN5)
> /*
> * Release peripherals from reset based on handoff
> */
> void reset_deassert_peripherals_handoff(void)
> {
> - writel(0, &reset_manager_base->per_mod_reset);
> + writel(0, &reset_manager_base->per0_mod_reset);
And this change.
> }
> +#endif
>
> #if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET)
> void socfpga_bridges_reset(int enable)
> @@ -92,6 +112,7 @@ void socfpga_bridges_reset(int enable)
>
> void socfpga_bridges_reset(int enable)
> {
> +#if defined(CONFIG_TARGET_SOCFPGA_GEN5)
> const uint32_t l3mask = L3REGS_REMAP_LWHPS2FPGA_MASK |
> L3REGS_REMAP_HPS2FPGA_MASK |
> L3REGS_REMAP_OCRAM_MASK;
> @@ -116,5 +137,6 @@ void socfpga_bridges_reset(int enable)
> /* Remap the bridges into memory map */
> writel(l3mask, SOCFPGA_L3REGS_ADDRESS);
> }
> +#endif
> }
> #endif
It looks OK otherwise of course.
next prev parent reply other threads:[~2015-12-03 2:44 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 19:31 [U-Boot] [PATCHv4 0/9] ARM: socfpga: Add minimal support for Arria10 dinguyen at opensource.altera.com
2015-12-02 19:31 ` [U-Boot] [PATCHv4 1/9] arm: socfpga: introduce TARGET_SOCFPGA_GEN5 config property dinguyen at opensource.altera.com
2015-12-03 2:41 ` Marek Vasut
2015-12-02 19:31 ` [U-Boot] [PATCHv4 2/9] arm: socfpga: arria10: add system manager defines dinguyen at opensource.altera.com
2015-12-03 2:42 ` Marek Vasut
2015-12-03 22:08 ` Dinh Nguyen
2015-12-03 22:57 ` Marek Vasut
2015-12-02 19:31 ` [U-Boot] [PATCHv4 3/9] arm: socfpga: arria10: add reset manager for Arria10 dinguyen at opensource.altera.com
2015-12-03 2:44 ` Marek Vasut [this message]
2015-12-03 18:51 ` Pavel Machek
2015-12-02 19:31 ` [U-Boot] [PATCHv4 4/9] arm: socfpga: arria10: add misc functions " dinguyen at opensource.altera.com
2015-12-03 2:47 ` Marek Vasut
2015-12-03 19:56 ` Dinh Nguyen
2015-12-02 19:31 ` [U-Boot] [PATCHv4 5/9] arm: socfpga: arria10: add socfpga_arria10_socdk config dinguyen at opensource.altera.com
2015-12-03 2:48 ` Marek Vasut
2015-12-02 19:31 ` [U-Boot] [PATCHv4 6/9] arm: socfpga: arria10: add socfpga_arria10_defconfig dinguyen at opensource.altera.com
2015-12-03 2:48 ` Marek Vasut
2015-12-02 19:31 ` [U-Boot] [PATCHv4 7/9] arm: socfpga: arria10: add config option build for arria10 dinguyen at opensource.altera.com
2015-12-02 19:31 ` [U-Boot] [PATCHv4 8/9] arm: socfpga: remove building scan manager dinguyen at opensource.altera.com
2015-12-03 2:49 ` Marek Vasut
2015-12-02 19:31 ` [U-Boot] [PATCHv4 9/9] arm: socfpga: fix up a questionable macro for SDMMC dinguyen at opensource.altera.com
2015-12-03 2:52 ` Marek Vasut
2015-12-03 2:59 ` [U-Boot] [PATCHv4 0/9] ARM: socfpga: Add minimal support for Arria10 Marek Vasut
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=201512030344.41370.marex@denx.de \
--to=marex@denx.de \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.