Skip to content

Commit 3684852

Browse files
committed
Merge branch 'pci/controller/qcom'
- Look up OPP using both frequency and data rate (not just frequency) so RPMh votes can account for both (Krishna Chaitanya Chundru) * pci/controller/qcom: PCI: qcom: Use frequency and level based OPP lookup
2 parents 88b8b5b + 50433f6 commit 3684852

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

drivers/pci/controller/dwc/pcie-qcom.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1567,6 +1567,7 @@ static void qcom_pcie_icc_opp_update(struct qcom_pcie *pcie)
15671567
{
15681568
u32 offset, status, width, speed;
15691569
struct dw_pcie *pci = pcie->pci;
1570+
struct dev_pm_opp_key key = {};
15701571
unsigned long freq_kbps;
15711572
struct dev_pm_opp *opp;
15721573
int ret, freq_mbps;
@@ -1594,8 +1595,20 @@ static void qcom_pcie_icc_opp_update(struct qcom_pcie *pcie)
15941595
return;
15951596

15961597
freq_kbps = freq_mbps * KILO;
1597-
opp = dev_pm_opp_find_freq_exact(pci->dev, freq_kbps * width,
1598-
true);
1598+
opp = dev_pm_opp_find_level_exact(pci->dev, speed);
1599+
if (IS_ERR(opp)) {
1600+
/* opp-level is not defined use only frequency */
1601+
opp = dev_pm_opp_find_freq_exact(pci->dev, freq_kbps * width,
1602+
true);
1603+
} else {
1604+
/* put opp-level OPP */
1605+
dev_pm_opp_put(opp);
1606+
1607+
key.freq = freq_kbps * width;
1608+
key.level = speed;
1609+
key.bw = 0;
1610+
opp = dev_pm_opp_find_key_exact(pci->dev, &key, true);
1611+
}
15991612
if (!IS_ERR(opp)) {
16001613
ret = dev_pm_opp_set_opp(pci->dev, opp);
16011614
if (ret)

0 commit comments

Comments
 (0)