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

Commit 68830242 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: Add node specific bus aggregation properties"

parents 895f71d7 7456d977
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 {
+12 −4
Original line number Diff line number Diff line
@@ -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++) {
@@ -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 */
+37 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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 *) *
@@ -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;
+8 −0
Original line number Diff line number Diff line
@@ -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;