Loading drivers/platform/msm/qcom-geni-se.c +24 −12 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ struct bus_vectors { * @num_paths: Two paths. QUPv3 clock and DDR paths. * @num_usecases: One usecase to vote for both QUPv3 clock and DDR paths. * @pdata: To register our client handle with the ICB driver. * @update: Usecase index for icb voting. */ struct geni_se_device { struct device *dev; Loading Loading @@ -112,6 +113,7 @@ struct geni_se_device { int num_paths; int num_usecases; struct msm_bus_scale_pdata *pdata; int update; }; /* Offset of QUPV3 Hardware Version Register */ Loading Loading @@ -711,11 +713,14 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bool bus_bw_update = false; bool bus_bw_update_noc = false; int ret = 0; int new_update; if (unlikely(list_empty(&rsc->ab_list) || list_empty(&rsc->ib_list))) return -EINVAL; mutex_lock(&geni_se_dev->geni_dev_lock); new_update = geni_se_dev->update ? 0 : 1; list_del_init(&rsc->ab_list); geni_se_dev->cur_ab -= rsc->ab; Loading @@ -730,9 +735,9 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update = geni_se_check_bus_bw(geni_se_dev); if (geni_se_dev->num_paths == 2) { geni_se_dev->pdata->usecase[1].vectors[0].ab = geni_se_dev->pdata->usecase[new_update].vectors[0].ab = CONV_TO_BW(geni_se_dev->cur_ab); geni_se_dev->pdata->usecase[1].vectors[0].ib = geni_se_dev->pdata->usecase[new_update].vectors[0].ib = CONV_TO_BW(geni_se_dev->cur_ib); } Loading Loading @@ -764,14 +769,16 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update_noc = geni_se_check_bus_bw_noc(geni_se_dev); geni_se_dev->pdata->usecase[1].vectors[1].ab = geni_se_dev->pdata->usecase[new_update].vectors[1].ab = geni_se_dev->cur_ab_noc; geni_se_dev->pdata->usecase[1].vectors[1].ib = geni_se_dev->pdata->usecase[new_update].vectors[1].ib = geni_se_dev->cur_ib_noc; if (bus_bw_update_noc || bus_bw_update) if (bus_bw_update_noc || bus_bw_update) { geni_se_dev->update = new_update; ret = msm_bus_scale_client_update_request (geni_se_dev->bus_bw_noc, 1); (geni_se_dev->bus_bw_noc, new_update); } GENI_SE_DBG(geni_se_dev->log_ctx, false, NULL, "%s: %s: cur_ab_ib_noc(%lu:%lu) req_ab_ib_noc(%lu:%lu) %d\n", __func__, dev_name(rsc->ctrl_dev), Loading Loading @@ -857,9 +864,11 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bool bus_bw_update = false; bool bus_bw_update_noc = false; int ret = 0; int new_update; mutex_lock(&geni_se_dev->geni_dev_lock); new_update = geni_se_dev->update ? 0 : 1; list_add(&rsc->ab_list, &geni_se_dev->ab_list_head); geni_se_dev->cur_ab += rsc->ab; Loading @@ -877,9 +886,9 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update = geni_se_check_bus_bw(geni_se_dev); if (geni_se_dev->num_paths == 2) { geni_se_dev->pdata->usecase[1].vectors[0].ab = geni_se_dev->pdata->usecase[new_update].vectors[0].ab = CONV_TO_BW(geni_se_dev->cur_ab); geni_se_dev->pdata->usecase[1].vectors[0].ib = geni_se_dev->pdata->usecase[new_update].vectors[0].ib = CONV_TO_BW(geni_se_dev->cur_ib); } Loading Loading @@ -913,13 +922,15 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update_noc = geni_se_check_bus_bw_noc(geni_se_dev); geni_se_dev->pdata->usecase[1].vectors[1].ab = geni_se_dev->pdata->usecase[new_update].vectors[1].ab = geni_se_dev->cur_ab_noc; geni_se_dev->pdata->usecase[1].vectors[1].ib = geni_se_dev->pdata->usecase[new_update].vectors[1].ib = geni_se_dev->cur_ib_noc; if (bus_bw_update_noc || bus_bw_update) if (bus_bw_update_noc || bus_bw_update) { geni_se_dev->update = new_update; ret = msm_bus_scale_client_update_request (geni_se_dev->bus_bw_noc, 1); (geni_se_dev->bus_bw_noc, new_update); } GENI_SE_DBG(geni_se_dev->log_ctx, false, NULL, "%s: %s: cur_ab_ib_noc(%lu:%lu) req_ab_ib_noc(%lu:%lu) %d\n", __func__, dev_name(rsc->ctrl_dev), Loading Loading @@ -1760,6 +1771,7 @@ static int geni_se_probe(struct platform_device *pdev) ret = of_property_read_u32(dev->of_node, "qcom,msm-bus,num-paths", &geni_se_dev->num_paths); if (!ret) { geni_se_dev->update = 0; geni_se_dev->pdata = ab_ib_register(pdev, geni_se_dev); if (geni_se_dev->pdata == NULL) { dev_err(dev, Loading Loading
drivers/platform/msm/qcom-geni-se.c +24 −12 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ struct bus_vectors { * @num_paths: Two paths. QUPv3 clock and DDR paths. * @num_usecases: One usecase to vote for both QUPv3 clock and DDR paths. * @pdata: To register our client handle with the ICB driver. * @update: Usecase index for icb voting. */ struct geni_se_device { struct device *dev; Loading Loading @@ -112,6 +113,7 @@ struct geni_se_device { int num_paths; int num_usecases; struct msm_bus_scale_pdata *pdata; int update; }; /* Offset of QUPV3 Hardware Version Register */ Loading Loading @@ -711,11 +713,14 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bool bus_bw_update = false; bool bus_bw_update_noc = false; int ret = 0; int new_update; if (unlikely(list_empty(&rsc->ab_list) || list_empty(&rsc->ib_list))) return -EINVAL; mutex_lock(&geni_se_dev->geni_dev_lock); new_update = geni_se_dev->update ? 0 : 1; list_del_init(&rsc->ab_list); geni_se_dev->cur_ab -= rsc->ab; Loading @@ -730,9 +735,9 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update = geni_se_check_bus_bw(geni_se_dev); if (geni_se_dev->num_paths == 2) { geni_se_dev->pdata->usecase[1].vectors[0].ab = geni_se_dev->pdata->usecase[new_update].vectors[0].ab = CONV_TO_BW(geni_se_dev->cur_ab); geni_se_dev->pdata->usecase[1].vectors[0].ib = geni_se_dev->pdata->usecase[new_update].vectors[0].ib = CONV_TO_BW(geni_se_dev->cur_ib); } Loading Loading @@ -764,14 +769,16 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update_noc = geni_se_check_bus_bw_noc(geni_se_dev); geni_se_dev->pdata->usecase[1].vectors[1].ab = geni_se_dev->pdata->usecase[new_update].vectors[1].ab = geni_se_dev->cur_ab_noc; geni_se_dev->pdata->usecase[1].vectors[1].ib = geni_se_dev->pdata->usecase[new_update].vectors[1].ib = geni_se_dev->cur_ib_noc; if (bus_bw_update_noc || bus_bw_update) if (bus_bw_update_noc || bus_bw_update) { geni_se_dev->update = new_update; ret = msm_bus_scale_client_update_request (geni_se_dev->bus_bw_noc, 1); (geni_se_dev->bus_bw_noc, new_update); } GENI_SE_DBG(geni_se_dev->log_ctx, false, NULL, "%s: %s: cur_ab_ib_noc(%lu:%lu) req_ab_ib_noc(%lu:%lu) %d\n", __func__, dev_name(rsc->ctrl_dev), Loading Loading @@ -857,9 +864,11 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bool bus_bw_update = false; bool bus_bw_update_noc = false; int ret = 0; int new_update; mutex_lock(&geni_se_dev->geni_dev_lock); new_update = geni_se_dev->update ? 0 : 1; list_add(&rsc->ab_list, &geni_se_dev->ab_list_head); geni_se_dev->cur_ab += rsc->ab; Loading @@ -877,9 +886,9 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update = geni_se_check_bus_bw(geni_se_dev); if (geni_se_dev->num_paths == 2) { geni_se_dev->pdata->usecase[1].vectors[0].ab = geni_se_dev->pdata->usecase[new_update].vectors[0].ab = CONV_TO_BW(geni_se_dev->cur_ab); geni_se_dev->pdata->usecase[1].vectors[0].ib = geni_se_dev->pdata->usecase[new_update].vectors[0].ib = CONV_TO_BW(geni_se_dev->cur_ib); } Loading Loading @@ -913,13 +922,15 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, bus_bw_update_noc = geni_se_check_bus_bw_noc(geni_se_dev); geni_se_dev->pdata->usecase[1].vectors[1].ab = geni_se_dev->pdata->usecase[new_update].vectors[1].ab = geni_se_dev->cur_ab_noc; geni_se_dev->pdata->usecase[1].vectors[1].ib = geni_se_dev->pdata->usecase[new_update].vectors[1].ib = geni_se_dev->cur_ib_noc; if (bus_bw_update_noc || bus_bw_update) if (bus_bw_update_noc || bus_bw_update) { geni_se_dev->update = new_update; ret = msm_bus_scale_client_update_request (geni_se_dev->bus_bw_noc, 1); (geni_se_dev->bus_bw_noc, new_update); } GENI_SE_DBG(geni_se_dev->log_ctx, false, NULL, "%s: %s: cur_ab_ib_noc(%lu:%lu) req_ab_ib_noc(%lu:%lu) %d\n", __func__, dev_name(rsc->ctrl_dev), Loading Loading @@ -1760,6 +1771,7 @@ static int geni_se_probe(struct platform_device *pdev) ret = of_property_read_u32(dev->of_node, "qcom,msm-bus,num-paths", &geni_se_dev->num_paths); if (!ret) { geni_se_dev->update = 0; geni_se_dev->pdata = ab_ib_register(pdev, geni_se_dev); if (geni_se_dev->pdata == NULL) { dev_err(dev, Loading