Loading drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +2 −2 Original line number Diff line number Diff line Loading @@ -317,8 +317,8 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, } /* Account for multiple channels if any */ if (bus_dev->node_info->num_ports > 1) sum_ab = msm_bus_div64(bus_dev->node_info->num_ports, if (bus_dev->node_info->num_qports > 1) sum_ab = msm_bus_div64(bus_dev->node_info->num_qports, sum_ab); if (!bus_dev->node_info->buswidth) { Loading drivers/platform/msm/msm_bus/msm_bus_bimc.c +4 −7 Original line number Diff line number Diff line Loading @@ -1802,7 +1802,7 @@ static int msm_bus_bimc_qos_init(struct msm_bus_node_device_type *info, return 0; } for (i = 0; i < info->node_info->num_ports; i++) { for (i = 0; i < info->node_info->num_qports; i++) { /* If not in bypass mode, update priority */ if (info->node_info->mode != BIMC_QOS_MODE_BYPASS) { msm_bus_bimc_set_qos_prio(qos_base, info->node_info-> Loading Loading @@ -1835,11 +1835,11 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, int ret = 0; struct msm_bus_node_info_type *info = dev->node_info; if (info && info->num_ports) { bw = msm_bus_div64(info->num_ports, if (info && info->num_qports) { bw = msm_bus_div64(info->num_qports, dev->node_ab.ab[DUAL_CTX]); for (i = 0; i < info->num_ports; i++) { for (i = 0; i < info->num_qports; i++) { MSM_BUS_DBG("BIMC: Update mas_bw for ID: %d -> %llu\n", info->id, bw); Loading @@ -1859,9 +1859,6 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, msm_bus_bimc_set_qos_bw(qos_base, qos_freq, info->qport[i], &qbw); } } else { ret = -ENODEV; MSM_BUS_ERR("%s: Cannot program BW regs", __func__); } return ret; } Loading drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +20 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,7 @@ static int msm_bus_fabric_init(struct device *dev, fabdev->qos_range = pdata->fabdev->qos_range; fabdev->base_offset = pdata->fabdev->base_offset; fabdev->bus_type = pdata->fabdev->bus_type; fabdev->bypass_qos_prg = pdata->fabdev->bypass_qos_prg; msm_bus_fab_init_noc_ops(node_dev); fabdev->qos_base = devm_ioremap(dev, Loading Loading @@ -685,6 +686,7 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->mas_rpm_id = pdata_node_info->mas_rpm_id; node_info->slv_rpm_id = pdata_node_info->slv_rpm_id; node_info->num_connections = pdata_node_info->num_connections; node_info->num_qports = pdata_node_info->num_qports; node_info->buswidth = pdata_node_info->buswidth; node_info->virt_dev = pdata_node_info->virt_dev; node_info->is_fab_dev = pdata_node_info->is_fab_dev; Loading Loading @@ -716,6 +718,21 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, pdata_node_info->connections, sizeof(int) * pdata_node_info->num_connections); node_info->qport = devm_kzalloc(bus_dev, sizeof(int) * pdata_node_info->num_qports, GFP_KERNEL); if (!node_info->qport) { MSM_BUS_ERR("%s:Bus qport allocation failed\n", __func__); devm_kfree(bus_dev, node_info->dev_connections); devm_kfree(bus_dev, node_info->connections); ret = -ENOMEM; goto exit_copy_node_info; } memcpy(node_info->qport, pdata_node_info->qport, sizeof(int) * pdata_node_info->num_qports); exit_copy_node_info: return ret; } Loading Loading @@ -759,6 +776,7 @@ static struct device *msm_bus_device_init( } bus_node->node_info = node_info; bus_node->ap_owned = pdata->ap_owned; bus_dev->platform_data = bus_node; if (msm_bus_copy_node_info(pdata, bus_dev) < 0) { Loading Loading @@ -927,6 +945,8 @@ static int msm_bus_device_probe(struct platform_device *pdev) /* Register the arb layer ops */ msm_bus_arb_setops_adhoc(&arb_ops); devm_kfree(&pdev->dev, pdata->info); devm_kfree(&pdev->dev, pdata); exit_device_probe: return ret; } Loading drivers/platform/msm/msm_bus/msm_bus_noc.c +4 −9 Original line number Diff line number Diff line Loading @@ -642,8 +642,6 @@ static int msm_bus_noc_qos_init(struct msm_bus_node_device_type *info, int ret = 0; int i; prio.read_prio = info->node_info->prio_rd; prio.write_prio = info->node_info->prio_wr; prio.p1 = info->node_info->prio1; prio.p0 = info->node_info->prio0; Loading @@ -653,7 +651,7 @@ static int msm_bus_noc_qos_init(struct msm_bus_node_device_type *info, goto err_qos_init; } for (i = 0; i < info->node_info->num_ports; i++) { for (i = 0; i < info->node_info->num_qports; i++) { if (info->node_info->mode != NOC_QOS_MODE_BYPASS) { noc_set_qos_priority(qos_base, qos_off, qos_delta, info->node_info->qport[i], &prio); Loading Loading @@ -688,13 +686,13 @@ static int msm_bus_noc_set_bw(struct msm_bus_node_device_type *dev, int i; struct msm_bus_node_info_type *info = dev->node_info; if (info && info->num_ports) { if (info && info->num_qports) { struct msm_bus_noc_qos_bw qos_bw; bw = msm_bus_div64(info->num_ports, bw = msm_bus_div64(info->num_qports, dev->node_ab.ab[DUAL_CTX]); for (i = 0; i < info->num_ports; i++) { for (i = 0; i < info->num_qports; i++) { if (!info->qport) { MSM_BUS_DBG("No qos ports to update!\n"); break; Loading @@ -708,9 +706,6 @@ static int msm_bus_noc_set_bw(struct msm_bus_node_device_type *dev, MSM_BUS_DBG("NOC: QoS: Update mas_bw: ws: %u\n", qos_bw.ws); } } else { MSM_BUS_ERR("%s: Can't program the BW regs", __func__); ret = -ENODEV; } return ret; } Loading drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +41 −27 Original line number Diff line number Diff line Loading @@ -25,27 +25,26 @@ #include "msm_bus_core.h" #include "msm_bus_adhoc.h" #define DEFAULT_QOS_FREQ 19200 static int get_qos_mode(struct platform_device *pdev, struct device_node *node, const char *qos_mode) { const char *qos_names[] = {"Fixed", "Limiter", "Bypass", "Regulator"}; const char *qos_names[] = {"fixed", "limiter", "bypass", "regulator"}; int i = 0; int ret = 0; int ret = -1; if (!qos_mode) { ret = 2; if (!qos_mode) goto exit_get_qos_mode; } for (i = 0; i < ARRAY_SIZE(qos_names); i++) { if (!strcmp(qos_mode, qos_names[i])) break; } if (i == ARRAY_SIZE(qos_names)) { ret = -1; dev_dbg(&pdev->dev, "Cannot match mode qos %s using Bypass", if (i == ARRAY_SIZE(qos_names)) dev_err(&pdev->dev, "Cannot match mode qos %s using Bypass", qos_mode); } else else ret = i; exit_get_qos_mode: Loading Loading @@ -77,11 +76,11 @@ static int *get_arr(struct platform_device *pdev, ret = of_property_read_u32_array(node, prop, (u32 *)arr, *nports); if (ret) { dev_err(&pdev->dev, "Error in reading property: %s\n", prop); goto err; goto arr_err; } return arr; err: arr_err: devm_kfree(&pdev->dev, arr); return NULL; } Loading @@ -107,14 +106,14 @@ static struct msm_bus_fab_device_type *get_fab_device_info( ret = of_property_read_string(dev_node, "qcom,base-name", &base_name); if (ret) { dev_err(&pdev->dev, "Error: Unable to get base address name\n"); goto err; goto fab_dev_err; } res = platform_get_resource_byname(pdev, IORESOURCE_MEM, base_name); if (!res) { dev_err(&pdev->dev, "Error getting qos base addr %s\n", base_name); goto err; goto fab_dev_err; } fab_dev->pqos_base = res->start; fab_dev->qos_range = resource_size(res); Loading @@ -136,12 +135,19 @@ static struct msm_bus_fab_device_type *get_fab_device_info( &fab_dev->bus_type); if (ret) { dev_warn(&pdev->dev, "Bus type is missing\n"); goto err; goto fab_dev_err; } ret = of_property_read_u32(dev_node, "qcom,qos-freq", &fab_dev->qos_freq); if (ret) { dev_dbg(&pdev->dev, "Bus qos freq is missing\n"); fab_dev->qos_freq = DEFAULT_QOS_FREQ; } return fab_dev; err: fab_dev_err: devm_kfree(&pdev->dev, fab_dev); fab_dev = 0; return NULL; Loading Loading @@ -171,12 +177,12 @@ static struct msm_bus_node_info_type *get_node_info_data( ret = of_property_read_u32(dev_node, "cell-id", &node_info->id); if (ret) { dev_warn(&pdev->dev, "Bus node is missing cell-id\n"); goto err; goto node_info_err; } ret = of_property_read_string(dev_node, "label", &node_info->name); if (ret) { dev_warn(&pdev->dev, "Bus node is missing name\n"); goto err; goto node_info_err; } node_info->qport = get_arr(pdev, dev_node, "qcom,qport", &node_info->num_qports); Loading @@ -193,11 +199,11 @@ static struct msm_bus_node_info_type *get_node_info_data( for (i = 0; i < node_info->num_connections; i++) { con_node = of_parse_phandle(dev_node, "qcom,connections", i); if (IS_ERR_OR_NULL(con_node)) goto err; goto node_info_err; if (of_property_read_u32(con_node, "cell-id", &node_info->connections[i])) goto err; goto node_info_err; of_node_put(con_node); } Loading @@ -207,7 +213,7 @@ static struct msm_bus_node_info_type *get_node_info_data( &node_info->bus_device_id)) { dev_err(&pdev->dev, "Can't find bus device. Node %d", node_info->id); goto err; goto node_info_err; } of_node_put(bus_dev); Loading Loading @@ -240,16 +246,24 @@ static struct msm_bus_node_info_type *get_node_info_data( } ret = of_property_read_string(dev_node, "qcom,qos-mode", &qos_mode); if (ret) node_info->mode = -1; else node_info->mode = get_qos_mode(pdev, dev_node, qos_mode); ret = of_property_read_u32(dev_node, "qcom,prio-lvl", &node_info->slv_rpm_id); &node_info->prio_lvl); ret = of_property_read_u32(dev_node, "qcom,prio1", &node_info->prio1); ret = of_property_read_u32(dev_node, "qcom,prio0", &node_info->prio0); ret = of_property_read_u32(dev_node, "qcom,prio-rd", &node_info->prio_rd); ret = of_property_read_u32(dev_node, "qcom,prio-wr", &node_info->prio_wr); return node_info; err: node_info_err: devm_kfree(&pdev->dev, node_info); node_info = 0; return NULL; Loading Loading @@ -333,7 +347,7 @@ struct msm_bus_device_node_registration if (!pdata->info) { dev_err(&pdev->dev, "Error: Memory allocation for pdata->info failed\n"); goto err; goto node_reg_err; } ret = 0; Loading @@ -342,7 +356,7 @@ struct msm_bus_device_node_registration &pdata->info[i]); if (ret) { dev_err(&pdev->dev, "Error: unable to initialize bus nodes\n"); goto err_1; goto node_reg_err_1; } i++; } Loading Loading @@ -370,9 +384,9 @@ struct msm_bus_device_node_registration } return pdata; err_1: node_reg_err_1: devm_kfree(&pdev->dev, pdata->info); err: node_reg_err: devm_kfree(&pdev->dev, pdata); pdata = NULL; return NULL; Loading Loading
drivers/platform/msm/msm_bus/msm_bus_arb_adhoc.c +2 −2 Original line number Diff line number Diff line Loading @@ -317,8 +317,8 @@ static uint64_t arbitrate_bus_req(struct msm_bus_node_device_type *bus_dev, } /* Account for multiple channels if any */ if (bus_dev->node_info->num_ports > 1) sum_ab = msm_bus_div64(bus_dev->node_info->num_ports, if (bus_dev->node_info->num_qports > 1) sum_ab = msm_bus_div64(bus_dev->node_info->num_qports, sum_ab); if (!bus_dev->node_info->buswidth) { Loading
drivers/platform/msm/msm_bus/msm_bus_bimc.c +4 −7 Original line number Diff line number Diff line Loading @@ -1802,7 +1802,7 @@ static int msm_bus_bimc_qos_init(struct msm_bus_node_device_type *info, return 0; } for (i = 0; i < info->node_info->num_ports; i++) { for (i = 0; i < info->node_info->num_qports; i++) { /* If not in bypass mode, update priority */ if (info->node_info->mode != BIMC_QOS_MODE_BYPASS) { msm_bus_bimc_set_qos_prio(qos_base, info->node_info-> Loading Loading @@ -1835,11 +1835,11 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, int ret = 0; struct msm_bus_node_info_type *info = dev->node_info; if (info && info->num_ports) { bw = msm_bus_div64(info->num_ports, if (info && info->num_qports) { bw = msm_bus_div64(info->num_qports, dev->node_ab.ab[DUAL_CTX]); for (i = 0; i < info->num_ports; i++) { for (i = 0; i < info->num_qports; i++) { MSM_BUS_DBG("BIMC: Update mas_bw for ID: %d -> %llu\n", info->id, bw); Loading @@ -1859,9 +1859,6 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, msm_bus_bimc_set_qos_bw(qos_base, qos_freq, info->qport[i], &qbw); } } else { ret = -ENODEV; MSM_BUS_ERR("%s: Cannot program BW regs", __func__); } return ret; } Loading
drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +20 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,7 @@ static int msm_bus_fabric_init(struct device *dev, fabdev->qos_range = pdata->fabdev->qos_range; fabdev->base_offset = pdata->fabdev->base_offset; fabdev->bus_type = pdata->fabdev->bus_type; fabdev->bypass_qos_prg = pdata->fabdev->bypass_qos_prg; msm_bus_fab_init_noc_ops(node_dev); fabdev->qos_base = devm_ioremap(dev, Loading Loading @@ -685,6 +686,7 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->mas_rpm_id = pdata_node_info->mas_rpm_id; node_info->slv_rpm_id = pdata_node_info->slv_rpm_id; node_info->num_connections = pdata_node_info->num_connections; node_info->num_qports = pdata_node_info->num_qports; node_info->buswidth = pdata_node_info->buswidth; node_info->virt_dev = pdata_node_info->virt_dev; node_info->is_fab_dev = pdata_node_info->is_fab_dev; Loading Loading @@ -716,6 +718,21 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, pdata_node_info->connections, sizeof(int) * pdata_node_info->num_connections); node_info->qport = devm_kzalloc(bus_dev, sizeof(int) * pdata_node_info->num_qports, GFP_KERNEL); if (!node_info->qport) { MSM_BUS_ERR("%s:Bus qport allocation failed\n", __func__); devm_kfree(bus_dev, node_info->dev_connections); devm_kfree(bus_dev, node_info->connections); ret = -ENOMEM; goto exit_copy_node_info; } memcpy(node_info->qport, pdata_node_info->qport, sizeof(int) * pdata_node_info->num_qports); exit_copy_node_info: return ret; } Loading Loading @@ -759,6 +776,7 @@ static struct device *msm_bus_device_init( } bus_node->node_info = node_info; bus_node->ap_owned = pdata->ap_owned; bus_dev->platform_data = bus_node; if (msm_bus_copy_node_info(pdata, bus_dev) < 0) { Loading Loading @@ -927,6 +945,8 @@ static int msm_bus_device_probe(struct platform_device *pdev) /* Register the arb layer ops */ msm_bus_arb_setops_adhoc(&arb_ops); devm_kfree(&pdev->dev, pdata->info); devm_kfree(&pdev->dev, pdata); exit_device_probe: return ret; } Loading
drivers/platform/msm/msm_bus/msm_bus_noc.c +4 −9 Original line number Diff line number Diff line Loading @@ -642,8 +642,6 @@ static int msm_bus_noc_qos_init(struct msm_bus_node_device_type *info, int ret = 0; int i; prio.read_prio = info->node_info->prio_rd; prio.write_prio = info->node_info->prio_wr; prio.p1 = info->node_info->prio1; prio.p0 = info->node_info->prio0; Loading @@ -653,7 +651,7 @@ static int msm_bus_noc_qos_init(struct msm_bus_node_device_type *info, goto err_qos_init; } for (i = 0; i < info->node_info->num_ports; i++) { for (i = 0; i < info->node_info->num_qports; i++) { if (info->node_info->mode != NOC_QOS_MODE_BYPASS) { noc_set_qos_priority(qos_base, qos_off, qos_delta, info->node_info->qport[i], &prio); Loading Loading @@ -688,13 +686,13 @@ static int msm_bus_noc_set_bw(struct msm_bus_node_device_type *dev, int i; struct msm_bus_node_info_type *info = dev->node_info; if (info && info->num_ports) { if (info && info->num_qports) { struct msm_bus_noc_qos_bw qos_bw; bw = msm_bus_div64(info->num_ports, bw = msm_bus_div64(info->num_qports, dev->node_ab.ab[DUAL_CTX]); for (i = 0; i < info->num_ports; i++) { for (i = 0; i < info->num_qports; i++) { if (!info->qport) { MSM_BUS_DBG("No qos ports to update!\n"); break; Loading @@ -708,9 +706,6 @@ static int msm_bus_noc_set_bw(struct msm_bus_node_device_type *dev, MSM_BUS_DBG("NOC: QoS: Update mas_bw: ws: %u\n", qos_bw.ws); } } else { MSM_BUS_ERR("%s: Can't program the BW regs", __func__); ret = -ENODEV; } return ret; } Loading
drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +41 −27 Original line number Diff line number Diff line Loading @@ -25,27 +25,26 @@ #include "msm_bus_core.h" #include "msm_bus_adhoc.h" #define DEFAULT_QOS_FREQ 19200 static int get_qos_mode(struct platform_device *pdev, struct device_node *node, const char *qos_mode) { const char *qos_names[] = {"Fixed", "Limiter", "Bypass", "Regulator"}; const char *qos_names[] = {"fixed", "limiter", "bypass", "regulator"}; int i = 0; int ret = 0; int ret = -1; if (!qos_mode) { ret = 2; if (!qos_mode) goto exit_get_qos_mode; } for (i = 0; i < ARRAY_SIZE(qos_names); i++) { if (!strcmp(qos_mode, qos_names[i])) break; } if (i == ARRAY_SIZE(qos_names)) { ret = -1; dev_dbg(&pdev->dev, "Cannot match mode qos %s using Bypass", if (i == ARRAY_SIZE(qos_names)) dev_err(&pdev->dev, "Cannot match mode qos %s using Bypass", qos_mode); } else else ret = i; exit_get_qos_mode: Loading Loading @@ -77,11 +76,11 @@ static int *get_arr(struct platform_device *pdev, ret = of_property_read_u32_array(node, prop, (u32 *)arr, *nports); if (ret) { dev_err(&pdev->dev, "Error in reading property: %s\n", prop); goto err; goto arr_err; } return arr; err: arr_err: devm_kfree(&pdev->dev, arr); return NULL; } Loading @@ -107,14 +106,14 @@ static struct msm_bus_fab_device_type *get_fab_device_info( ret = of_property_read_string(dev_node, "qcom,base-name", &base_name); if (ret) { dev_err(&pdev->dev, "Error: Unable to get base address name\n"); goto err; goto fab_dev_err; } res = platform_get_resource_byname(pdev, IORESOURCE_MEM, base_name); if (!res) { dev_err(&pdev->dev, "Error getting qos base addr %s\n", base_name); goto err; goto fab_dev_err; } fab_dev->pqos_base = res->start; fab_dev->qos_range = resource_size(res); Loading @@ -136,12 +135,19 @@ static struct msm_bus_fab_device_type *get_fab_device_info( &fab_dev->bus_type); if (ret) { dev_warn(&pdev->dev, "Bus type is missing\n"); goto err; goto fab_dev_err; } ret = of_property_read_u32(dev_node, "qcom,qos-freq", &fab_dev->qos_freq); if (ret) { dev_dbg(&pdev->dev, "Bus qos freq is missing\n"); fab_dev->qos_freq = DEFAULT_QOS_FREQ; } return fab_dev; err: fab_dev_err: devm_kfree(&pdev->dev, fab_dev); fab_dev = 0; return NULL; Loading Loading @@ -171,12 +177,12 @@ static struct msm_bus_node_info_type *get_node_info_data( ret = of_property_read_u32(dev_node, "cell-id", &node_info->id); if (ret) { dev_warn(&pdev->dev, "Bus node is missing cell-id\n"); goto err; goto node_info_err; } ret = of_property_read_string(dev_node, "label", &node_info->name); if (ret) { dev_warn(&pdev->dev, "Bus node is missing name\n"); goto err; goto node_info_err; } node_info->qport = get_arr(pdev, dev_node, "qcom,qport", &node_info->num_qports); Loading @@ -193,11 +199,11 @@ static struct msm_bus_node_info_type *get_node_info_data( for (i = 0; i < node_info->num_connections; i++) { con_node = of_parse_phandle(dev_node, "qcom,connections", i); if (IS_ERR_OR_NULL(con_node)) goto err; goto node_info_err; if (of_property_read_u32(con_node, "cell-id", &node_info->connections[i])) goto err; goto node_info_err; of_node_put(con_node); } Loading @@ -207,7 +213,7 @@ static struct msm_bus_node_info_type *get_node_info_data( &node_info->bus_device_id)) { dev_err(&pdev->dev, "Can't find bus device. Node %d", node_info->id); goto err; goto node_info_err; } of_node_put(bus_dev); Loading Loading @@ -240,16 +246,24 @@ static struct msm_bus_node_info_type *get_node_info_data( } ret = of_property_read_string(dev_node, "qcom,qos-mode", &qos_mode); if (ret) node_info->mode = -1; else node_info->mode = get_qos_mode(pdev, dev_node, qos_mode); ret = of_property_read_u32(dev_node, "qcom,prio-lvl", &node_info->slv_rpm_id); &node_info->prio_lvl); ret = of_property_read_u32(dev_node, "qcom,prio1", &node_info->prio1); ret = of_property_read_u32(dev_node, "qcom,prio0", &node_info->prio0); ret = of_property_read_u32(dev_node, "qcom,prio-rd", &node_info->prio_rd); ret = of_property_read_u32(dev_node, "qcom,prio-wr", &node_info->prio_wr); return node_info; err: node_info_err: devm_kfree(&pdev->dev, node_info); node_info = 0; return NULL; Loading Loading @@ -333,7 +347,7 @@ struct msm_bus_device_node_registration if (!pdata->info) { dev_err(&pdev->dev, "Error: Memory allocation for pdata->info failed\n"); goto err; goto node_reg_err; } ret = 0; Loading @@ -342,7 +356,7 @@ struct msm_bus_device_node_registration &pdata->info[i]); if (ret) { dev_err(&pdev->dev, "Error: unable to initialize bus nodes\n"); goto err_1; goto node_reg_err_1; } i++; } Loading Loading @@ -370,9 +384,9 @@ struct msm_bus_device_node_registration } return pdata; err_1: node_reg_err_1: devm_kfree(&pdev->dev, pdata->info); err: node_reg_err: devm_kfree(&pdev->dev, pdata); pdata = NULL; return NULL; Loading