[Skiboot] [PATCH 2/3] npu2: hw-procedures: Add phy_rx_clock_sel()

Frederic Barrat fbarrat at linux.vnet.ibm.com
Tue Nov 14 22:07:19 AEDT 2017



Le 13/11/2017 à 23:19, Reza Arbab a écrit :
> Change the RX clk mux control to be done by software instead of HW. This
> avoids glitches caused by changing the mux setting.
> 
> Signed-off-by: Reza Arbab <arbab at linux.vnet.ibm.com>
> ---


Hi Reza,

It will impact the init of opencapi as well, as we call the same 
phy_rx_dccal procedure. I haven't heard of any change required for 
opencapi, which could be 1) that nobody bothered to tell us, which 
wouldn't be surprising since nvlink has always been a step ahead 
regarding link setup or 2) it's only needed for nvlink, in which case 
we'd need to do something here.
Do you have some background info? Any new version of the nvlink 
programming guide?

Thanks,

   Fred



>   hw/npu2-hw-procedures.c | 20 +++++++++++++++++++-
>   include/npu2-regs.h     |  1 +
>   2 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/npu2-hw-procedures.c b/hw/npu2-hw-procedures.c
> index 7a5d188..c24489f 100644
> --- a/hw/npu2-hw-procedures.c
> +++ b/hw/npu2-hw-procedures.c
> @@ -561,6 +561,23 @@ static uint32_t phy_rx_dccal_complete(struct npu2_dev *ndev)
>   	return PROCEDURE_NEXT;
>   }
>   
> +static uint32_t phy_rx_clock_sel(struct npu2_dev *ndev)
> +{
> +	/*
> +	 * Change the RX clk mux control to be done by software instead of HW. This
> +	 * avoids glitches caused by changing the mux setting.
> +	 *
> +	 * Work around a known DL bug by doing these writes twice.
> +	 */
> +	npu2_write_mask_4b(ndev->npu, NPU2_NTL_DL_CLK_CTRL(ndev), 0x80000003, 0x80000003);
> +	npu2_write_mask_4b(ndev->npu, NPU2_NTL_DL_CLK_CTRL(ndev), 0x80000003, 0x80000003);
> +
> +	npu2_write_mask_4b(ndev->npu, NPU2_NTL_DL_CLK_CTRL(ndev), 0x80000001, 0x80000003);
> +	npu2_write_mask_4b(ndev->npu, NPU2_NTL_DL_CLK_CTRL(ndev), 0x80000001, 0x80000003);
> +
> +	return PROCEDURE_NEXT;
> +}
> +
>   /* Procedure 1.2.5 - IO PHY Tx FIFO Init */
>   static uint32_t phy_tx_fifo_init(struct npu2_dev *ndev)
>   {
> @@ -577,7 +594,8 @@ static uint32_t phy_tx_fifo_init(struct npu2_dev *ndev)
>   
>   /* We group TX FIFO init in here mainly because that's what was done
>    * on NVLink1 */
> -DEFINE_PROCEDURE(phy_rx_dccal, phy_rx_dccal_complete, phy_tx_fifo_init);
> +DEFINE_PROCEDURE(phy_rx_dccal, phy_rx_dccal_complete, phy_rx_clock_sel,
> +		 phy_tx_fifo_init);
>   
>   /* Procedure 1.2.7 - I/O PHY Upstream Link Training */
>   static uint32_t phy_rx_training(struct npu2_dev *ndev)
> diff --git a/include/npu2-regs.h b/include/npu2-regs.h
> index 759404c..d35cc44 100644
> --- a/include/npu2-regs.h
> +++ b/include/npu2-regs.h
> @@ -275,6 +275,7 @@ void npu2_write_mask(struct npu2 *p, uint64_t reg, uint64_t val, uint64_t mask);
>   #define NPU2_NTL_CQ_FENCE_STATUS(ndev)		NPU2_NTLU_REG_OFFSET(ndev, 0x500)
>   #define NPU2_NTL_DL_CONTROL(ndev)		NPU2_DL_REG_OFFSET(ndev, 0xFFF4)
>   #define NPU2_NTL_DL_CONFIG(ndev)		NPU2_DL_REG_OFFSET(ndev, 0xFFF8)
> +#define NPU2_NTL_DL_CLK_CTRL(ndev)		NPU2_DL_REG_OFFSET(ndev, 0x001C)
>   
>   /* Misc block registers. Unlike the SM/CTL/DAT/NTL registers above
>    * there is only a single instance of each of these in the NPU so we
> 



More information about the Skiboot mailing list