[PATCH v2 4/6] phy: qualcomm: qmp-pcie: split PCS_LANE1 region

neil.armstrong at linaro.org neil.armstrong at linaro.org
Mon Oct 21 05:21:44 PDT 2024


On 21/10/2024 12:33, Dmitry Baryshkov wrote:
> The PCS_LANE1 region isn't a part of the PCS_PCIE region. It was handled
> this way as it simplified handled of devices with the old bindings.
> Nowadays it can be handled as is, without hacks.
> 
> Split the PCS_LANE1 region from the PCS_PCIE / PCS_MISC region space.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
> ---
>   drivers/phy/qualcomm/phy-qcom-qmp-pcie.c           | 32 ++++++++++++++++++----
>   drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h |  5 ++--
>   drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h |  5 ++--
>   3 files changed, 33 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c b/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
> index 873f2f9844c66d7bd0b3bb3ab4bbd8be9a37cebd..1ca1f21b1cc225f435da9c775c97dfa142117f95 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
> @@ -1773,7 +1773,7 @@ static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rc_pcs_misc_tbl[] = {
>   	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
>   };
>   
> -static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_pcs_misc_tbl[] = {
> +static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_pcs_lane1_tbl[] = {
>   	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
>   	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
>   };
> @@ -1907,6 +1907,9 @@ static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_misc_tbl[] = {
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG2, 0x0d),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e),
> +};
> +
> +static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_lane1_tbl[] = {
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
>   };
> @@ -2582,8 +2585,6 @@ static const struct qmp_phy_init_tbl sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl[] = {
>   static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x2_pcie_pcs_alt_tbl[] = {
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22),
> -	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
> -	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e),
>   	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0x66),
>   };
> @@ -2728,6 +2729,7 @@ struct qmp_pcie_offsets {
>   	u16 serdes;
>   	u16 pcs;
>   	u16 pcs_misc;
> +	u16 pcs_lane1;
>   	u16 tx;
>   	u16 rx;
>   	u16 tx2;
> @@ -2752,6 +2754,8 @@ struct qmp_phy_cfg_tbls {
>   	int pcs_num;
>   	const struct qmp_phy_init_tbl *pcs_misc;
>   	int pcs_misc_num;
> +	const struct qmp_phy_init_tbl *pcs_lane1;
> +	int pcs_lane1_num;
>   	const struct qmp_phy_init_tbl *ln_shrd;
>   	int ln_shrd_num;
>   };
> @@ -2811,6 +2815,7 @@ struct qmp_pcie {
>   	void __iomem *serdes;
>   	void __iomem *pcs;
>   	void __iomem *pcs_misc;
> +	void __iomem *pcs_lane1;
>   	void __iomem *tx;
>   	void __iomem *rx;
>   	void __iomem *tx2;
> @@ -2927,6 +2932,7 @@ static const struct qmp_pcie_offsets qmp_pcie_offsets_v4_20 = {
>   	.serdes		= 0x1000,
>   	.pcs		= 0x1200,
>   	.pcs_misc	= 0x1600,
> +	.pcs_lane1	= 0x1e00,
>   	.tx		= 0x0000,
>   	.rx		= 0x0200,
>   	.tx2		= 0x0800,
> @@ -2957,6 +2963,7 @@ static const struct qmp_pcie_offsets qmp_pcie_offsets_v5_20 = {
>   	.serdes		= 0x1000,
>   	.pcs		= 0x1200,
>   	.pcs_misc	= 0x1400,
> +	.pcs_lane1	= 0x1e00,
>   	.tx		= 0x0000,
>   	.rx		= 0x0200,
>   	.tx2		= 0x0800,
> @@ -3440,8 +3447,8 @@ static const struct qmp_phy_cfg sdx55_qmp_pciephy_cfg = {
>   	.tbls_ep = &(const struct qmp_phy_cfg_tbls) {
>   		.serdes		= sdx55_qmp_pcie_ep_serdes_tbl,
>   		.serdes_num	= ARRAY_SIZE(sdx55_qmp_pcie_ep_serdes_tbl),
> -		.pcs_misc	= sdx55_qmp_pcie_ep_pcs_misc_tbl,
> -		.pcs_misc_num	= ARRAY_SIZE(sdx55_qmp_pcie_ep_pcs_misc_tbl),
> +		.pcs_lane1	= sdx55_qmp_pcie_ep_pcs_lane1_tbl,
> +		.pcs_lane1_num	= ARRAY_SIZE(sdx55_qmp_pcie_ep_pcs_lane1_tbl),
>   	},
>   
>   	.reset_list		= sdm845_pciephy_reset_l,
> @@ -3540,6 +3547,8 @@ static const struct qmp_phy_cfg sdx65_qmp_pciephy_cfg = {
>   			.pcs_num        = ARRAY_SIZE(sdx65_qmp_pcie_pcs_tbl),
>   			.pcs_misc       = sdx65_qmp_pcie_pcs_misc_tbl,
>   			.pcs_misc_num   = ARRAY_SIZE(sdx65_qmp_pcie_pcs_misc_tbl),
> +			.pcs_lane1       = sdx65_qmp_pcie_pcs_lane1_tbl,
> +			.pcs_lane1_num   = ARRAY_SIZE(sdx65_qmp_pcie_pcs_lane1_tbl),
>   		},
>   	.reset_list             = sdm845_pciephy_reset_l,
>   	.num_resets             = ARRAY_SIZE(sdm845_pciephy_reset_l),
> @@ -3739,6 +3748,8 @@ static const struct qmp_phy_cfg sa8775p_qmp_gen4x2_pciephy_cfg = {
>   		.pcs_num		= ARRAY_SIZE(sa8775p_qmp_gen4x2_pcie_pcs_alt_tbl),
>   		.pcs_misc		= sa8775p_qmp_gen4_pcie_pcs_misc_tbl,
>   		.pcs_misc_num	= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_pcs_misc_tbl),
> +		.pcs_lane1	= sdx65_qmp_pcie_pcs_lane1_tbl,
> +		.pcs_lane1_num	= ARRAY_SIZE(sdx65_qmp_pcie_pcs_lane1_tbl),
>   	},
>   
>   	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
> @@ -3945,6 +3956,7 @@ static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_c
>   	void __iomem *rx2 = qmp->rx2;
>   	void __iomem *pcs = qmp->pcs;
>   	void __iomem *pcs_misc = qmp->pcs_misc;
> +	void __iomem *pcs_lane1 = qmp->pcs_lane1;
>   	void __iomem *ln_shrd = qmp->ln_shrd;
>   
>   	if (!tbls)
> @@ -3969,6 +3981,7 @@ static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_c
>   
>   	qmp_configure(qmp->dev, pcs, tbls->pcs, tbls->pcs_num);
>   	qmp_configure(qmp->dev, pcs_misc, tbls->pcs_misc, tbls->pcs_misc_num);
> +	qmp_configure(qmp->dev, pcs_lane1, tbls->pcs_lane1, tbls->pcs_lane1_num);
>   
>   	if (cfg->lanes >= 4 && qmp->tcsr_4ln_config) {
>   		qmp_configure(qmp->dev, serdes, cfg->serdes_4ln_tbl,
> @@ -4420,6 +4433,14 @@ static int qmp_pcie_parse_dt_legacy(struct qmp_pcie *qmp, struct device_node *np
>   		}
>   	}
>   
> +	/*
> +	 * For all platforms where legacy bindings existed, PCS_LANE1 was
> +	 * mapped as a part of the PCS_MISC region.
> +	 */
> +	if (!IS_ERR(qmp->pcs_misc) && cfg->offsets->pcs_lane1 != 0)
> +		qmp->pcs_lane1 = qmp->pcs_misc +
> +			(cfg->offsets->pcs_lane1 - cfg->offsets->pcs_misc);
> +
>   	clk = devm_get_clk_from_child(dev, np, NULL);
>   	if (IS_ERR(clk)) {
>   		return dev_err_probe(dev, PTR_ERR(clk),
> @@ -4487,6 +4508,7 @@ static int qmp_pcie_parse_dt(struct qmp_pcie *qmp)
>   	qmp->serdes = base + offs->serdes;
>   	qmp->pcs = base + offs->pcs;
>   	qmp->pcs_misc = base + offs->pcs_misc;
> +	qmp->pcs_lane1 = base + offs->pcs_lane1;
>   	qmp->tx = base + offs->tx;
>   	qmp->rx = base + offs->rx;
>   
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h
> index ac872a9eff9a8fe7fc3307759288aee15d17bd24..ab892d1067c219e8db0ba0591921b38a9cebebe7 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h
> @@ -13,7 +13,8 @@
>   #define QPHY_V4_20_PCS_PCIE_G4_RXEQEVAL_TIME		0x0f4
>   #define QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG2		0x0fc
>   #define QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG5		0x108
> -#define QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2		0x824
> -#define QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2		0x828
> +
> +#define QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2		0x024
> +#define QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2		0x028
>   
>   #endif
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h
> index cdf8c04ea078a985be82d561ad0918dfdece9987..283d63c8159338b57a5026b6c2a86e3cce21097c 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h
> @@ -17,7 +17,8 @@
>   #define QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5		0x108
>   #define QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN			0x15c
>   #define QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3	0x184
> -#define QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2		0xa24
> -#define QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2		0xa28
> +
> +#define QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2		0x024
> +#define QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2		0x028
>   
>   #endif
> 

Looks good

Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>



More information about the linux-phy mailing list