Loading Documentation/devicetree/bindings/arm/msm/msm_bus_adhoc.txt +2 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,8 @@ qcom,prio-wr: Write priority for a BIMC bus master (Can be 0/1/2) qcom,prio0: Priority low signal for a NoC bus master (Can be 0/1/2). qcom,prio1: Priority high signal for a NoC bus master qcom,bw_buffer: Optional parameter in KBytes used to specify a buffer value that should be added to the voted bandwidth value to figure out the limiting bandwidth for a master port. qcom,buswidth: The buswidth at the device, default is 8 bytes. qcom,mas-rpm-id: For non-AP owned device this is the RPM id for devices that are bus masters. This is the id that is used when sending a message to RPM for this device. Loading drivers/platform/msm/msm_bus/msm_bus_adhoc.h +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ struct qos_params_type { unsigned int thmp; unsigned int ws; int cur_mode; u64 bw_buffer; }; struct msm_bus_node_info_type { Loading drivers/platform/msm/msm_bus/msm_bus_bimc.c +31 −25 Original line number Diff line number Diff line Loading @@ -1252,8 +1252,7 @@ static void set_qos_bw_regs(void __iomem *baddr, uint32_t mas_index, int16_t val2; /* Disable BKE before writing to registers as per spec */ bke_reg_val = readl_relaxed(M_BKE_EN_ADDR(baddr, mas_index)) & M_BKE_EN_RMSK; bke_reg_val = readl_relaxed(M_BKE_EN_ADDR(baddr, mas_index)); writel_relaxed((bke_reg_val & ~(M_BKE_EN_EN_BMSK)), M_BKE_EN_ADDR(baddr, mas_index)); Loading Loading @@ -1502,7 +1501,7 @@ static void bimc_set_static_qos_bw(void __iomem *base, unsigned int qos_freq, return; } if (!(qbw->bw && qbw->ws)) { if (!(qbw->bw && qbw->gp)) { MSM_BUS_DBG("No QoS Bandwidth or Window size\n"); return; } Loading Loading @@ -1980,23 +1979,18 @@ static int msm_bus_bimc_qos_init(struct msm_bus_node_device_type *info, for (i = 0; i < info->node_info->num_qports; i++) { /* If not in bypass mode, update priority */ if (info->node_info->qos_params.mode != BIMC_QOS_MODE_BYPASS) { if (info->node_info->qos_params.mode != BIMC_QOS_MODE_BYPASS) msm_bus_bimc_set_qos_prio(qos_base, info->node_info-> qport[i], info->node_info->qos_params.mode, &qmode); /* If not in fixed mode, update bandwidth */ if (info->node_info->qos_params.mode != BIMC_QOS_MODE_FIXED) { struct msm_bus_bimc_qos_bw qbw; qbw.ws = info->node_info->qos_params.ws; msm_bus_bimc_set_qos_bw(qos_base, qos_freq, info->node_info->qport[i], &qbw); } } /* set mode */ msm_bus_bimc_set_qos_mode(qos_base, info->node_info->qport[i], if (info->node_info->qos_params.mode == BIMC_QOS_MODE_LIMITER) bke_switch(qos_base, info->node_info->qport[i], BKE_OFF, BIMC_QOS_MODE_FIXED); else msm_bus_bimc_set_qos_mode(qos_base, info->node_info->qport[i], info->node_info->qos_params.mode); } Loading Loading @@ -2028,16 +2022,28 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, break; } qbw.bw = bw; qbw.ws = info->qos_params.ws; /* Threshold low = 90% of bw */ qbw.thl = div_s64((90 * bw), 100); /* Threshold medium = bw */ qbw.thm = bw; /* Threshold high = 10% more than bw */ qbw.thh = div_s64((110 * bw), 100); msm_bus_bimc_set_qos_bw(qos_base, qos_freq, qbw.bw = bw + info->qos_params.bw_buffer; trace_bus_bimc_config_limiter(info->id, bw); /* Default to gp of 5us */ qbw.gp = (info->qos_params.gp ? info->qos_params.gp : 5000); /* Default to thmp of 50% */ qbw.thmp = (info->qos_params.thmp ? info->qos_params.thmp : 50); /* * If the BW vote is 0 then set the QoS mode to * Fixed. */ if (bw) { bimc_set_static_qos_bw(qos_base, qos_freq, info->qport[i], &qbw); bke_switch(qos_base, info->qport[i], BKE_ON, info->qos_params.mode); } else { bke_switch(qos_base, info->qport[i], BKE_OFF, BIMC_QOS_MODE_FIXED); } } } return ret; Loading drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +1 −0 Original line number Diff line number Diff line Loading @@ -831,6 +831,7 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->qos_params.gp = pdata_node_info->qos_params.gp; 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->dev_connections = devm_kzalloc(bus_dev, sizeof(struct device *) * Loading drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +9 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ static void get_qos_params( { const char *qos_mode = NULL; unsigned int ret; unsigned int temp; ret = of_property_read_string(dev_node, "qcom,qos-mode", &qos_mode); Loading Loading @@ -211,6 +212,14 @@ static void get_qos_params( of_property_read_u32(dev_node, "qcom,ws", &node_info->qos_params.ws); ret = of_property_read_u32(dev_node, "qcom,bw_buffer", &temp); if (ret) node_info->qos_params.bw_buffer = 0; else node_info->qos_params.bw_buffer = KBTOB(temp); } Loading Loading
Documentation/devicetree/bindings/arm/msm/msm_bus_adhoc.txt +2 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,8 @@ qcom,prio-wr: Write priority for a BIMC bus master (Can be 0/1/2) qcom,prio0: Priority low signal for a NoC bus master (Can be 0/1/2). qcom,prio1: Priority high signal for a NoC bus master qcom,bw_buffer: Optional parameter in KBytes used to specify a buffer value that should be added to the voted bandwidth value to figure out the limiting bandwidth for a master port. qcom,buswidth: The buswidth at the device, default is 8 bytes. qcom,mas-rpm-id: For non-AP owned device this is the RPM id for devices that are bus masters. This is the id that is used when sending a message to RPM for this device. Loading
drivers/platform/msm/msm_bus/msm_bus_adhoc.h +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ struct qos_params_type { unsigned int thmp; unsigned int ws; int cur_mode; u64 bw_buffer; }; struct msm_bus_node_info_type { Loading
drivers/platform/msm/msm_bus/msm_bus_bimc.c +31 −25 Original line number Diff line number Diff line Loading @@ -1252,8 +1252,7 @@ static void set_qos_bw_regs(void __iomem *baddr, uint32_t mas_index, int16_t val2; /* Disable BKE before writing to registers as per spec */ bke_reg_val = readl_relaxed(M_BKE_EN_ADDR(baddr, mas_index)) & M_BKE_EN_RMSK; bke_reg_val = readl_relaxed(M_BKE_EN_ADDR(baddr, mas_index)); writel_relaxed((bke_reg_val & ~(M_BKE_EN_EN_BMSK)), M_BKE_EN_ADDR(baddr, mas_index)); Loading Loading @@ -1502,7 +1501,7 @@ static void bimc_set_static_qos_bw(void __iomem *base, unsigned int qos_freq, return; } if (!(qbw->bw && qbw->ws)) { if (!(qbw->bw && qbw->gp)) { MSM_BUS_DBG("No QoS Bandwidth or Window size\n"); return; } Loading Loading @@ -1980,23 +1979,18 @@ static int msm_bus_bimc_qos_init(struct msm_bus_node_device_type *info, for (i = 0; i < info->node_info->num_qports; i++) { /* If not in bypass mode, update priority */ if (info->node_info->qos_params.mode != BIMC_QOS_MODE_BYPASS) { if (info->node_info->qos_params.mode != BIMC_QOS_MODE_BYPASS) msm_bus_bimc_set_qos_prio(qos_base, info->node_info-> qport[i], info->node_info->qos_params.mode, &qmode); /* If not in fixed mode, update bandwidth */ if (info->node_info->qos_params.mode != BIMC_QOS_MODE_FIXED) { struct msm_bus_bimc_qos_bw qbw; qbw.ws = info->node_info->qos_params.ws; msm_bus_bimc_set_qos_bw(qos_base, qos_freq, info->node_info->qport[i], &qbw); } } /* set mode */ msm_bus_bimc_set_qos_mode(qos_base, info->node_info->qport[i], if (info->node_info->qos_params.mode == BIMC_QOS_MODE_LIMITER) bke_switch(qos_base, info->node_info->qport[i], BKE_OFF, BIMC_QOS_MODE_FIXED); else msm_bus_bimc_set_qos_mode(qos_base, info->node_info->qport[i], info->node_info->qos_params.mode); } Loading Loading @@ -2028,16 +2022,28 @@ static int msm_bus_bimc_set_bw(struct msm_bus_node_device_type *dev, break; } qbw.bw = bw; qbw.ws = info->qos_params.ws; /* Threshold low = 90% of bw */ qbw.thl = div_s64((90 * bw), 100); /* Threshold medium = bw */ qbw.thm = bw; /* Threshold high = 10% more than bw */ qbw.thh = div_s64((110 * bw), 100); msm_bus_bimc_set_qos_bw(qos_base, qos_freq, qbw.bw = bw + info->qos_params.bw_buffer; trace_bus_bimc_config_limiter(info->id, bw); /* Default to gp of 5us */ qbw.gp = (info->qos_params.gp ? info->qos_params.gp : 5000); /* Default to thmp of 50% */ qbw.thmp = (info->qos_params.thmp ? info->qos_params.thmp : 50); /* * If the BW vote is 0 then set the QoS mode to * Fixed. */ if (bw) { bimc_set_static_qos_bw(qos_base, qos_freq, info->qport[i], &qbw); bke_switch(qos_base, info->qport[i], BKE_ON, info->qos_params.mode); } else { bke_switch(qos_base, info->qport[i], BKE_OFF, BIMC_QOS_MODE_FIXED); } } } return ret; Loading
drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c +1 −0 Original line number Diff line number Diff line Loading @@ -831,6 +831,7 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata, node_info->qos_params.gp = pdata_node_info->qos_params.gp; 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->dev_connections = devm_kzalloc(bus_dev, sizeof(struct device *) * Loading
drivers/platform/msm/msm_bus/msm_bus_of_adhoc.c +9 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ static void get_qos_params( { const char *qos_mode = NULL; unsigned int ret; unsigned int temp; ret = of_property_read_string(dev_node, "qcom,qos-mode", &qos_mode); Loading Loading @@ -211,6 +212,14 @@ static void get_qos_params( of_property_read_u32(dev_node, "qcom,ws", &node_info->qos_params.ws); ret = of_property_read_u32(dev_node, "qcom,bw_buffer", &temp); if (ret) node_info->qos_params.bw_buffer = 0; else node_info->qos_params.bw_buffer = KBTOB(temp); } Loading