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

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

Merge "ARM: dts: msm: Add QoS settings for sdm845"

parents c7fe3db2 886617ea
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -121,6 +121,20 @@ qcom,blacklist: An array of phandles that represent devices that this de
			cannot connect to either directly or via any number of
			intermediate nodes.
qcom,agg-ports:		The number of aggregation ports on the bus.
qcom,node-qos-bcms:	Optional property to target specific BCMs to toggle during QoS configuration,
			this is to ensure QoS register space is clocked and accessible. Array is
			defined as follows: BCM node ID, VoteX, VoteY. The vectors must be defined in
			sets of the three values aforementioned.
qcom,prio:		Default fixed priority for bus master.
qcom,qos-lim-params:	Array containing QoS limiter configurations defined as: Bandwidth, Saturation.
			Must define "qcom,qos-lim-en" for these settings to take effect.
qcom,qos-lim-en:	Boolean to enable limiter settings, default is disabled.
qcom,qos-reg-params:	Array containing QoS regulator configurations defined as: Low Priority, High
			Priority, Bandwidth, Saturation. Must define "qcom,qos-reg-regmode" for these
			settings to take effect.
qcom,qos-reg-mode:	Array containing QoS regulator mode enablement: Read Enable, Write Enable,
			default is disabled.
qcom,forwarding:	Boolean indicate Urgent Forwarding enablement.

The following properties are optional as collecting data via coresight might
and are present on child nodes that represent NOC devices. The documentation
@@ -172,6 +186,12 @@ Example:
				<&clock_gcc clk_q1_clk>;
			q0-clk-supply = <&gdsc_q0_clk>;
		};
		qcom,node-qos-bcms = <0x7011 0 1>;
		qcom,prio = 1;
		qcom,qos-lim-params = <1000 1000>;
		qcom,qos-lim-en:
		qcom,qos-reg-params = <1 2 1000 1000>;
		qcom,qos-reg-mode = <1 1>;
        };

        mm_int_bimc: mm-int-bimc {
+101 −15
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@

#include <dt-bindings/msm/msm-bus-ids.h>
#include <dt-bindings/soc/qcom,tcs-mbox.h>
#include <dt-bindings/clock/qcom,gcc-sdm845.h>

&soc {
	ad_hoc_bus: ad-hoc-bus {
@@ -355,7 +356,8 @@
			label = "fab-aggre1_noc";
			qcom,fab-dev;
			qcom,base-name = "aggre1_noc-base";
			qcom,bypass-qos-prg;
			qcom,qos-off = <4096>;
			qcom,base-offset = <16384>;
			qcom,bus-type = <1>;
			clocks = <>;
		};
@@ -365,7 +367,8 @@
			label = "fab-aggre2_noc";
			qcom,fab-dev;
			qcom,base-name = "aggre2_noc-base";
			qcom,bypass-qos-prg;
			qcom,qos-off = <4096>;
			qcom,base-offset = <16384>;
			qcom,bus-type = <1>;
			clocks = <>;
		};
@@ -432,7 +435,8 @@
			label = "fab-mem_noc";
			qcom,fab-dev;
			qcom,base-name = "mem_noc-base";
			qcom,bypass-qos-prg;
			qcom,qos-off = <4096>;
			qcom,base-offset = <65536>;
			qcom,bus-type = <1>;
			clocks = <>;
		};
@@ -442,7 +446,8 @@
			label = "fab-mmss_noc";
			qcom,fab-dev;
			qcom,base-name = "mmss_noc-base";
			qcom,bypass-qos-prg;
			qcom,qos-off = <4096>;
			qcom,base-offset = <36864>;
			qcom,bus-type = <1>;
			clocks = <>;
		};
@@ -452,7 +457,8 @@
			label = "fab-system_noc";
			qcom,fab-dev;
			qcom,base-name = "system_noc-base";
			qcom,bypass-qos-prg;
			qcom,qos-off = <4096>;
			qcom,base-offset = <36864>;
			qcom,bus-type = <1>;
			clocks = <>;
		};
@@ -471,6 +477,8 @@
			label = "fab-mem_noc_display";
			qcom,fab-dev;
			qcom,base-name = "mem_noc-base";
			qcom,qos-off = <4096>;
			qcom,base-offset = <65536>;
			qcom,bypass-qos-prg;
			qcom,bus-type = <1>;
			clocks = <>;
@@ -524,6 +532,8 @@
			qcom,qport = <1>;
			qcom,connections = <&slv_qns_a1noc_snoc>;
			qcom,bus-dev = <&fab_aggre1_noc>;
			qcom,ap-owned;
			qcom,prio = <1>;
		};

		mas_xm_sdc4: mas-xm-sdc4 {
@@ -534,6 +544,8 @@
			qcom,qport = <2>;
			qcom,connections = <&slv_qns_a1noc_snoc>;
			qcom,bus-dev = <&fab_aggre1_noc>;
			qcom,ap-owned;
			qcom,prio = <1>;
		};

		mas_xm_ufs_card: mas-xm-ufs-card {
@@ -544,6 +556,8 @@
			qcom,qport = <3>;
			qcom,connections = <&slv_qns_a1noc_snoc>;
			qcom,bus-dev = <&fab_aggre1_noc>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_xm_ufs_mem: mas-xm-ufs-mem {
@@ -554,6 +568,8 @@
			qcom,qport = <4>;
			qcom,connections = <&slv_qns_a1noc_snoc>;
			qcom,bus-dev = <&fab_aggre1_noc>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_qhm_a2noc_cfg: mas-qhm-a2noc-cfg {
@@ -592,6 +608,8 @@
			qcom,qport = <0>;
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,ap-owned;
			qcom,prio = <1>;
		};

		mas_qxm_crypto: mas-qxm-crypto {
@@ -603,6 +621,8 @@
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,bcms = <&bcm_ce0>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_qxm_ipa: mas-qxm-ipa {
@@ -613,6 +633,7 @@
			qcom,qport = <2>;
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,prio = <2>;
		};

		mas_xm_pcie3_1: mas-xm-pcie3-1 {
@@ -623,6 +644,8 @@
			qcom,qport = <6>;
			qcom,connections = <&slv_qns_pcie_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_xm_pcie_0: mas-xm-pcie-0 {
@@ -632,7 +655,9 @@
			qcom,agg-ports = <1>;
			qcom,qport = <5>;
			qcom,connections = <&slv_qns_pcie_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,bus-dev = <&fab_aggre1_noc>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_xm_qdss_etr: mas-xm-qdss-etr {
@@ -643,6 +668,8 @@
			qcom,qport = <7>;
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_xm_usb3_0: mas-xm-usb3-0 {
@@ -653,6 +680,7 @@
			qcom,qport = <10>;
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,prio = <2>;
		};

		mas_xm_usb3_1: mas-xm-usb3-1 {
@@ -663,6 +691,7 @@
			qcom,qport = <11>;
			qcom,connections = <&slv_qns_a2noc_snoc>;
			qcom,bus-dev = <&fab_aggre2_noc>;
			qcom,prio = <2>;
		};

		mas_qxm_camnoc_hf0_uncomp: mas-qxm-camnoc-hf0-uncomp {
@@ -825,12 +854,12 @@
			qcom,bus-dev = <&fab_gladiator_noc>;
		};

		mas_ipa_core: mas-ipa-core {
		mas_ipa_core_master: mas-ipa-core-master {
			cell-id = <MSM_BUS_MASTER_IPA_CORE>;
			label = "mas-ipa-core";
			qcom,buswidth = <1>;
			label = "mas-ipa-core-master";
			qcom,buswidth = <8>;
			qcom,agg-ports = <1>;
			qcom,connections = <&slv_ipa_core>;
			qcom,connections = <&slv_ipa_core_slave>;
			qcom,bus-dev = <&fab_ipa_virt>;
		};

@@ -853,6 +882,8 @@
				&slv_qns_memnoc_snoc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,bcms = <&bcm_sh3>;
			qcom,ap-owned;
			qcom,prio = <6>;
		};

		mas_qhm_memnoc_cfg: mas-qhm-memnoc-cfg {
@@ -874,6 +905,8 @@
			qcom,connections = <&slv_qns_llcc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,bcms = <&bcm_sh5>;
			qcom,ap-owned;
			qcom,prio = <0>;
		};

		mas_qnm_mnoc_hf: mas-qnm-mnoc-hf {
@@ -884,6 +917,10 @@
			qcom,qport = <4 5>;
			qcom,connections = <&slv_qns_apps_io &slv_qns_llcc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qnm_mnoc_sf: mas-qnm-mnoc-sf {
@@ -895,6 +932,10 @@
			qcom,connections = <&slv_qns_apps_io
				 &slv_qns_llcc &slv_qns_memnoc_snoc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qnm_snoc_gc: mas-qnm-snoc-gc {
@@ -905,6 +946,9 @@
			qcom,qport = <8>;
			qcom,connections = <&slv_qns_llcc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
		};

		mas_qnm_snoc_sf: mas-qnm-snoc-sf {
@@ -915,6 +959,9 @@
			qcom,qport = <9>;
			qcom,connections = <&slv_qns_apps_io &slv_qns_llcc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
		};

		mas_qxm_gpu: mas-qxm-gpu {
@@ -926,7 +973,8 @@
			qcom,connections = <&slv_qns_apps_io
				 &slv_qns_llcc &slv_qns_memnoc_snoc>;
			qcom,bus-dev = <&fab_mem_noc>;
			qcom,bcms = <&bcm_sh4>;
			qcom,ap-owned;
			qcom,prio = <0>;
		};

		mas_qhm_mnoc_cfg: mas-qhm-mnoc-cfg {
@@ -947,6 +995,10 @@
			qcom,connections = <&slv_qns_mem_noc_hf>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm1>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_camnoc_hf1: mas-qxm-camnoc-hf1 {
@@ -958,6 +1010,10 @@
			qcom,connections = <&slv_qns_mem_noc_hf>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm1>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_camnoc_sf: mas-qxm-camnoc-sf {
@@ -969,6 +1025,10 @@
			qcom,connections = <&slv_qns2_mem_noc>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm3>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_mdp0: mas-qxm-mdp0 {
@@ -980,6 +1040,10 @@
			qcom,connections = <&slv_qns_mem_noc_hf>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm1>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_mdp1: mas-qxm-mdp1 {
@@ -991,6 +1055,10 @@
			qcom,connections = <&slv_qns_mem_noc_hf>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm1>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_rot: mas-qxm-rot {
@@ -1002,6 +1070,10 @@
			qcom,connections = <&slv_qns2_mem_noc>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm3>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_venus0: mas-qxm-venus0 {
@@ -1013,6 +1085,10 @@
			qcom,connections = <&slv_qns2_mem_noc>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm3>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_venus1: mas-qxm-venus1 {
@@ -1024,6 +1100,10 @@
			qcom,connections = <&slv_qns2_mem_noc>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm3>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qxm_venus_arm9: mas-qxm-venus-arm9 {
@@ -1035,6 +1115,10 @@
			qcom,connections = <&slv_qns2_mem_noc>;
			qcom,bus-dev = <&fab_mmss_noc>;
			qcom,bcms = <&bcm_mm3>;
			qcom,ap-owned;
			qcom,prio = <0>;
			qcom,forwarding;
			qcom,node-qos-bcms = <7012 0 1>;
		};

		mas_qhm_snoc_cfg: mas-qhm-snoc-cfg {
@@ -1120,6 +1204,8 @@
			qcom,connections = <&slv_qxs_imem &slv_qns_memnoc_gc>;
			qcom,bus-dev = <&fab_system_noc>;
			qcom,bcms = <&bcm_sn4>;
			qcom,ap-owned;
			qcom,prio = <2>;
		};

		mas_alc: mas-alc {
@@ -1687,10 +1773,10 @@
			qcom,bus-dev = <&fab_gladiator_noc>;
		};

		slv_ipa_core:slv-ipa-core {
			cell-id = <MSM_BUS_SLAVE_IPA>;
			label = "slv-ipa-core";
			qcom,buswidth = <1>;
		slv_ipa_core_slave:slv-ipa-core-slave {
			cell-id = <MSM_BUS_SLAVE_IPA_CORE>;
			label = "slv-ipa-core-slave";
			qcom,buswidth = <8>;
			qcom,agg-ports = <1>;
			qcom,bus-dev = <&fab_ipa_virt>;
			qcom,bcms = <&bcm_ip0>;
+147 −29
Original line number Diff line number Diff line
@@ -272,6 +272,9 @@ static int tcs_cmd_gen(struct msm_bus_node_device_type *cur_bcm,
	int ret = 0;
	bool valid = true;

	if (!cmd)
		return ret;

	if (vec_a == 0 && vec_b == 0)
		valid = false;

@@ -670,7 +673,30 @@ int msm_bus_query_gen(struct list_head *query_list,
	return ret;
}

static void bcm_commit_single_req(struct msm_bus_node_device_type *cur_bcm,
					uint64_t vec_a, uint64_t vec_b)
{
	struct msm_bus_node_device_type *cur_rsc = NULL;
	struct rpmh_client *cur_mbox = NULL;
	struct tcs_cmd *cmd_active = NULL;

	if (!cur_bcm->node_info->num_rsc_devs)
		return;

	cmd_active = kzalloc(sizeof(struct tcs_cmd), GFP_KERNEL);

	if (!cmd_active)
		return;

	cur_rsc = to_msm_bus_node(cur_bcm->node_info->rsc_devs[0]);
	cur_mbox = cur_rsc->rscdev->mbox;

	tcs_cmd_gen(cur_bcm, cmd_active, vec_a, vec_b, true);
	rpmh_write_single(cur_mbox, RPMH_ACTIVE_ONLY_STATE,
					cmd_active->addr, cmd_active->data);

	kfree(cmd_active);
}

void *msm_bus_realloc_devmem(struct device *dev, void *p, size_t old_size,
					size_t new_size, gfp_t flags)
@@ -733,29 +759,22 @@ static int msm_bus_disable_node_qos_clk(struct msm_bus_node_device_type *node)

static int msm_bus_enable_node_qos_clk(struct msm_bus_node_device_type *node)
{
	struct msm_bus_node_device_type *bus_node = NULL;
	int i;
	int ret;
	long rounded_rate;

	if (!node || (!to_msm_bus_node(node->node_info->bus_device))) {
		ret = -ENXIO;
		goto exit_enable_node_qos_clk;
	}
	bus_node = to_msm_bus_node(node->node_info->bus_device);

	for (i = 0; i < bus_node->num_node_qos_clks; i++) {
		if (!bus_node->node_qos_clks[i].enable_only_clk) {
	for (i = 0; i < node->num_node_qos_clks; i++) {
		if (!node->node_qos_clks[i].enable_only_clk) {
			rounded_rate =
				clk_round_rate(
					bus_node->node_qos_clks[i].clk, 1);
			ret = setrate_nodeclk(&bus_node->node_qos_clks[i],
					node->node_qos_clks[i].clk, 1);
			ret = setrate_nodeclk(&node->node_qos_clks[i],
								rounded_rate);
			if (ret)
				MSM_BUS_DBG("%s: Failed set rate clk,node %d\n",
					__func__, node->node_info->id);
		}
		ret = enable_nodeclk(&bus_node->node_qos_clks[i],
		ret = enable_nodeclk(&node->node_qos_clks[i],
					node->node_info->bus_device);
		if (ret) {
			MSM_BUS_DBG("%s: Failed to set Qos Clks ret %d\n",
@@ -763,12 +782,85 @@ static int msm_bus_enable_node_qos_clk(struct msm_bus_node_device_type *node)
			msm_bus_disable_node_qos_clk(node);
			goto exit_enable_node_qos_clk;
		}

	}
exit_enable_node_qos_clk:
	return ret;
}

static int msm_bus_vote_qos_bcms(struct msm_bus_node_device_type *node)
{
	struct msm_bus_node_device_type *cur_dev = NULL;
	struct msm_bus_node_device_type *cur_bcm = NULL;
	int i;
	struct device *dev = NULL;

	if (!node || (!to_msm_bus_node(node->node_info->bus_device)))
		return -ENXIO;

	cur_dev = node;

	for (i = 0; i < cur_dev->num_qos_bcms; i++) {
		dev = bus_find_device(&msm_bus_type, NULL,
				(void *) &cur_dev->qos_bcms[i].qos_bcm_id,
					msm_bus_device_match_adhoc);

		if (!dev) {
			MSM_BUS_ERR("Can't find dev node for %d",
					cur_dev->qos_bcms[i].qos_bcm_id);
			return -ENODEV;
		}

		cur_bcm = to_msm_bus_node(dev);
		if (cur_bcm->node_vec[ACTIVE_CTX].vec_a != 0 ||
			cur_bcm->node_vec[ACTIVE_CTX].vec_b != 0 ||
			cur_bcm->node_vec[DUAL_CTX].vec_a != 0 ||
			cur_bcm->node_vec[DUAL_CTX].vec_b != 0)
			return 0;

		bcm_commit_single_req(cur_bcm,
					cur_dev->qos_bcms[i].vec.vec_a,
					cur_dev->qos_bcms[i].vec.vec_b);
	}

	return 0;
}

static int msm_bus_rm_vote_qos_bcms(struct msm_bus_node_device_type *node)
{
	struct msm_bus_node_device_type *cur_dev = NULL;
	struct msm_bus_node_device_type *cur_bcm = NULL;
	int i;
	struct device *dev = NULL;

	if (!node || (!to_msm_bus_node(node->node_info->bus_device)))
		return -ENXIO;

	cur_dev = node;

	for (i = 0; i < cur_dev->num_qos_bcms; i++) {
		dev = bus_find_device(&msm_bus_type, NULL,
				(void *) &cur_dev->qos_bcms[i].qos_bcm_id,
					msm_bus_device_match_adhoc);

		if (!dev) {
			MSM_BUS_ERR("Can't find dev node for %d",
					cur_dev->qos_bcms[i].qos_bcm_id);
			return -ENODEV;
		}

		cur_bcm = to_msm_bus_node(dev);
		if (cur_bcm->node_vec[ACTIVE_CTX].vec_a != 0 ||
			cur_bcm->node_vec[ACTIVE_CTX].vec_b != 0 ||
			cur_bcm->node_vec[DUAL_CTX].vec_a != 0 ||
			cur_bcm->node_vec[DUAL_CTX].vec_b != 0)
			return 0;

		bcm_commit_single_req(cur_bcm, 0, 0);
	}

	return 0;
}

int msm_bus_enable_limiter(struct msm_bus_node_device_type *node_dev,
				int enable, uint64_t lim_bw)
{
@@ -847,12 +939,11 @@ static int msm_bus_dev_init_qos(struct device *dev, void *data)
			bus_node_info->fabdev->noc_ops.qos_init) {
			int ret = 0;

			if (node_dev->ap_owned &&
				(node_dev->node_info->qos_params.mode) != -1) {

			if (node_dev->ap_owned) {
				if (bus_node_info->fabdev->bypass_qos_prg)
					goto exit_init_qos;

				ret = msm_bus_vote_qos_bcms(node_dev);
				ret = msm_bus_enable_node_qos_clk(node_dev);
				if (ret < 0) {
					MSM_BUS_DBG("Can't Enable QoS clk %d\n",
@@ -868,6 +959,7 @@ static int msm_bus_dev_init_qos(struct device *dev, void *data)
					bus_node_info->fabdev->qos_off,
					bus_node_info->fabdev->qos_freq);
				ret = msm_bus_disable_node_qos_clk(node_dev);
				ret = msm_bus_rm_vote_qos_bcms(node_dev);
				node_dev->node_info->defer_qos = false;
			}
		} else
@@ -1136,18 +1228,27 @@ static int msm_bus_copy_node_info(struct msm_bus_node_device_type *pdata,
	node_info->is_fab_dev = pdata_node_info->is_fab_dev;
	node_info->is_bcm_dev = pdata_node_info->is_bcm_dev;
	node_info->is_rsc_dev = pdata_node_info->is_rsc_dev;
	node_info->qos_params.mode = pdata_node_info->qos_params.mode;
	node_info->qos_params.prio1 = pdata_node_info->qos_params.prio1;
	node_info->qos_params.prio0 = pdata_node_info->qos_params.prio0;
	node_info->qos_params.reg_prio1 = pdata_node_info->qos_params.reg_prio1;
	node_info->qos_params.reg_prio0 = pdata_node_info->qos_params.reg_prio0;
	node_info->qos_params.prio_lvl = pdata_node_info->qos_params.prio_lvl;
	node_info->qos_params.prio_rd = pdata_node_info->qos_params.prio_rd;
	node_info->qos_params.prio_wr = pdata_node_info->qos_params.prio_wr;
	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->qos_params.prio_dflt = pdata_node_info->qos_params.prio_dflt;
	node_info->qos_params.limiter.bw =
				pdata_node_info->qos_params.limiter.bw;
	node_info->qos_params.limiter.sat =
				pdata_node_info->qos_params.limiter.sat;
	node_info->qos_params.limiter_en =
				pdata_node_info->qos_params.limiter_en;
	node_info->qos_params.reg.low_prio =
				pdata_node_info->qos_params.reg.low_prio;
	node_info->qos_params.reg.hi_prio =
				pdata_node_info->qos_params.reg.hi_prio;
	node_info->qos_params.reg.bw =
				pdata_node_info->qos_params.reg.bw;
	node_info->qos_params.reg.sat =
				pdata_node_info->qos_params.reg.sat;
	node_info->qos_params.reg_mode.read =
				pdata_node_info->qos_params.reg_mode.read;
	node_info->qos_params.reg_mode.write =
				pdata_node_info->qos_params.reg_mode.write;
	node_info->qos_params.urg_fwd_en =
				pdata_node_info->qos_params.urg_fwd_en;
	node_info->agg_params.buswidth = pdata_node_info->agg_params.buswidth;
	node_info->agg_params.agg_scheme =
					pdata_node_info->agg_params.agg_scheme;
@@ -1299,7 +1400,7 @@ static struct device *msm_bus_device_init(
	struct device *bus_dev = NULL;
	struct msm_bus_node_device_type *bus_node = NULL;
	struct msm_bus_node_info_type *node_info = NULL;
	int ret = 0;
	int ret = 0, i = 0;

	/**
	* Init here so we can use devm calls
@@ -1328,6 +1429,23 @@ static struct device *msm_bus_device_init(
	bus_node->node_info = node_info;
	bus_node->ap_owned = pdata->ap_owned;
	bus_node->dirty = false;
	bus_node->num_qos_bcms = pdata->num_qos_bcms;
	if (bus_node->num_qos_bcms) {
		bus_node->qos_bcms = devm_kzalloc(bus_dev,
					(sizeof(struct qos_bcm_type) *
					bus_node->num_qos_bcms), GFP_KERNEL);
		if (!bus_node->qos_bcms)
			goto exit_device_init;
		for (i = 0; i < bus_node->num_qos_bcms; i++) {
			bus_node->qos_bcms[i].qos_bcm_id =
					pdata->qos_bcms[i].qos_bcm_id;
			bus_node->qos_bcms[i].vec.vec_a =
					pdata->qos_bcms[i].vec.vec_a;
			bus_node->qos_bcms[i].vec.vec_b =
					pdata->qos_bcms[i].vec.vec_b;
		}
	}

	bus_dev->of_node = pdata->of_node;

	if (msm_bus_copy_node_info(pdata, bus_dev) < 0) {
Loading