Skip to content

Commit 4e92d50

Browse files
Mani-Sadhasivamvinodkoul
authored andcommitted
phy: qcom: qmp: Add debug prints for register writes
These register prints are useful to validate the init sequence against the Qcom internal documentation and also to share with the Qcom hw engineers to debug issues related to PHY. Sample debug prints: qcom-qmp-pcie-phy 1c0e000.phy: Writing Reg: QSERDES_V5_COM_SYSCLK_EN_SEL Offset: 0x0094 Val: 0xd9 qcom-qmp-pcie-phy 1c0e000.phy: Writing Reg: QSERDES_V5_COM_HSCLK_SEL Offset: 0x0158 Val: 0x11 Signed-off-by: Manivannan Sadhasivam <[email protected]> Reviewed-by: Dmitry Baryshkov <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent f75999c commit 4e92d50

File tree

7 files changed

+67
-60
lines changed

7 files changed

+67
-60
lines changed

drivers/phy/qualcomm/phy-qcom-qmp-combo.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,24 +2190,25 @@ static int qmp_combo_dp_serdes_init(struct qmp_combo *qmp)
21902190
void __iomem *serdes = qmp->dp_serdes;
21912191
const struct phy_configure_opts_dp *dp_opts = &qmp->dp_opts;
21922192

2193-
qmp_configure(serdes, cfg->dp_serdes_tbl, cfg->dp_serdes_tbl_num);
2193+
qmp_configure(qmp->dev, serdes, cfg->dp_serdes_tbl,
2194+
cfg->dp_serdes_tbl_num);
21942195

21952196
switch (dp_opts->link_rate) {
21962197
case 1620:
2197-
qmp_configure(serdes, cfg->serdes_tbl_rbr,
2198-
cfg->serdes_tbl_rbr_num);
2198+
qmp_configure(qmp->dev, serdes, cfg->serdes_tbl_rbr,
2199+
cfg->serdes_tbl_rbr_num);
21992200
break;
22002201
case 2700:
2201-
qmp_configure(serdes, cfg->serdes_tbl_hbr,
2202-
cfg->serdes_tbl_hbr_num);
2202+
qmp_configure(qmp->dev, serdes, cfg->serdes_tbl_hbr,
2203+
cfg->serdes_tbl_hbr_num);
22032204
break;
22042205
case 5400:
2205-
qmp_configure(serdes, cfg->serdes_tbl_hbr2,
2206-
cfg->serdes_tbl_hbr2_num);
2206+
qmp_configure(qmp->dev, serdes, cfg->serdes_tbl_hbr2,
2207+
cfg->serdes_tbl_hbr2_num);
22072208
break;
22082209
case 8100:
2209-
qmp_configure(serdes, cfg->serdes_tbl_hbr3,
2210-
cfg->serdes_tbl_hbr3_num);
2210+
qmp_configure(qmp->dev, serdes, cfg->serdes_tbl_hbr3,
2211+
cfg->serdes_tbl_hbr3_num);
22112212
break;
22122213
default:
22132214
/* Other link rates aren't supported */
@@ -2807,8 +2808,8 @@ static int qmp_combo_dp_power_on(struct phy *phy)
28072808

28082809
qmp_combo_dp_serdes_init(qmp);
28092810

2810-
qmp_configure_lane(tx, cfg->dp_tx_tbl, cfg->dp_tx_tbl_num, 1);
2811-
qmp_configure_lane(tx2, cfg->dp_tx_tbl, cfg->dp_tx_tbl_num, 2);
2811+
qmp_configure_lane(qmp->dev, tx, cfg->dp_tx_tbl, cfg->dp_tx_tbl_num, 1);
2812+
qmp_configure_lane(qmp->dev, tx2, cfg->dp_tx_tbl, cfg->dp_tx_tbl_num, 2);
28122813

28132814
/* Configure special DP tx tunings */
28142815
cfg->configure_dp_tx(qmp);
@@ -2850,7 +2851,7 @@ static int qmp_combo_usb_power_on(struct phy *phy)
28502851
unsigned int val;
28512852
int ret;
28522853

2853-
qmp_configure(serdes, cfg->serdes_tbl, cfg->serdes_tbl_num);
2854+
qmp_configure(qmp->dev, serdes, cfg->serdes_tbl, cfg->serdes_tbl_num);
28542855

28552856
ret = clk_prepare_enable(qmp->pipe_clk);
28562857
if (ret) {
@@ -2859,16 +2860,17 @@ static int qmp_combo_usb_power_on(struct phy *phy)
28592860
}
28602861

28612862
/* Tx, Rx, and PCS configurations */
2862-
qmp_configure_lane(tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
2863-
qmp_configure_lane(tx2, cfg->tx_tbl, cfg->tx_tbl_num, 2);
2863+
qmp_configure_lane(qmp->dev, tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
2864+
qmp_configure_lane(qmp->dev, tx2, cfg->tx_tbl, cfg->tx_tbl_num, 2);
28642865

2865-
qmp_configure_lane(rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
2866-
qmp_configure_lane(rx2, cfg->rx_tbl, cfg->rx_tbl_num, 2);
2866+
qmp_configure_lane(qmp->dev, rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
2867+
qmp_configure_lane(qmp->dev, rx2, cfg->rx_tbl, cfg->rx_tbl_num, 2);
28672868

2868-
qmp_configure(pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
2869+
qmp_configure(qmp->dev, pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
28692870

28702871
if (pcs_usb)
2871-
qmp_configure(pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num);
2872+
qmp_configure(qmp->dev, pcs_usb, cfg->pcs_usb_tbl,
2873+
cfg->pcs_usb_tbl_num);
28722874

28732875
if (cfg->has_pwrdn_delay)
28742876
usleep_range(10, 20);

drivers/phy/qualcomm/phy-qcom-qmp-common.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
struct qmp_phy_init_tbl {
1010
unsigned int offset;
1111
unsigned int val;
12+
char *name;
1213
/*
1314
* mask of lanes for which this register is written
1415
* for cases when second lane needs different values
@@ -20,20 +21,21 @@ struct qmp_phy_init_tbl {
2021
{ \
2122
.offset = o, \
2223
.val = v, \
24+
.name = #o, \
2325
.lane_mask = 0xff, \
2426
}
2527

2628
#define QMP_PHY_INIT_CFG_LANE(o, v, l) \
2729
{ \
2830
.offset = o, \
2931
.val = v, \
32+
.name = #o, \
3033
.lane_mask = l, \
3134
}
3235

33-
static inline void qmp_configure_lane(void __iomem *base,
34-
const struct qmp_phy_init_tbl tbl[],
35-
int num,
36-
u8 lane_mask)
36+
static inline void qmp_configure_lane(struct device *dev, void __iomem *base,
37+
const struct qmp_phy_init_tbl tbl[],
38+
int num, u8 lane_mask)
3739
{
3840
int i;
3941
const struct qmp_phy_init_tbl *t = tbl;
@@ -45,15 +47,16 @@ static inline void qmp_configure_lane(void __iomem *base,
4547
if (!(t->lane_mask & lane_mask))
4648
continue;
4749

50+
dev_dbg(dev, "Writing Reg: %s Offset: 0x%04x Val: 0x%02x\n",
51+
t->name, t->offset, t->val);
4852
writel(t->val, base + t->offset);
4953
}
5054
}
5155

52-
static inline void qmp_configure(void __iomem *base,
53-
const struct qmp_phy_init_tbl tbl[],
54-
int num)
56+
static inline void qmp_configure(struct device *dev, void __iomem *base,
57+
const struct qmp_phy_init_tbl tbl[], int num)
5558
{
56-
qmp_configure_lane(base, tbl, num, 0xff);
59+
qmp_configure_lane(dev, base, tbl, num, 0xff);
5760
}
5861

5962
#endif

drivers/phy/qualcomm/phy-qcom-qmp-pcie-msm8996.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ static int qmp_pcie_msm8996_serdes_init(struct qmp_phy *qphy)
288288
unsigned int val;
289289
int ret;
290290

291-
qmp_configure(serdes, serdes_tbl, serdes_tbl_num);
291+
qmp_configure(qmp->dev, serdes, serdes_tbl, serdes_tbl_num);
292292

293293
qphy_clrbits(serdes, cfg->regs[QPHY_COM_SW_RESET], SW_RESET);
294294
qphy_setbits(serdes, cfg->regs[QPHY_COM_START_CONTROL],
@@ -431,9 +431,9 @@ static int qmp_pcie_msm8996_power_on(struct phy *phy)
431431
}
432432

433433
/* Tx, Rx, and PCS configurations */
434-
qmp_configure_lane(tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
435-
qmp_configure_lane(rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
436-
qmp_configure(pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
434+
qmp_configure_lane(qmp->dev, tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
435+
qmp_configure_lane(qmp->dev, rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
436+
qmp_configure(qmp->dev, pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
437437

438438
/*
439439
* Pull out PHY from POWER DOWN state.

drivers/phy/qualcomm/phy-qcom-qmp-pcie.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3667,11 +3667,11 @@ static void qmp_pcie_init_port_b(struct qmp_pcie *qmp, const struct qmp_phy_cfg_
36673667
tx4 = qmp->port_b + offs->tx2;
36683668
rx4 = qmp->port_b + offs->rx2;
36693669

3670-
qmp_configure_lane(tx3, tbls->tx, tbls->tx_num, 1);
3671-
qmp_configure_lane(rx3, tbls->rx, tbls->rx_num, 1);
3670+
qmp_configure_lane(qmp->dev, tx3, tbls->tx, tbls->tx_num, 1);
3671+
qmp_configure_lane(qmp->dev, rx3, tbls->rx, tbls->rx_num, 1);
36723672

3673-
qmp_configure_lane(tx4, tbls->tx, tbls->tx_num, 2);
3674-
qmp_configure_lane(rx4, tbls->rx, tbls->rx_num, 2);
3673+
qmp_configure_lane(qmp->dev, tx4, tbls->tx, tbls->tx_num, 2);
3674+
qmp_configure_lane(qmp->dev, rx4, tbls->rx, tbls->rx_num, 2);
36753675
}
36763676

36773677
static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls)
@@ -3689,25 +3689,26 @@ static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_c
36893689
if (!tbls)
36903690
return;
36913691

3692-
qmp_configure(serdes, tbls->serdes, tbls->serdes_num);
3692+
qmp_configure(qmp->dev, serdes, tbls->serdes, tbls->serdes_num);
36933693

3694-
qmp_configure_lane(tx, tbls->tx, tbls->tx_num, 1);
3695-
qmp_configure_lane(rx, tbls->rx, tbls->rx_num, 1);
3694+
qmp_configure_lane(qmp->dev, tx, tbls->tx, tbls->tx_num, 1);
3695+
qmp_configure_lane(qmp->dev, rx, tbls->rx, tbls->rx_num, 1);
36963696

36973697
if (cfg->lanes >= 2) {
3698-
qmp_configure_lane(tx2, tbls->tx, tbls->tx_num, 2);
3699-
qmp_configure_lane(rx2, tbls->rx, tbls->rx_num, 2);
3698+
qmp_configure_lane(qmp->dev, tx2, tbls->tx, tbls->tx_num, 2);
3699+
qmp_configure_lane(qmp->dev, rx2, tbls->rx, tbls->rx_num, 2);
37003700
}
37013701

3702-
qmp_configure(pcs, tbls->pcs, tbls->pcs_num);
3703-
qmp_configure(pcs_misc, tbls->pcs_misc, tbls->pcs_misc_num);
3702+
qmp_configure(qmp->dev, pcs, tbls->pcs, tbls->pcs_num);
3703+
qmp_configure(qmp->dev, pcs_misc, tbls->pcs_misc, tbls->pcs_misc_num);
37043704

37053705
if (cfg->lanes >= 4 && qmp->tcsr_4ln_config) {
3706-
qmp_configure(serdes, cfg->serdes_4ln_tbl, cfg->serdes_4ln_num);
3706+
qmp_configure(qmp->dev, serdes, cfg->serdes_4ln_tbl,
3707+
cfg->serdes_4ln_num);
37073708
qmp_pcie_init_port_b(qmp, tbls);
37083709
}
37093710

3710-
qmp_configure(ln_shrd, tbls->ln_shrd, tbls->ln_shrd_num);
3711+
qmp_configure(qmp->dev, ln_shrd, tbls->ln_shrd, tbls->ln_shrd_num);
37113712
}
37123713

37133714
static int qmp_pcie_init(struct phy *phy)

drivers/phy/qualcomm/phy-qcom-qmp-ufs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,7 +1527,7 @@ static void qmp_ufs_serdes_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tb
15271527
{
15281528
void __iomem *serdes = qmp->serdes;
15291529

1530-
qmp_configure(serdes, tbls->serdes, tbls->serdes_num);
1530+
qmp_configure(qmp->dev, serdes, tbls->serdes, tbls->serdes_num);
15311531
}
15321532

15331533
static void qmp_ufs_lanes_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbls *tbls)
@@ -1536,20 +1536,20 @@ static void qmp_ufs_lanes_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbl
15361536
void __iomem *tx = qmp->tx;
15371537
void __iomem *rx = qmp->rx;
15381538

1539-
qmp_configure_lane(tx, tbls->tx, tbls->tx_num, 1);
1540-
qmp_configure_lane(rx, tbls->rx, tbls->rx_num, 1);
1539+
qmp_configure_lane(qmp->dev, tx, tbls->tx, tbls->tx_num, 1);
1540+
qmp_configure_lane(qmp->dev, rx, tbls->rx, tbls->rx_num, 1);
15411541

15421542
if (cfg->lanes >= 2) {
1543-
qmp_configure_lane(qmp->tx2, tbls->tx, tbls->tx_num, 2);
1544-
qmp_configure_lane(qmp->rx2, tbls->rx, tbls->rx_num, 2);
1543+
qmp_configure_lane(qmp->dev, qmp->tx2, tbls->tx, tbls->tx_num, 2);
1544+
qmp_configure_lane(qmp->dev, qmp->rx2, tbls->rx, tbls->rx_num, 2);
15451545
}
15461546
}
15471547

15481548
static void qmp_ufs_pcs_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbls *tbls)
15491549
{
15501550
void __iomem *pcs = qmp->pcs;
15511551

1552-
qmp_configure(pcs, tbls->pcs, tbls->pcs_num);
1552+
qmp_configure(qmp->dev, pcs, tbls->pcs, tbls->pcs_num);
15531553
}
15541554

15551555
static int qmp_ufs_get_gear_overlay(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg)

drivers/phy/qualcomm/phy-qcom-qmp-usb.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,7 @@ static int qmp_usb_serdes_init(struct qmp_usb *qmp)
16491649
const struct qmp_phy_init_tbl *serdes_tbl = cfg->serdes_tbl;
16501650
int serdes_tbl_num = cfg->serdes_tbl_num;
16511651

1652-
qmp_configure(serdes, serdes_tbl, serdes_tbl_num);
1652+
qmp_configure(qmp->dev, serdes, serdes_tbl, serdes_tbl_num);
16531653

16541654
return 0;
16551655
}
@@ -1730,13 +1730,13 @@ static int qmp_usb_power_on(struct phy *phy)
17301730
}
17311731

17321732
/* Tx, Rx, and PCS configurations */
1733-
qmp_configure_lane(tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
1734-
qmp_configure_lane(rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
1733+
qmp_configure_lane(qmp->dev, tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
1734+
qmp_configure_lane(qmp->dev, rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
17351735

1736-
qmp_configure(pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
1736+
qmp_configure(qmp->dev, pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
17371737

17381738
if (pcs_usb)
1739-
qmp_configure(pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num);
1739+
qmp_configure(qmp->dev, pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num);
17401740

17411741
if (cfg->has_pwrdn_delay)
17421742
usleep_range(10, 20);

drivers/phy/qualcomm/phy-qcom-qmp-usbc.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,8 @@ static int qmp_usbc_power_on(struct phy *phy)
526526
unsigned int val;
527527
int ret;
528528

529-
qmp_configure(qmp->serdes, cfg->serdes_tbl, cfg->serdes_tbl_num);
529+
qmp_configure(qmp->dev, qmp->serdes, cfg->serdes_tbl,
530+
cfg->serdes_tbl_num);
530531

531532
ret = clk_prepare_enable(qmp->pipe_clk);
532533
if (ret) {
@@ -535,13 +536,13 @@ static int qmp_usbc_power_on(struct phy *phy)
535536
}
536537

537538
/* Tx, Rx, and PCS configurations */
538-
qmp_configure_lane(qmp->tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
539-
qmp_configure_lane(qmp->rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
539+
qmp_configure_lane(qmp->dev, qmp->tx, cfg->tx_tbl, cfg->tx_tbl_num, 1);
540+
qmp_configure_lane(qmp->dev, qmp->rx, cfg->rx_tbl, cfg->rx_tbl_num, 1);
540541

541-
qmp_configure_lane(qmp->tx2, cfg->tx_tbl, cfg->tx_tbl_num, 2);
542-
qmp_configure_lane(qmp->rx2, cfg->rx_tbl, cfg->rx_tbl_num, 2);
542+
qmp_configure_lane(qmp->dev, qmp->tx2, cfg->tx_tbl, cfg->tx_tbl_num, 2);
543+
qmp_configure_lane(qmp->dev, qmp->rx2, cfg->rx_tbl, cfg->rx_tbl_num, 2);
543544

544-
qmp_configure(qmp->pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
545+
qmp_configure(qmp->dev, qmp->pcs, cfg->pcs_tbl, cfg->pcs_tbl_num);
545546

546547
/* Pull PHY out of reset state */
547548
qphy_clrbits(qmp->pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);

0 commit comments

Comments
 (0)