diff --git a/arch/arm/configs/vendor/sdxnightjar-debug.config b/arch/arm/configs/vendor/sdxnightjar-debug.config index 7f885fc9a482..f87c96d983a1 100644 --- a/arch/arm/configs/vendor/sdxnightjar-debug.config +++ b/arch/arm/configs/vendor/sdxnightjar-debug.config @@ -859,3 +859,9 @@ CONFIG_INTERCONNECT_TEST=y CONFIG_INTERCONNECT_QCOM=y CONFIG_INTERCONNECT_QCOM_SDXNIGHTJAR=y CONFIG_QCOM_SOCINFO=y +CONFIG_BLK_CGROUP=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +CONFIG_SDC_QTI=y +CONFIG_MMC_SDHCI_MSM=y +CONFIG_MMC_IPC_LOGGING=y diff --git a/arch/arm/configs/vendor/sdxnightjar.config b/arch/arm/configs/vendor/sdxnightjar.config index da27de275946..f25e6cad077a 100644 --- a/arch/arm/configs/vendor/sdxnightjar.config +++ b/arch/arm/configs/vendor/sdxnightjar.config @@ -874,3 +874,11 @@ CONFIG_INTERCONNECT_TEST=y CONFIG_INTERCONNECT_QCOM=y CONFIG_INTERCONNECT_QCOM_SDXNIGHTJAR=y CONFIG_QCOM_SOCINFO=y +CONFIG_BLK_CGROUP=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +CONFIG_MMC=y +CONFIG_SDC_QTI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_MSM=y diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index d4352faa295c..be5394397e97 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -2862,7 +2862,7 @@ static inline int sdhci_msm_bus_set_vote(struct sdhci_msm_host *msm_host, struct sdhci_msm_bus_vote_data *bvd = msm_host->bus_vote_data; struct msm_bus_path *usecase = bvd->usecase; struct msm_bus_vectors *vec = usecase[vote].vec; - int ddr_rc, cpu_rc; + int ddr_rc = 0, cpu_rc = 0; if (vote == bvd->curr_vote) return 0; @@ -2870,8 +2870,13 @@ static inline int sdhci_msm_bus_set_vote(struct sdhci_msm_host *msm_host, pr_debug("%s: vote:%d sdhc_ddr ab:%llu ib:%llu cpu_sdhc ab:%llu ib:%llu\n", mmc_hostname(host->mmc), vote, vec[0].ab, vec[0].ib, vec[1].ab, vec[1].ib); - ddr_rc = icc_set_bw(bvd->sdhc_ddr, vec[0].ab, vec[0].ib); - cpu_rc = icc_set_bw(bvd->cpu_sdhc, vec[1].ab, vec[1].ib); + + if (bvd->sdhc_ddr) + ddr_rc = icc_set_bw(bvd->sdhc_ddr, vec[0].ab, vec[0].ib); + + if (bvd->cpu_sdhc) + cpu_rc = icc_set_bw(bvd->cpu_sdhc, vec[1].ab, vec[1].ib); + if (ddr_rc || cpu_rc) { pr_err("%s: icc_set() failed\n", mmc_hostname(host->mmc)); @@ -2894,8 +2899,8 @@ static void sdhci_msm_bus_get_and_set_vote(struct sdhci_host *host, struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host); if (!msm_host->bus_vote_data || - !msm_host->bus_vote_data->sdhc_ddr || - !msm_host->bus_vote_data->cpu_sdhc) + (!msm_host->bus_vote_data->sdhc_ddr && + !msm_host->bus_vote_data->cpu_sdhc)) return; vote = sdhci_msm_bus_get_vote_for_bw(msm_host, bw); sdhci_msm_bus_set_vote(msm_host, vote); @@ -3004,20 +3009,16 @@ static int sdhci_msm_bus_register(struct sdhci_msm_host *host, bsd->sdhc_ddr = of_icc_get(&pdev->dev, "sdhc-ddr"); if (IS_ERR_OR_NULL(bsd->sdhc_ddr)) { - dev_err(&pdev->dev, "(%ld): failed getting %s path\n", + dev_info(&pdev->dev, "(%ld): failed getting %s path\n", PTR_ERR(bsd->sdhc_ddr), "sdhc-ddr"); - ret = PTR_ERR(bsd->sdhc_ddr); bsd->sdhc_ddr = NULL; - return ret; } bsd->cpu_sdhc = of_icc_get(&pdev->dev, "cpu-sdhc"); if (IS_ERR_OR_NULL(bsd->cpu_sdhc)) { - dev_err(&pdev->dev, "(%ld): failed getting %s path\n", + dev_info(&pdev->dev, "(%ld): failed getting %s path\n", PTR_ERR(bsd->cpu_sdhc), "cpu-sdhc"); - ret = PTR_ERR(bsd->cpu_sdhc); bsd->cpu_sdhc = NULL; - return ret; } return ret; @@ -3028,8 +3029,11 @@ static void sdhci_msm_bus_unregister(struct device *dev, { struct sdhci_msm_bus_vote_data *bsd = host->bus_vote_data; - icc_put(bsd->sdhc_ddr); - icc_put(bsd->cpu_sdhc); + if (bsd->sdhc_ddr) + icc_put(bsd->sdhc_ddr); + + if (bsd->cpu_sdhc) + icc_put(bsd->cpu_sdhc); } static void sdhci_msm_bus_voting(struct sdhci_host *host, bool enable)