[PATCH u-boot-marvell 3/9] arm: mvebu: a38x: serdes: Add comments for hws_pex_config() code

Stefan Roese sr at denx.de
Fri Oct 8 08:27:05 CEST 2021


On 24.09.21 22:59, Marek Behún wrote:
> From: Pali Rohár <pali at kernel.org>
> 
> Add comments to understand what this magic code is doing.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>
> Reviewed-by: Marek Behún <marek.behun at nic.cz>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c | 14 +++++++++++++-
>   1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c b/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c
> index 717bcfb29c..0eb31d589c 100644
> --- a/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c
> +++ b/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c
> @@ -42,6 +42,7 @@ int hws_pex_config(const struct serdes_map *serdes_map, u8 count)
>   			continue;
>   		}
>   
> +		/* Set Device/Port Type to RootComplex */
>   		pex_idx = serdes_type - PEX0;
>   		tmp = reg_read(PEX_CAPABILITIES_REG(pex_idx));
>   		tmp &= ~(0xf << 20);
> @@ -122,12 +123,18 @@ int hws_pex_config(const struct serdes_map *serdes_map, u8 count)
>   		}
>   
>   		next_busno++;
> +
> +		/*
> +		 * Read maximum link speed. It must be 0x2 (5.0 GT/s) as this
> +		 * value was set in serdes_power_up_ctrl() function.
> +		 */
>   		temp_pex_reg = reg_read((PEX_CFG_DIRECT_ACCESS
>   					 (pex_idx, PEX_LINK_CAPABILITY_REG)));
>   		temp_pex_reg &= 0xf;
>   		if (temp_pex_reg != 0x2)
>   			continue;
>   
> +		/* Read negotiated link speed */
>   		temp_reg = (reg_read(PEX_CFG_DIRECT_ACCESS(
>   					     pex_idx,
>   					     PEX_LINK_CTRL_STAT_REG)) &
> @@ -155,6 +162,7 @@ int hws_pex_config(const struct serdes_map *serdes_map, u8 count)
>   			continue;
>   		}
>   
> +		/* Find start of the PCI Express Capability registers */
>   		while ((pex_config_read(pex_idx, first_busno, 0, 0, addr)
>   			& 0xff) != 0x10) {
>   			addr = (pex_config_read(pex_idx, first_busno, 0,
> @@ -173,11 +181,15 @@ int hws_pex_config(const struct serdes_map *serdes_map, u8 count)
>   		tmp = reg_read(PEX_LINK_CTRL_STATUS2_REG(pex_idx));
>   		DEBUG_RD_REG(PEX_LINK_CTRL_STATUS2_REG(pex_idx), tmp);
>   		tmp &= ~(BIT(0) | BIT(1));
> -		tmp |= BIT(1);
> +		tmp |= BIT(1);	/* Force Target Link Speed to 5.0 GT/s */
>   		tmp |= BIT(6);	/* Select Deemphasize (-3.5d_b) */
>   		reg_write(PEX_LINK_CTRL_STATUS2_REG(pex_idx), tmp);
>   		DEBUG_WR_REG(PEX_LINK_CTRL_STATUS2_REG(pex_idx), tmp);
>   
> +		/*
> +		 * Enable Auto Speed change. When set, link will issue link
> +		 * speed change to max possible link speed.
> +		 */
>   		tmp = reg_read(PEX_CTRL_REG(pex_idx));
>   		DEBUG_RD_REG(PEX_CTRL_REG(pex_idx), tmp);
>   		tmp |= BIT(10);
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list