Message ID | 20230501192432.1220727-3-bhupesh.sharma@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Enable USB SS qmp phy for Qualcomm SM6115 SoC | expand |
On 01/05/2023 22:24, Bhupesh Sharma wrote: > Add support for the new qcm2290 / sm6115 binding. > > The USB QMP phy on these devices supports 2 lanes. Also note that the > binding now does not describe every register subregion and instead > the driver holds the corresponding offsets. This also includes > the PCS_MISC region. > > Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org> > --- > drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > index a49711c5a63d..aa143c081805 100644 > --- a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > @@ -1414,6 +1414,10 @@ struct qmp_usb_offsets { > u16 pcs_usb; > u16 tx; > u16 rx; > + /* for PHYs with >= 2 lanes */ > + u16 tx2; > + u16 rx2; > + u16 pcs_misc; > }; > > /* struct qmp_phy_cfg - per-PHY initialization config */ > @@ -1558,6 +1562,16 @@ static const char * const qmp_phy_vreg_l[] = { > "vdda-phy", "vdda-pll", > }; > > +static const struct qmp_usb_offsets qmp_usb_offsets_v3 = { > + .serdes = 0, > + .pcs = 0xc00, > + .tx = 0x200, > + .rx = 0x400, > + .tx2 = 0x600, > + .rx2 = 0x800, > + .pcs_misc = 0xa00, > +}; > + > static const struct qmp_usb_offsets qmp_usb_offsets_v5 = { > .serdes = 0, > .pcs = 0x0200, > @@ -1922,6 +1936,8 @@ static const struct qmp_phy_cfg sm8350_usb3_uniphy_cfg = { > static const struct qmp_phy_cfg qcm2290_usb3phy_cfg = { > .lanes = 2, > > + .offsets = &qmp_usb_offsets_v3, > + > .serdes_tbl = qcm2290_usb3_serdes_tbl, > .serdes_tbl_num = ARRAY_SIZE(qcm2290_usb3_serdes_tbl), > .tx_tbl = qcm2290_usb3_tx_tbl, > @@ -2497,6 +2513,12 @@ static int qmp_usb_parse_dt(struct qmp_usb *qmp) > qmp->tx = base + offs->tx; > qmp->rx = base + offs->rx; > > + if (cfg->lanes >= 2) { > + qmp->tx2 = base + offs->tx2; > + qmp->rx2 = base + offs->rx2; > + qmp->pcs_misc = base + offs->pcs_misc; pcs_misc should also be usable for a single-lane PHYs. > + } > + > qmp->pipe_clk = devm_clk_get(dev, "pipe"); > if (IS_ERR(qmp->pipe_clk)) { > return dev_err_probe(dev, PTR_ERR(qmp->pipe_clk),
On Tue, 2 May 2023 at 05:43, Dmitry Baryshkov <dmitry.baryshkov@linaro.org> wrote: > > On 01/05/2023 22:24, Bhupesh Sharma wrote: > > Add support for the new qcm2290 / sm6115 binding. > > > > The USB QMP phy on these devices supports 2 lanes. Also note that the > > binding now does not describe every register subregion and instead > > the driver holds the corresponding offsets. This also includes > > the PCS_MISC region. > > > > Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org> > > --- > > drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 22 ++++++++++++++++++++++ > > 1 file changed, 22 insertions(+) > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > > index a49711c5a63d..aa143c081805 100644 > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > > @@ -1414,6 +1414,10 @@ struct qmp_usb_offsets { > > u16 pcs_usb; > > u16 tx; > > u16 rx; > > + /* for PHYs with >= 2 lanes */ > > + u16 tx2; > > + u16 rx2; > > + u16 pcs_misc; > > }; > > > > /* struct qmp_phy_cfg - per-PHY initialization config */ > > @@ -1558,6 +1562,16 @@ static const char * const qmp_phy_vreg_l[] = { > > "vdda-phy", "vdda-pll", > > }; > > > > +static const struct qmp_usb_offsets qmp_usb_offsets_v3 = { > > + .serdes = 0, > > + .pcs = 0xc00, > > + .tx = 0x200, > > + .rx = 0x400, > > + .tx2 = 0x600, > > + .rx2 = 0x800, > > + .pcs_misc = 0xa00, > > +}; > > + > > static const struct qmp_usb_offsets qmp_usb_offsets_v5 = { > > .serdes = 0, > > .pcs = 0x0200, > > @@ -1922,6 +1936,8 @@ static const struct qmp_phy_cfg sm8350_usb3_uniphy_cfg = { > > static const struct qmp_phy_cfg qcm2290_usb3phy_cfg = { > > .lanes = 2, > > > > + .offsets = &qmp_usb_offsets_v3, > > + > > .serdes_tbl = qcm2290_usb3_serdes_tbl, > > .serdes_tbl_num = ARRAY_SIZE(qcm2290_usb3_serdes_tbl), > > .tx_tbl = qcm2290_usb3_tx_tbl, > > @@ -2497,6 +2513,12 @@ static int qmp_usb_parse_dt(struct qmp_usb *qmp) > > qmp->tx = base + offs->tx; > > qmp->rx = base + offs->rx; > > > > + if (cfg->lanes >= 2) { > > + qmp->tx2 = base + offs->tx2; > > + qmp->rx2 = base + offs->rx2; > > + qmp->pcs_misc = base + offs->pcs_misc; > > pcs_misc should also be usable for a single-lane PHYs. Ok. I will make it generic in the next version. Thanks, Bhupesh
diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c index a49711c5a63d..aa143c081805 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c @@ -1414,6 +1414,10 @@ struct qmp_usb_offsets { u16 pcs_usb; u16 tx; u16 rx; + /* for PHYs with >= 2 lanes */ + u16 tx2; + u16 rx2; + u16 pcs_misc; }; /* struct qmp_phy_cfg - per-PHY initialization config */ @@ -1558,6 +1562,16 @@ static const char * const qmp_phy_vreg_l[] = { "vdda-phy", "vdda-pll", }; +static const struct qmp_usb_offsets qmp_usb_offsets_v3 = { + .serdes = 0, + .pcs = 0xc00, + .tx = 0x200, + .rx = 0x400, + .tx2 = 0x600, + .rx2 = 0x800, + .pcs_misc = 0xa00, +}; + static const struct qmp_usb_offsets qmp_usb_offsets_v5 = { .serdes = 0, .pcs = 0x0200, @@ -1922,6 +1936,8 @@ static const struct qmp_phy_cfg sm8350_usb3_uniphy_cfg = { static const struct qmp_phy_cfg qcm2290_usb3phy_cfg = { .lanes = 2, + .offsets = &qmp_usb_offsets_v3, + .serdes_tbl = qcm2290_usb3_serdes_tbl, .serdes_tbl_num = ARRAY_SIZE(qcm2290_usb3_serdes_tbl), .tx_tbl = qcm2290_usb3_tx_tbl, @@ -2497,6 +2513,12 @@ static int qmp_usb_parse_dt(struct qmp_usb *qmp) qmp->tx = base + offs->tx; qmp->rx = base + offs->rx; + if (cfg->lanes >= 2) { + qmp->tx2 = base + offs->tx2; + qmp->rx2 = base + offs->rx2; + qmp->pcs_misc = base + offs->pcs_misc; + } + qmp->pipe_clk = devm_clk_get(dev, "pipe"); if (IS_ERR(qmp->pipe_clk)) { return dev_err_probe(dev, PTR_ERR(qmp->pipe_clk),
Add support for the new qcm2290 / sm6115 binding. The USB QMP phy on these devices supports 2 lanes. Also note that the binding now does not describe every register subregion and instead the driver holds the corresponding offsets. This also includes the PCS_MISC region. Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org> --- drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)