All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  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.