[PATCH v2 4/4] arch: arm: socfpga: Configure USB3 System Manager registers

Chee, Tien Fong tien.fong.chee at altera.com
Fri Aug 29 06:56:13 CEST 2025



> -----Original Message-----
> From: Ravulapalli, Naresh Kumar <naresh.kumar.ravulapalli at altera.com>
> Sent: Thursday, August 28, 2025 2:24 PM
> To: u-boot at lists.denx.de
> Cc: Marek Vasut <marek.vasut at mailbox.org>; Simon Goldschmidt
> <simon.k.r.goldschmidt at gmail.com>; Chee, Tien Fong
> <tien.fong.chee at altera.com>; Tom Rini <trini at konsulko.com>; Ravulapalli,
> Naresh Kumar <naresh.kumar.ravulapalli at altera.com>
> Subject: [PATCH v2 4/4] arch: arm: socfpga: Configure USB3 System Manager
> registers
> 
> For successful reset staggering pulse operation, reset pulse override bit is set.
> Port overcurrent bit 1, which in reality reflects PIPE power present signal is
> set to avoid giving false information of Vbus status to HPS controller.
> 
> Signed-off-by: Naresh Kumar Ravulapalli
> <nareshkumar.ravulapalli at altera.com>
> ---
>  .../include/mach/system_manager_soc64.h       | 12 +++++++++
>  arch/arm/mach-socfpga/system_manager_soc64.c  | 26
> ++++++++++++++++++-
>  2 files changed, 37 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
> b/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
> index c2ca0a50e35..c0392d99863 100644
> --- a/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
> +++ b/arch/arm/mach-socfpga/include/mach/system_manager_soc64.h
> @@ -33,6 +33,7 @@ void populate_sysmgr_pinmux(void);
>  #define SYSMGR_SOC64_ECC_INTMASK_CLR		0x98
>  #define SYSMGR_SOC64_ECC_INTMASK_SERR		0x9C
>  #define SYSMGR_SOC64_ECC_INTMASK_DERR		0xA0
> +#define SYSMGR_SOC64_USB3_MISC_CTRL_REG0	0x1F0
>  #define SYSMGR_SOC64_MPFE_CONFIG		0x228
>  #define SYSMGR_SOC64_BOOT_SCRATCH_POR0		0x258
>  #define SYSMGR_SOC64_BOOT_SCRATCH_POR1		0x25C
> @@ -47,6 +48,17 @@ void populate_sysmgr_pinmux(void);
>  #define ALT_SYSMGR_SCRATCH_REG_POR_0_DDR_PROGRESS_MASK
> 	BIT(0)
>  #define
> ALT_SYSMGR_SCRATCH_REG_POR_1_REVA_WORKAROUND_USER_MODE_
> MASK	BIT(0)
>  #define
> ALT_SYSMGR_SCRATCH_REG_POR_1_REVA_WORKAROUND_MASK	BIT(1)
> +
> +/*
> + * Bits for SYSMGR_SOC64_USB3_MISC_CTRL_REG0
> + * Bits[14:13] Port Overcurrent
> + * Bit[12] Reset Pulse Override
> + */
> +#define SYSMGR_SOC64_USB3_MISC_CTRL_REG0_PORT_OVR_CURR
> 	GENMASK(14, 13)
> +#define SYSMGR_SOC64_USB3_MISC_CTRL_REG0_RESET_PUL_OVR	BIT(12)
> +#define SET_USB3_MISC_CTRL_REG0_PORT_RESET_PUL_OVR	1
> +/* BIT 1 actually reflects PIPE power present signal */
> +#define SET_USB3_MISC_CTRL_REG0_PORT_OVR_CURR_BIT_1	2
>  #else
>  #define SYSMGR_SOC64_NAND_AXUSER		0x5c
>  #define SYSMGR_SOC64_DMA_L3MASTER		0x74
> diff --git a/arch/arm/mach-socfpga/system_manager_soc64.c
> b/arch/arm/mach-socfpga/system_manager_soc64.c
> index 4b42158be9d..88d538cdcda 100644
> --- a/arch/arm/mach-socfpga/system_manager_soc64.c
> +++ b/arch/arm/mach-socfpga/system_manager_soc64.c
> @@ -1,16 +1,36 @@
>  // SPDX-License-Identifier: GPL-2.0
>  /*
>   * Copyright (C) 2016-2021 Intel Corporation <www.intel.com>
> - *
> + * Copyright (C) 2025 Altera Corporation <www.altera.com>
>   */
> 
>  #include <asm/arch/handoff_soc64.h>
>  #include <asm/arch/system_manager.h>
>  #include <asm/global_data.h>
>  #include <asm/io.h>
> +#include <linux/bitfield.h>
> 
>  DECLARE_GLOBAL_DATA_PTR;
> 
> +#if IS_ENABLED(CONFIG_TARGET_SOCFPGA_AGILEX5)
> +/*
> + * Setting RESET_PULSE_OVERRIDE bit for successful reset staggering
> +pulse
> + * generation and setting PORT_OVERCURRENT bit so that until we turn on
> +the
> + * Vbus, it doesn't give false information about Vbus to the HPS controller.
> + */
> +static void sysmgr_config_usb3(void)
> +{
> +	u32 reg_val = 0;
> +
> +	reg_val = readl(socfpga_get_sysmgr_addr() +
> SYSMGR_SOC64_USB3_MISC_CTRL_REG0);
> +	reg_val |=
> FIELD_PREP(SYSMGR_SOC64_USB3_MISC_CTRL_REG0_RESET_PUL_OVR,
> +
> 	SET_USB3_MISC_CTRL_REG0_PORT_RESET_PUL_OVR);
> +	reg_val |=
> FIELD_PREP(SYSMGR_SOC64_USB3_MISC_CTRL_REG0_PORT_OVR_CURR,
> +
> 	SET_USB3_MISC_CTRL_REG0_PORT_OVR_CURR_BIT_1);
> +	writel(reg_val, socfpga_get_sysmgr_addr() +
> +SYSMGR_SOC64_USB3_MISC_CTRL_REG0);
> +}
> +#endif
> +
>  /*
>   * Configure all the pin muxes
>   */
> @@ -18,6 +38,10 @@ void sysmgr_pinmux_init(void)  {
>  	populate_sysmgr_pinmux();
>  	populate_sysmgr_fpgaintf_module();
> +
> +#if IS_ENABLED(CONFIG_TARGET_SOCFPGA_AGILEX5)
> +	sysmgr_config_usb3();
> +#endif
>  }
> 
>  /*
> --
> 2.35.3

Reviewed-by: Tien Fong Chee <tien.fong.chee at altera.com>

Best regards,
Tien Fong



More information about the U-Boot mailing list