Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e80d07dd authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: msm_bus: Modify set bandwidth for adhoc driver"

parents 4c48713b 06f2a238
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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.
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+31 −25
Original line number Diff line number Diff line
@@ -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));

@@ -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;
	}
@@ -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);
	}

@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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 *) *
+9 −0
Original line number Diff line number Diff line
@@ -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);

@@ -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);

}