[Skiboot] [PATCH 08/16] npu2-hw-procedures: Fix link retraining on reset
Andrew Donnellan
ajd at linux.ibm.com
Wed Sep 25 22:31:43 AEST 2019
On 9/9/19 2:31 pm, Frederic Barrat wrote:
> Link retraining was showing reliability problems due to some
> opencapi-only settings not being optimized. This patch updates some
> extra PHY state, as agreed with the PHY team. Though they mostly
> impact link retraining behavior, they should also be set at boot.
>
> Signed-off-by: Frederic Barrat <fbarrat at linux.ibm.com>
I'm not a PHY expert so can't comment on the magic values, but otherwise
this code looks fine.
Reviewed-by: Andrew Donnellan <ajd at linux.ibm.com>
> ---
> hw/npu2-hw-procedures.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/hw/npu2-hw-procedures.c b/hw/npu2-hw-procedures.c
> index 6cd780cc..ad1627ae 100644
> --- a/hw/npu2-hw-procedures.c
> +++ b/hw/npu2-hw-procedures.c
> @@ -60,8 +60,14 @@ static struct npu2_phy_reg NPU2_PHY_RX_PR_FW_OFF = {0x08a, 56, 1};
> static struct npu2_phy_reg NPU2_PHY_RX_PR_FW_INERTIA_AMT = {0x08a, 57, 3};
> static struct npu2_phy_reg NPU2_PHY_RX_CFG_LTE_MC = {0x000, 60, 4};
> static struct npu2_phy_reg NPU2_PHY_RX_A_INTEG_COARSE_GAIN = {0x00a, 48, 4};
> +static struct npu2_phy_reg NPU2_PHY_RX_A_CTLE_COARSE = {0x00c, 48, 5};
> +static struct npu2_phy_reg NPU2_PHY_RX_A_CTLE_GAIN = {0x00c, 53, 4};
> static struct npu2_phy_reg NPU2_PHY_RX_B_INTEG_COARSE_GAIN = {0x026, 48, 4};
> +static struct npu2_phy_reg NPU2_PHY_RX_B_CTLE_COARSE = {0x028, 48, 5};
> +static struct npu2_phy_reg NPU2_PHY_RX_B_CTLE_GAIN = {0x028, 53, 4};
> static struct npu2_phy_reg NPU2_PHY_RX_E_INTEG_COARSE_GAIN = {0x030, 48, 4};
> +static struct npu2_phy_reg NPU2_PHY_RX_E_CTLE_COARSE = {0x032, 48, 5};
> +static struct npu2_phy_reg NPU2_PHY_RX_E_CTLE_GAIN = {0x032, 53, 4};
>
> /* These registers are per-PHY, not per lane */
> static struct npu2_phy_reg NPU2_PHY_RX_SPEED_SELECT = {0x262, 51, 2};
> @@ -429,6 +435,16 @@ static uint32_t phy_reset_complete(struct npu2_dev *ndev)
> phy_write_lane(ndev, &NPU2_PHY_RX_A_INTEG_COARSE_GAIN, lane, 11);
> phy_write_lane(ndev, &NPU2_PHY_RX_B_INTEG_COARSE_GAIN, lane, 11);
> phy_write_lane(ndev, &NPU2_PHY_RX_E_INTEG_COARSE_GAIN, lane, 11);
> +
> + if (ndev->type == NPU2_DEV_TYPE_OPENCAPI) {
> + phy_write_lane(ndev, &NPU2_PHY_RX_A_CTLE_GAIN, lane, 0);
> + phy_write_lane(ndev, &NPU2_PHY_RX_B_CTLE_GAIN, lane, 0);
> + phy_write_lane(ndev, &NPU2_PHY_RX_E_CTLE_GAIN, lane, 0);
> +
> + phy_write_lane(ndev, &NPU2_PHY_RX_A_CTLE_COARSE, lane, 20);
> + phy_write_lane(ndev, &NPU2_PHY_RX_B_CTLE_COARSE, lane, 20);
> + phy_write_lane(ndev, &NPU2_PHY_RX_E_CTLE_COARSE, lane, 20);
> + }
> }
>
> set_iovalid(ndev, true);
>
--
Andrew Donnellan OzLabs, ADL Canberra
ajd at linux.ibm.com IBM Australia Limited
More information about the Skiboot
mailing list