]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
phy: qualcomm: qmp-pcie: split PCS_LANE1 region
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 21 Oct 2024 10:33:10 +0000 (13:33 +0300)
committerVinod Koul <vkoul@kernel.org>
Sun, 8 Dec 2024 16:00:08 +0000 (21:30 +0530)
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@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20241021-sar2130p-phys-v2-4-d883acf170f7@linaro.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v4_20.h
drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5_20.h

index c8e39c147ba44f32a5635d8ea0caa12598fd55cd..3a1a62d22a0eb98ad984a257c1d293d3d00a79b6 100644 (file)
@@ -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;
 
index ac872a9eff9a8fe7fc3307759288aee15d17bd24..ab892d1067c219e8db0ba0591921b38a9cebebe7 100644 (file)
@@ -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
index cdf8c04ea078a985be82d561ad0918dfdece9987..283d63c8159338b57a5026b6c2a86e3cce21097c 100644 (file)
@@ -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