Loading drivers/platform/msm/msm_bus/msm_bus_adhoc.h +2 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,8 @@ struct msm_bus_node_info_type { unsigned int buswidth; struct rule_update_path_info rule; uint64_t lim_bw; uint32_t util_fact; uint32_t vrail_comp; }; struct msm_bus_node_device_type { Loading drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +12 −4 Original line number Diff line number Diff line Loading @@ -397,6 +397,8 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, uint64_t sum_ab = 0; uint64_t bw_max_hz; struct msm_bus_node_device_type *fab_dev = NULL; uint32_t util_fact = 0; uint32_t vrail_comp = 0; /* Find max ib */ for (i = 0; i < bus_dev->num_lnodes; i++) { Loading @@ -408,17 +410,23 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, * formula is: * Freq_hz = max((sum(ab) * util_fact)/num_chan, max(ib)/vrail_comp) * / bus-width * util_fact and vrail comp are obtained from fabric's dts properties. * util_fact and vrail comp are obtained from fabric/Node's dts * properties. * They default to 100 if absent. */ fab_dev = bus_dev->node_info->bus_device->platform_data; /* Don't do this for virtual fabrics */ if (fab_dev && fab_dev->fabdev) { sum_ab *= fab_dev->fabdev->util_fact; util_fact = bus_dev->node_info->util_fact ? bus_dev->node_info->util_fact : fab_dev->fabdev->util_fact; vrail_comp = bus_dev->node_info->vrail_comp ? bus_dev->node_info->vrail_comp : fab_dev->fabdev->vrail_comp; sum_ab *= util_fact; sum_ab = msm_bus_div64(100, sum_ab); max_ib *= 100; max_ib = msm_bus_div64(fab_dev->fabdev->vrail_comp, max_ib); max_ib = msm_bus_div64(vrail_comp, max_ib); } /* Account for multiple channels if any */ Loading drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +37 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,40 @@ #include "msm_bus_noc.h" #include "msm_bus_bimc.h" ssize_t vrail_show(struct device *dev, struct device_attribute *attr, char *buf) { struct msm_bus_node_info_type *node_info = NULL; struct msm_bus_node_device_type *bus_node = NULL; bus_node = dev->platform_data; if (!bus_node) return -EINVAL; node_info = bus_node->node_info; return snprintf(buf, PAGE_SIZE, "%u", node_info->vrail_comp); } ssize_t vrail_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct msm_bus_node_info_type *node_info = NULL; struct msm_bus_node_device_type *bus_node = NULL; int ret = 0; bus_node = dev->platform_data; if (!bus_node) return -EINVAL; node_info = bus_node->node_info; ret = sscanf(buf, "%u", &node_info->vrail_comp); if (ret != 1) return -EINVAL; return count; } DEVICE_ATTR(vrail, 0600, vrail_show, vrail_store); struct static_rules_type { int num_rules; struct bus_rule_type *rules; Loading Loading @@ -839,6 +873,8 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->qos_params.thmp = pdata_node_info->qos_params.thmp; node_info->qos_params.ws = pdata_node_info->qos_params.ws; node_info->qos_params.bw_buffer = pdata_node_info->qos_params.bw_buffer; node_info->util_fact = pdata_node_info->util_fact; node_info->vrail_comp = pdata_node_info->vrail_comp; node_info->dev_connections = devm_kzalloc(bus_dev, sizeof(struct device *) * Loading Loading @@ -981,6 +1017,7 @@ static struct device *msm_bus_device_init( bus_dev = NULL; goto exit_device_init; } device_create_file(bus_dev, &dev_attr_vrail); exit_device_init: return bus_dev; Loading drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +8 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,14 @@ static struct msm_bus_node_info_type *get_node_info_data( dev_dbg(&pdev->dev, "slv rpm id is missing\n"); node_info->slv_rpm_id = -1; } ret = of_property_read_u32(dev_node, "qcom,util-fact", &node_info->util_fact); if (ret) node_info->util_fact = 0; ret = of_property_read_u32(dev_node, "qcom,vrail-comp", &node_info->vrail_comp); if (ret) node_info->vrail_comp = 0; get_qos_params(dev_node, pdev, node_info); return node_info; Loading Loading
drivers/platform/msm/msm_bus/msm_bus_adhoc.h +2 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,8 @@ struct msm_bus_node_info_type { unsigned int buswidth; struct rule_update_path_info rule; uint64_t lim_bw; uint32_t util_fact; uint32_t vrail_comp; }; struct msm_bus_node_device_type { Loading
drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +12 −4 Original line number Diff line number Diff line Loading @@ -397,6 +397,8 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, uint64_t sum_ab = 0; uint64_t bw_max_hz; struct msm_bus_node_device_type *fab_dev = NULL; uint32_t util_fact = 0; uint32_t vrail_comp = 0; /* Find max ib */ for (i = 0; i < bus_dev->num_lnodes; i++) { Loading @@ -408,17 +410,23 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, * formula is: * Freq_hz = max((sum(ab) * util_fact)/num_chan, max(ib)/vrail_comp) * / bus-width * util_fact and vrail comp are obtained from fabric's dts properties. * util_fact and vrail comp are obtained from fabric/Node's dts * properties. * They default to 100 if absent. */ fab_dev = bus_dev->node_info->bus_device->platform_data; /* Don't do this for virtual fabrics */ if (fab_dev && fab_dev->fabdev) { sum_ab *= fab_dev->fabdev->util_fact; util_fact = bus_dev->node_info->util_fact ? bus_dev->node_info->util_fact : fab_dev->fabdev->util_fact; vrail_comp = bus_dev->node_info->vrail_comp ? bus_dev->node_info->vrail_comp : fab_dev->fabdev->vrail_comp; sum_ab *= util_fact; sum_ab = msm_bus_div64(100, sum_ab); max_ib *= 100; max_ib = msm_bus_div64(fab_dev->fabdev->vrail_comp, max_ib); max_ib = msm_bus_div64(vrail_comp, max_ib); } /* Account for multiple channels if any */ Loading
drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +37 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,40 @@ #include "msm_bus_noc.h" #include "msm_bus_bimc.h" ssize_t vrail_show(struct device *dev, struct device_attribute *attr, char *buf) { struct msm_bus_node_info_type *node_info = NULL; struct msm_bus_node_device_type *bus_node = NULL; bus_node = dev->platform_data; if (!bus_node) return -EINVAL; node_info = bus_node->node_info; return snprintf(buf, PAGE_SIZE, "%u", node_info->vrail_comp); } ssize_t vrail_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct msm_bus_node_info_type *node_info = NULL; struct msm_bus_node_device_type *bus_node = NULL; int ret = 0; bus_node = dev->platform_data; if (!bus_node) return -EINVAL; node_info = bus_node->node_info; ret = sscanf(buf, "%u", &node_info->vrail_comp); if (ret != 1) return -EINVAL; return count; } DEVICE_ATTR(vrail, 0600, vrail_show, vrail_store); struct static_rules_type { int num_rules; struct bus_rule_type *rules; Loading Loading @@ -839,6 +873,8 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->qos_params.thmp = pdata_node_info->qos_params.thmp; node_info->qos_params.ws = pdata_node_info->qos_params.ws; node_info->qos_params.bw_buffer = pdata_node_info->qos_params.bw_buffer; node_info->util_fact = pdata_node_info->util_fact; node_info->vrail_comp = pdata_node_info->vrail_comp; node_info->dev_connections = devm_kzalloc(bus_dev, sizeof(struct device *) * Loading Loading @@ -981,6 +1017,7 @@ static struct device *msm_bus_device_init( bus_dev = NULL; goto exit_device_init; } device_create_file(bus_dev, &dev_attr_vrail); exit_device_init: return bus_dev; Loading
drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +8 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,14 @@ static struct msm_bus_node_info_type *get_node_info_data( dev_dbg(&pdev->dev, "slv rpm id is missing\n"); node_info->slv_rpm_id = -1; } ret = of_property_read_u32(dev_node, "qcom,util-fact", &node_info->util_fact); if (ret) node_info->util_fact = 0; ret = of_property_read_u32(dev_node, "qcom,vrail-comp", &node_info->vrail_comp); if (ret) node_info->vrail_comp = 0; get_qos_params(dev_node, pdev, node_info); return node_info; Loading