Commit f9d35dd3 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Vinod Koul
Browse files

phy: qualcomm: qmp-pcie: split PCS_LANE1 region



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: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20241021-sar2130p-phys-v2-4-d883acf170f7@linaro.org


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 545069bc
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -1850,7 +1850,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),
};
@@ -1984,6 +1984,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),
};
@@ -2659,8 +2662,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),
};
@@ -2805,6 +2806,7 @@ struct qmp_pcie_offsets {
	u16 serdes;
	u16 pcs;
	u16 pcs_misc;
	u16 pcs_lane1;
	u16 tx;
	u16 rx;
	u16 tx2;
@@ -2829,6 +2831,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;
};
@@ -2888,6 +2892,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;
@@ -3004,6 +3009,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,
@@ -3034,6 +3040,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,
@@ -3542,8 +3549,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,
@@ -3642,6 +3649,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),
@@ -3841,6 +3850,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) {
@@ -4047,6 +4058,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)
@@ -4071,6 +4083,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,
@@ -4522,6 +4535,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),
@@ -4589,6 +4610,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;

+3 −2
Original line number Diff line number Diff line
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -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