Message ID | 1617946456-27773-11-git-send-email-sjakhade@cadence.com |
---|---|
State | Changes Requested |
Headers | show |
Series | PHY: Add multilink DP support in Cadence Torrent PHY driver | expand |
Hi Swapnil, On 09/04/21 11:04 am, Swapnil Jakhade wrote: > Torrent PHY PLL0 or PLL1 is used for DP depending on the single link or > multilink protocol configuration for which PHY is configured. In multilink > configurations with other protocols, either PLL0 or PLL1 will be used > for DP. For single link DP, both PLLs need to be configured at POR. > > Signed-off-by: Swapnil Jakhade <sjakhade@cadence.com> > --- > drivers/phy/cadence/phy-cadence-torrent.c | 32 +++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/phy/cadence/phy-cadence-torrent.c b/drivers/phy/cadence/phy-cadence-torrent.c > index e4dd8d1711a6..44e28ea8ffa7 100644 > --- a/drivers/phy/cadence/phy-cadence-torrent.c > +++ b/drivers/phy/cadence/phy-cadence-torrent.c > @@ -288,6 +288,11 @@ enum cdns_torrent_ssc_mode { > INTERNAL_SSC > }; > > +enum cdns_torrent_dp_pll { > + DP_PLL0 = 0x1, > + DP_PLL1 = 0x2 Using BIT() macro might be better since you are using this as bitfield. > +}; > + > struct cdns_torrent_inst { > struct phy *phy; > u32 mlane; > @@ -301,6 +306,7 @@ struct cdns_torrent_phy { > void __iomem *base; /* DPTX registers base */ > void __iomem *sd_base; /* SD0801 registers base */ > u32 max_bit_rate; /* Maximum link bit rate to use (in Mbps) */ > + u32 dp_pll; enum cdns_torrent_dp_pll? Thanks Kishon > struct reset_control *phy_rst; > struct reset_control *apb_rst; > struct device *dev; > @@ -900,6 +906,30 @@ void cdns_torrent_dp_pma_cmn_vco_cfg_100mhz(struct cdns_torrent_phy *cdns_phy, > } > } > > +/* Set PLL used for DP configuration */ > +static int cdns_torrent_dp_get_pll(struct cdns_torrent_phy *cdns_phy, > + enum cdns_torrent_phy_type phy_t2) > +{ > + switch (phy_t2) { > + case TYPE_PCIE: > + case TYPE_USB: > + cdns_phy->dp_pll = DP_PLL1; > + break; > + case TYPE_SGMII: > + case TYPE_QSGMII: > + cdns_phy->dp_pll = DP_PLL0; > + break; > + case TYPE_NONE: > + cdns_phy->dp_pll = DP_PLL0 | DP_PLL1; > + break; > + default: > + dev_err(cdns_phy->dev, "Unsupported PHY configuration\n"); > + return -EINVAL; > + } > + > + return 0; > +} > + > /* > * Enable or disable PLL for selected lanes. > */ > @@ -1554,6 +1584,8 @@ static int cdns_torrent_dp_init(struct phy *phy) > return -EINVAL; > } > > + cdns_torrent_dp_get_pll(cdns_phy, TYPE_NONE); > + > cdns_torrent_dp_common_init(cdns_phy, inst); > > return cdns_torrent_dp_start(cdns_phy, inst, phy); >
diff --git a/drivers/phy/cadence/phy-cadence-torrent.c b/drivers/phy/cadence/phy-cadence-torrent.c index e4dd8d1711a6..44e28ea8ffa7 100644 --- a/drivers/phy/cadence/phy-cadence-torrent.c +++ b/drivers/phy/cadence/phy-cadence-torrent.c @@ -288,6 +288,11 @@ enum cdns_torrent_ssc_mode { INTERNAL_SSC }; +enum cdns_torrent_dp_pll { + DP_PLL0 = 0x1, + DP_PLL1 = 0x2 +}; + struct cdns_torrent_inst { struct phy *phy; u32 mlane; @@ -301,6 +306,7 @@ struct cdns_torrent_phy { void __iomem *base; /* DPTX registers base */ void __iomem *sd_base; /* SD0801 registers base */ u32 max_bit_rate; /* Maximum link bit rate to use (in Mbps) */ + u32 dp_pll; struct reset_control *phy_rst; struct reset_control *apb_rst; struct device *dev; @@ -900,6 +906,30 @@ void cdns_torrent_dp_pma_cmn_vco_cfg_100mhz(struct cdns_torrent_phy *cdns_phy, } } +/* Set PLL used for DP configuration */ +static int cdns_torrent_dp_get_pll(struct cdns_torrent_phy *cdns_phy, + enum cdns_torrent_phy_type phy_t2) +{ + switch (phy_t2) { + case TYPE_PCIE: + case TYPE_USB: + cdns_phy->dp_pll = DP_PLL1; + break; + case TYPE_SGMII: + case TYPE_QSGMII: + cdns_phy->dp_pll = DP_PLL0; + break; + case TYPE_NONE: + cdns_phy->dp_pll = DP_PLL0 | DP_PLL1; + break; + default: + dev_err(cdns_phy->dev, "Unsupported PHY configuration\n"); + return -EINVAL; + } + + return 0; +} + /* * Enable or disable PLL for selected lanes. */ @@ -1554,6 +1584,8 @@ static int cdns_torrent_dp_init(struct phy *phy) return -EINVAL; } + cdns_torrent_dp_get_pll(cdns_phy, TYPE_NONE); + cdns_torrent_dp_common_init(cdns_phy, inst); return cdns_torrent_dp_start(cdns_phy, inst, phy);
Torrent PHY PLL0 or PLL1 is used for DP depending on the single link or multilink protocol configuration for which PHY is configured. In multilink configurations with other protocols, either PLL0 or PLL1 will be used for DP. For single link DP, both PLLs need to be configured at POR. Signed-off-by: Swapnil Jakhade <sjakhade@cadence.com> --- drivers/phy/cadence/phy-cadence-torrent.c | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+)