interconnect changes for 5.7
Here is a pull request with interconnect changes for the 5.7-rc1 merge window. It contains just driver updates, and these are: - Refactoring of the SDM845 driver, which is now improved to better represent the hardware. - New driver for SC7180 platforms. - New driver for OSM L3 interconnect hardware found on SDM845/SC7180 platforms. Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org> -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJedJ1QAAoJEIDQzArG2BZjHboP/2bxPoImL9MBsPY31qn4G8Uf RPHz5pgO0LMygFY+oskbY68H61qQclLkXG/KZ35OnK2vveWZDI3jF2Wims3P7Wjt bErrVzSL9wJGYR8efIamPsTK8OGFePGJgf/dKic63yXTPM/x1E+RGavUOXkW0hyo XNNfAJiC1Q3l+yAc8ZIEQ+Ys+KR93BYRi9IeAmp5/9CvC2UN3ZrlrC6989WZiBSY hHQXdOhcP/n258Nd1nlB2/0zdIar3PbdW0I3mlK7Fhfb04RwiSihQzs6vPJ2mc62 aoMGdtrAVxd9sTPGAw++2eOsLx01aqTVK7N+aHGygD4buoz53XtOUe5j/wB/Pv5+ fMtN3ddCoNAEwxD5hgR7iaAOGsEByl4JFdWOKMIXByiAAUoegIiAVx8Gv1qvT6Ma NZBuBYbgEW0AHLdSqZ1NDVOD6to0+81RICk3433TdHSbG8RMRRhBB66nW2c+c2qs 9pD9SX78ax4AtNSTHbXB3D5NJO5ZkXX1keFErEHKY3psdumTa2mvDZYEcS31gJ7P E0WEZNac9QvvJtoBBhwhGBCHlYnIMK6C/rMrz+GFnoMwnJWgGjHYFSISoC+8RCVr SrHPED+G678JTruYdFOSxHCM3Gv80iSTLdCYPe3VxPLFqyqPO9Lmscl3woZfeoUI KOXOoLB0wOLocNLiUzNX =jHM0 -----END PGP SIGNATURE----- Merge tag 'icc-5.7-rc1' of https://git.linaro.org/people/georgi.djakov/linux into char-misc-next Georgi writes: interconnect changes for 5.7 Here is a pull request with interconnect changes for the 5.7-rc1 merge window. It contains just driver updates, and these are: - Refactoring of the SDM845 driver, which is now improved to better represent the hardware. - New driver for SC7180 platforms. - New driver for OSM L3 interconnect hardware found on SDM845/SC7180 platforms. Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org> * tag 'icc-5.7-rc1' of https://git.linaro.org/people/georgi.djakov/linux: interconnect: qcom: Add OSM L3 support on SC7180 dt-bindings: interconnect: Add OSM L3 DT binding on SC7180 interconnect: qcom: Add OSM L3 interconnect provider support dt-bindings: interconnect: Add OSM L3 DT bindings interconnect: qcom: Allow icc node to be used across icc providers interconnect: qcom: Add SC7180 interconnect provider driver dt-bindings: interconnect: Add Qualcomm SC7180 DT bindings interconnect: qcom: sdm845: Split qnodes into their respective NoCs interconnect: qcom: Consolidate interconnect RPMh support dt-bindings: interconnect: Update Qualcomm SDM845 DT bindings dt-bindings: interconnect: Add YAML schemas for QCOM bcm-voter dt-bindings: interconnect: Convert qcom,sdm845 to DT schema
This commit is contained in:
		
						commit
						c23ff2aa3e
					
				| @ -0,0 +1,45 @@ | ||||
| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | ||||
| %YAML 1.2 | ||||
| --- | ||||
| $id: http://devicetree.org/schemas/interconnect/qcom,bcm-voter.yaml# | ||||
| $schema: http://devicetree.org/meta-schemas/core.yaml# | ||||
| 
 | ||||
| title: Qualcomm BCM-Voter Interconnect | ||||
| 
 | ||||
| maintainers: | ||||
|   - Georgi Djakov <georgi.djakov@linaro.org> | ||||
| 
 | ||||
| description: | | ||||
|   The Bus Clock Manager (BCM) is a dedicated hardware accelerator that manages | ||||
|   shared system resources by aggregating requests from multiple Resource State | ||||
|   Coordinators (RSC). Interconnect providers are able to vote for aggregated | ||||
|   thresholds values from consumers by communicating through their respective | ||||
|   RSCs. | ||||
| 
 | ||||
| properties: | ||||
|   compatible: | ||||
|     enum: | ||||
|       - qcom,bcm-voter | ||||
| 
 | ||||
| required: | ||||
|   - compatible | ||||
| 
 | ||||
| additionalProperties: false | ||||
| 
 | ||||
| examples: | ||||
|   # Example 1: apps bcm_voter on SDM845 SoC should be defined inside &apps_rsc node | ||||
|   # as defined in Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.txt | ||||
|   - | | ||||
| 
 | ||||
|     apps_bcm_voter: bcm_voter { | ||||
|         compatible = "qcom,bcm-voter"; | ||||
|     }; | ||||
| 
 | ||||
|   # Example 2: disp bcm_voter on SDM845 should be defined inside &disp_rsc node | ||||
|   # as defined in Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.txt | ||||
|   - | | ||||
| 
 | ||||
|     disp_bcm_voter: bcm_voter { | ||||
|         compatible = "qcom,bcm-voter"; | ||||
|     }; | ||||
| ... | ||||
| @ -0,0 +1,62 @@ | ||||
| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | ||||
| %YAML 1.2 | ||||
| --- | ||||
| $id: http://devicetree.org/schemas/interconnect/qcom,osm-l3.yaml# | ||||
| $schema: http://devicetree.org/meta-schemas/core.yaml# | ||||
| 
 | ||||
| title: Qualcomm Operating State Manager (OSM) L3 Interconnect Provider | ||||
| 
 | ||||
| maintainers: | ||||
|   - Sibi Sankar <sibis@codeaurora.org> | ||||
| 
 | ||||
| description: | ||||
|   L3 cache bandwidth requirements on Qualcomm SoCs is serviced by the OSM. | ||||
|   The OSM L3 interconnect provider aggregates the L3 bandwidth requests | ||||
|   from CPU/GPU and relays it to the OSM. | ||||
| 
 | ||||
| properties: | ||||
|   compatible: | ||||
|     enum: | ||||
|       - qcom,sc7180-osm-l3 | ||||
|       - qcom,sdm845-osm-l3 | ||||
| 
 | ||||
|   reg: | ||||
|     maxItems: 1 | ||||
| 
 | ||||
|   clocks: | ||||
|     items: | ||||
|       - description: xo clock | ||||
|       - description: alternate clock | ||||
| 
 | ||||
|   clock-names: | ||||
|     items: | ||||
|       - const: xo | ||||
|       - const: alternate | ||||
| 
 | ||||
|   '#interconnect-cells': | ||||
|     const: 1 | ||||
| 
 | ||||
| required: | ||||
|   - compatible | ||||
|   - reg | ||||
|   - clocks | ||||
|   - clock-names | ||||
|   - '#interconnect-cells' | ||||
| 
 | ||||
| additionalProperties: false | ||||
| 
 | ||||
| examples: | ||||
|   - | | ||||
| 
 | ||||
|     #define GPLL0               165 | ||||
|     #define RPMH_CXO_CLK        0 | ||||
| 
 | ||||
|     osm_l3: interconnect@17d41000 { | ||||
|       compatible = "qcom,sdm845-osm-l3"; | ||||
|       reg = <0x17d41000 0x1400>; | ||||
| 
 | ||||
|       clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>; | ||||
|       clock-names = "xo", "alternate"; | ||||
| 
 | ||||
|       #interconnect-cells = <1>; | ||||
|     }; | ||||
| @ -0,0 +1,85 @@ | ||||
| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | ||||
| %YAML 1.2 | ||||
| --- | ||||
| $id: http://devicetree.org/schemas/interconnect/qcom,sc7180.yaml# | ||||
| $schema: http://devicetree.org/meta-schemas/core.yaml# | ||||
| 
 | ||||
| title:  Qualcomm SC7180 Network-On-Chip Interconnect | ||||
| 
 | ||||
| maintainers: | ||||
|   - Odelu Kukatla <okukatla@codeaurora.org> | ||||
| 
 | ||||
| description: | | ||||
|    SC7180 interconnect providers support system bandwidth requirements through | ||||
|    RPMh hardware accelerators known as Bus Clock Manager (BCM). The provider is | ||||
|    able to communicate with the BCM through the Resource State Coordinator (RSC) | ||||
|    associated with each execution environment. Provider nodes must point to at | ||||
|    least one RPMh device child node pertaining to their RSC and each provider | ||||
|    can map to multiple RPMh resources. | ||||
| 
 | ||||
| properties: | ||||
|   reg: | ||||
|     maxItems: 1 | ||||
| 
 | ||||
|   compatible: | ||||
|     enum: | ||||
|       - qcom,sc7180-aggre1-noc | ||||
|       - qcom,sc7180-aggre2-noc | ||||
|       - qcom,sc7180-camnoc-virt | ||||
|       - qcom,sc7180-compute-noc | ||||
|       - qcom,sc7180-config-noc | ||||
|       - qcom,sc7180-dc-noc | ||||
|       - qcom,sc7180-gem-noc | ||||
|       - qcom,sc7180-ipa-virt | ||||
|       - qcom,sc7180-mc-virt | ||||
|       - qcom,sc7180-mmss-noc | ||||
|       - qcom,sc7180-npu-noc | ||||
|       - qcom,sc7180-qup-virt | ||||
|       - qcom,sc7180-system-noc | ||||
| 
 | ||||
|   '#interconnect-cells': | ||||
|     const: 1 | ||||
| 
 | ||||
|   qcom,bcm-voters: | ||||
|     $ref: /schemas/types.yaml#/definitions/phandle-array | ||||
|     description: | | ||||
|       List of phandles to qcom,bcm-voter nodes that are required by | ||||
|       this interconnect to send RPMh commands. | ||||
| 
 | ||||
|   qcom,bcm-voter-names: | ||||
|     $ref: /schemas/types.yaml#/definitions/string-array | ||||
|     description: | | ||||
|       Names for each of the qcom,bcm-voters specified. | ||||
| 
 | ||||
| required: | ||||
|   - compatible | ||||
|   - reg | ||||
|   - '#interconnect-cells' | ||||
|   - qcom,bcm-voters | ||||
| 
 | ||||
| additionalProperties: false | ||||
| 
 | ||||
| examples: | ||||
|   - | | ||||
|       #include <dt-bindings/interconnect/qcom,sc7180.h> | ||||
| 
 | ||||
|       config_noc: interconnect@1500000 { | ||||
|             compatible = "qcom,sc7180-config-noc"; | ||||
|             reg = <0 0x01500000 0 0x28000>; | ||||
|             #interconnect-cells = <1>; | ||||
|             qcom,bcm-voters = <&apps_bcm_voter>; | ||||
|       }; | ||||
| 
 | ||||
|       system_noc: interconnect@1620000 { | ||||
|             compatible = "qcom,sc7180-system-noc"; | ||||
|             reg = <0 0x01620000 0 0x17080>; | ||||
|             #interconnect-cells = <1>; | ||||
|             qcom,bcm-voters = <&apps_bcm_voter>; | ||||
|       }; | ||||
| 
 | ||||
|       mmss_noc: interconnect@1740000 { | ||||
|             compatible = "qcom,sc7180-mmss-noc"; | ||||
|             reg = <0 0x01740000 0 0x1c100>; | ||||
|             #interconnect-cells = <1>; | ||||
|             qcom,bcm-voters = <&apps_bcm_voter>; | ||||
|       }; | ||||
| @ -1,24 +0,0 @@ | ||||
| Qualcomm SDM845 Network-On-Chip interconnect driver binding | ||||
| ----------------------------------------------------------- | ||||
| 
 | ||||
| SDM845 interconnect providers support system bandwidth requirements through | ||||
| RPMh hardware accelerators known as Bus Clock Manager (BCM). The provider is | ||||
| able to communicate with the BCM through the Resource State Coordinator (RSC) | ||||
| associated with each execution environment. Provider nodes must reside within | ||||
| an RPMh device node pertaining to their RSC and each provider maps to a single | ||||
| RPMh resource. | ||||
| 
 | ||||
| Required properties : | ||||
| - compatible : shall contain only one of the following: | ||||
| 			"qcom,sdm845-rsc-hlos" | ||||
| - #interconnect-cells : should contain 1 | ||||
| 
 | ||||
| Examples: | ||||
| 
 | ||||
| apps_rsc: rsc { | ||||
| 	rsc_hlos: interconnect { | ||||
| 		compatible = "qcom,sdm845-rsc-hlos"; | ||||
| 		#interconnect-cells = <1>; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| @ -0,0 +1,74 @@ | ||||
| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | ||||
| %YAML 1.2 | ||||
| --- | ||||
| $id: http://devicetree.org/schemas/interconnect/qcom,sdm845.yaml# | ||||
| $schema: http://devicetree.org/meta-schemas/core.yaml# | ||||
| 
 | ||||
| title:  Qualcomm SDM845 Network-On-Chip Interconnect | ||||
| 
 | ||||
| maintainers: | ||||
|   - Georgi Djakov <georgi.djakov@linaro.org> | ||||
| 
 | ||||
| description: | | ||||
|    SDM845 interconnect providers support system bandwidth requirements through | ||||
|    RPMh hardware accelerators known as Bus Clock Manager (BCM). The provider is | ||||
|    able to communicate with the BCM through the Resource State Coordinator (RSC) | ||||
|    associated with each execution environment. Provider nodes must point to at | ||||
|    least one RPMh device child node pertaining to their RSC and each provider | ||||
|    can map to multiple RPMh resources. | ||||
| 
 | ||||
| properties: | ||||
|   reg: | ||||
|     maxItems: 1 | ||||
| 
 | ||||
|   compatible: | ||||
|     enum: | ||||
|       - qcom,sdm845-aggre1-noc | ||||
|       - qcom,sdm845-aggre2-noc | ||||
|       - qcom,sdm845-config-noc | ||||
|       - qcom,sdm845-dc-noc | ||||
|       - qcom,sdm845-gladiator-noc | ||||
|       - qcom,sdm845-mem-noc | ||||
|       - qcom,sdm845-mmss-noc | ||||
|       - qcom,sdm845-system-noc | ||||
| 
 | ||||
|   '#interconnect-cells': | ||||
|     const: 1 | ||||
| 
 | ||||
|   qcom,bcm-voters: | ||||
|     $ref: /schemas/types.yaml#/definitions/phandle-array | ||||
|     description: | | ||||
|       List of phandles to qcom,bcm-voter nodes that are required by | ||||
|       this interconnect to send RPMh commands. | ||||
| 
 | ||||
|   qcom,bcm-voter-names: | ||||
|     $ref: /schemas/types.yaml#/definitions/string-array | ||||
|     description: | | ||||
|       Names for each of the qcom,bcm-voters specified. | ||||
| 
 | ||||
| required: | ||||
|   - compatible | ||||
|   - reg | ||||
|   - '#interconnect-cells' | ||||
|   - qcom,bcm-voters | ||||
| 
 | ||||
| additionalProperties: false | ||||
| 
 | ||||
| examples: | ||||
|   - | | ||||
|       #include <dt-bindings/interconnect/qcom,sdm845.h> | ||||
| 
 | ||||
|       mem_noc: interconnect@1380000 { | ||||
|              compatible = "qcom,sdm845-mem-noc"; | ||||
|              reg = <0 0x01380000 0 0x27200>; | ||||
|              #interconnect-cells = <1>; | ||||
|              qcom,bcm-voters = <&apps_bcm_voter>; | ||||
|       }; | ||||
| 
 | ||||
|       mmss_noc: interconnect@1740000 { | ||||
|              compatible = "qcom,sdm845-mmss-noc"; | ||||
|              reg = <0 0x01740000 0 0x1c1000>; | ||||
|              #interconnect-cells = <1>; | ||||
|              qcom,bcm-voter-names = "apps", "disp"; | ||||
|              qcom,bcm-voters = <&apps_bcm_voter>, <&disp_bcm_voter>; | ||||
|       }; | ||||
| @ -5,6 +5,9 @@ config INTERCONNECT_QCOM | ||||
| 	help | ||||
| 	  Support for Qualcomm's Network-on-Chip interconnect hardware. | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_BCM_VOTER | ||||
| 	tristate | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_MSM8916 | ||||
| 	tristate "Qualcomm MSM8916 interconnect driver" | ||||
| 	depends on INTERCONNECT_QCOM | ||||
| @ -23,6 +26,13 @@ config INTERCONNECT_QCOM_MSM8974 | ||||
| 	 This is a driver for the Qualcomm Network-on-Chip on msm8974-based | ||||
| 	 platforms. | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_OSM_L3 | ||||
| 	tristate "Qualcomm OSM L3 interconnect driver" | ||||
| 	depends on INTERCONNECT_QCOM || COMPILE_TEST | ||||
| 	help | ||||
| 	  Say y here to support the Operating State Manager (OSM) interconnect | ||||
| 	  driver which controls the scaling of L3 caches on Qualcomm SoCs. | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_QCS404 | ||||
| 	tristate "Qualcomm QCS404 interconnect driver" | ||||
| 	depends on INTERCONNECT_QCOM | ||||
| @ -32,10 +42,25 @@ config INTERCONNECT_QCOM_QCS404 | ||||
| 	  This is a driver for the Qualcomm Network-on-Chip on qcs404-based | ||||
| 	  platforms. | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_RPMH | ||||
| 	tristate | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_SC7180 | ||||
| 	tristate "Qualcomm SC7180 interconnect driver" | ||||
| 	depends on INTERCONNECT_QCOM | ||||
| 	depends on (QCOM_RPMH && QCOM_COMMAND_DB && OF) || COMPILE_TEST | ||||
| 	select INTERCONNECT_QCOM_RPMH | ||||
| 	select INTERCONNECT_QCOM_BCM_VOTER | ||||
| 	help | ||||
| 	  This is a driver for the Qualcomm Network-on-Chip on sc7180-based | ||||
| 	  platforms. | ||||
| 
 | ||||
| config INTERCONNECT_QCOM_SDM845 | ||||
| 	tristate "Qualcomm SDM845 interconnect driver" | ||||
| 	depends on INTERCONNECT_QCOM | ||||
| 	depends on (QCOM_RPMH && QCOM_COMMAND_DB && OF) || COMPILE_TEST | ||||
| 	select INTERCONNECT_QCOM_RPMH | ||||
| 	select INTERCONNECT_QCOM_BCM_VOTER | ||||
| 	help | ||||
| 	  This is a driver for the Qualcomm Network-on-Chip on sdm845-based | ||||
| 	  platforms. | ||||
|  | ||||
| @ -1,13 +1,21 @@ | ||||
| # SPDX-License-Identifier: GPL-2.0
 | ||||
| 
 | ||||
| icc-bcm-voter-objs			:= bcm-voter.o | ||||
| qnoc-msm8916-objs			:= msm8916.o | ||||
| qnoc-msm8974-objs			:= msm8974.o | ||||
| icc-osm-l3-objs				:= osm-l3.o | ||||
| qnoc-qcs404-objs			:= qcs404.o | ||||
| icc-rpmh-obj				:= icc-rpmh.o | ||||
| qnoc-sc7180-objs			:= sc7180.o | ||||
| qnoc-sdm845-objs			:= sdm845.o | ||||
| icc-smd-rpm-objs			:= smd-rpm.o | ||||
| 
 | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_BCM_VOTER) += icc-bcm-voter.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_MSM8916) += qnoc-msm8916.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_MSM8974) += qnoc-msm8974.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_OSM_L3) += icc-osm-l3.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_QCS404) += qnoc-qcs404.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_RPMH) += icc-rpmh.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_SC7180) += qnoc-sc7180.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_SDM845) += qnoc-sdm845.o | ||||
| obj-$(CONFIG_INTERCONNECT_QCOM_SMD_RPM) += icc-smd-rpm.o | ||||
|  | ||||
							
								
								
									
										366
									
								
								drivers/interconnect/qcom/bcm-voter.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										366
									
								
								drivers/interconnect/qcom/bcm-voter.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,366 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #include <asm/div64.h> | ||||
| #include <linux/interconnect-provider.h> | ||||
| #include <linux/list_sort.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/of.h> | ||||
| #include <linux/platform_device.h> | ||||
| 
 | ||||
| #include <soc/qcom/rpmh.h> | ||||
| #include <soc/qcom/tcs.h> | ||||
| 
 | ||||
| #include "bcm-voter.h" | ||||
| #include "icc-rpmh.h" | ||||
| 
 | ||||
| static LIST_HEAD(bcm_voters); | ||||
| static DEFINE_MUTEX(bcm_voter_lock); | ||||
| 
 | ||||
| /**
 | ||||
|  * struct bcm_voter - Bus Clock Manager voter | ||||
|  * @dev: reference to the device that communicates with the BCM | ||||
|  * @np: reference to the device node to match bcm voters | ||||
|  * @lock: mutex to protect commit and wake/sleep lists in the voter | ||||
|  * @commit_list: list containing bcms to be committed to hardware | ||||
|  * @ws_list: list containing bcms that have different wake/sleep votes | ||||
|  * @voter_node: list of bcm voters | ||||
|  */ | ||||
| struct bcm_voter { | ||||
| 	struct device *dev; | ||||
| 	struct device_node *np; | ||||
| 	struct mutex lock; | ||||
| 	struct list_head commit_list; | ||||
| 	struct list_head ws_list; | ||||
| 	struct list_head voter_node; | ||||
| }; | ||||
| 
 | ||||
| static int cmp_vcd(void *priv, struct list_head *a, struct list_head *b) | ||||
| { | ||||
| 	const struct qcom_icc_bcm *bcm_a = | ||||
| 			list_entry(a, struct qcom_icc_bcm, list); | ||||
| 	const struct qcom_icc_bcm *bcm_b = | ||||
| 			list_entry(b, struct qcom_icc_bcm, list); | ||||
| 
 | ||||
| 	if (bcm_a->aux_data.vcd < bcm_b->aux_data.vcd) | ||||
| 		return -1; | ||||
| 	else if (bcm_a->aux_data.vcd == bcm_b->aux_data.vcd) | ||||
| 		return 0; | ||||
| 	else | ||||
| 		return 1; | ||||
| } | ||||
| 
 | ||||
| static void bcm_aggregate(struct qcom_icc_bcm *bcm) | ||||
| { | ||||
| 	size_t i, bucket; | ||||
| 	u64 agg_avg[QCOM_ICC_NUM_BUCKETS] = {0}; | ||||
| 	u64 agg_peak[QCOM_ICC_NUM_BUCKETS] = {0}; | ||||
| 	u64 temp; | ||||
| 
 | ||||
| 	for (bucket = 0; bucket < QCOM_ICC_NUM_BUCKETS; bucket++) { | ||||
| 		for (i = 0; i < bcm->num_nodes; i++) { | ||||
| 			temp = bcm->nodes[i]->sum_avg[bucket] * bcm->aux_data.width; | ||||
| 			do_div(temp, bcm->nodes[i]->buswidth * bcm->nodes[i]->channels); | ||||
| 			agg_avg[bucket] = max(agg_avg[bucket], temp); | ||||
| 
 | ||||
| 			temp = bcm->nodes[i]->max_peak[bucket] * bcm->aux_data.width; | ||||
| 			do_div(temp, bcm->nodes[i]->buswidth); | ||||
| 			agg_peak[bucket] = max(agg_peak[bucket], temp); | ||||
| 		} | ||||
| 
 | ||||
| 		temp = agg_avg[bucket] * 1000ULL; | ||||
| 		do_div(temp, bcm->aux_data.unit); | ||||
| 		bcm->vote_x[bucket] = temp; | ||||
| 
 | ||||
| 		temp = agg_peak[bucket] * 1000ULL; | ||||
| 		do_div(temp, bcm->aux_data.unit); | ||||
| 		bcm->vote_y[bucket] = temp; | ||||
| 	} | ||||
| 
 | ||||
| 	if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 && | ||||
| 	    bcm->vote_y[QCOM_ICC_BUCKET_AMC] == 0) { | ||||
| 		bcm->vote_x[QCOM_ICC_BUCKET_AMC] = 1; | ||||
| 		bcm->vote_x[QCOM_ICC_BUCKET_WAKE] = 1; | ||||
| 		bcm->vote_y[QCOM_ICC_BUCKET_AMC] = 1; | ||||
| 		bcm->vote_y[QCOM_ICC_BUCKET_WAKE] = 1; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static inline void tcs_cmd_gen(struct tcs_cmd *cmd, u64 vote_x, u64 vote_y, | ||||
| 			       u32 addr, bool commit) | ||||
| { | ||||
| 	bool valid = true; | ||||
| 
 | ||||
| 	if (!cmd) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (vote_x == 0 && vote_y == 0) | ||||
| 		valid = false; | ||||
| 
 | ||||
| 	if (vote_x > BCM_TCS_CMD_VOTE_MASK) | ||||
| 		vote_x = BCM_TCS_CMD_VOTE_MASK; | ||||
| 
 | ||||
| 	if (vote_y > BCM_TCS_CMD_VOTE_MASK) | ||||
| 		vote_y = BCM_TCS_CMD_VOTE_MASK; | ||||
| 
 | ||||
| 	cmd->addr = addr; | ||||
| 	cmd->data = BCM_TCS_CMD(commit, valid, vote_x, vote_y); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set the wait for completion flag on command that need to be completed | ||||
| 	 * before the next command. | ||||
| 	 */ | ||||
| 	if (commit) | ||||
| 		cmd->wait = true; | ||||
| } | ||||
| 
 | ||||
| static void tcs_list_gen(struct list_head *bcm_list, int bucket, | ||||
| 			 struct tcs_cmd tcs_list[MAX_BCMS], | ||||
| 			 int n[MAX_VCD + 1]) | ||||
| { | ||||
| 	struct qcom_icc_bcm *bcm; | ||||
| 	bool commit; | ||||
| 	size_t idx = 0, batch = 0, cur_vcd_size = 0; | ||||
| 
 | ||||
| 	memset(n, 0, sizeof(int) * (MAX_VCD + 1)); | ||||
| 
 | ||||
| 	list_for_each_entry(bcm, bcm_list, list) { | ||||
| 		commit = false; | ||||
| 		cur_vcd_size++; | ||||
| 		if ((list_is_last(&bcm->list, bcm_list)) || | ||||
| 		    bcm->aux_data.vcd != list_next_entry(bcm, list)->aux_data.vcd) { | ||||
| 			commit = true; | ||||
| 			cur_vcd_size = 0; | ||||
| 		} | ||||
| 		tcs_cmd_gen(&tcs_list[idx], bcm->vote_x[bucket], | ||||
| 			    bcm->vote_y[bucket], bcm->addr, commit); | ||||
| 		idx++; | ||||
| 		n[batch]++; | ||||
| 		/*
 | ||||
| 		 * Batch the BCMs in such a way that we do not split them in | ||||
| 		 * multiple payloads when they are under the same VCD. This is | ||||
| 		 * to ensure that every BCM is committed since we only set the | ||||
| 		 * commit bit on the last BCM request of every VCD. | ||||
| 		 */ | ||||
| 		if (n[batch] >= MAX_RPMH_PAYLOAD) { | ||||
| 			if (!commit) { | ||||
| 				n[batch] -= cur_vcd_size; | ||||
| 				n[batch + 1] = cur_vcd_size; | ||||
| 			} | ||||
| 			batch++; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * of_bcm_voter_get - gets a bcm voter handle from DT node | ||||
|  * @dev: device pointer for the consumer device | ||||
|  * @name: name for the bcm voter device | ||||
|  * | ||||
|  * This function will match a device_node pointer for the phandle | ||||
|  * specified in the device DT and return a bcm_voter handle on success. | ||||
|  * | ||||
|  * Returns bcm_voter pointer or ERR_PTR() on error. EPROBE_DEFER is returned | ||||
|  * when matching bcm voter is yet to be found. | ||||
|  */ | ||||
| struct bcm_voter *of_bcm_voter_get(struct device *dev, const char *name) | ||||
| { | ||||
| 	struct bcm_voter *voter = ERR_PTR(-EPROBE_DEFER); | ||||
| 	struct bcm_voter *temp; | ||||
| 	struct device_node *np, *node; | ||||
| 	int idx = 0; | ||||
| 
 | ||||
| 	if (!dev || !dev->of_node) | ||||
| 		return ERR_PTR(-ENODEV); | ||||
| 
 | ||||
| 	np = dev->of_node; | ||||
| 
 | ||||
| 	if (name) { | ||||
| 		idx = of_property_match_string(np, "qcom,bcm-voter-names", name); | ||||
| 		if (idx < 0) | ||||
| 			return ERR_PTR(idx); | ||||
| 	} | ||||
| 
 | ||||
| 	node = of_parse_phandle(np, "qcom,bcm-voters", idx); | ||||
| 
 | ||||
| 	mutex_lock(&bcm_voter_lock); | ||||
| 	list_for_each_entry(temp, &bcm_voters, voter_node) { | ||||
| 		if (temp->np == node) { | ||||
| 			voter = temp; | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	mutex_unlock(&bcm_voter_lock); | ||||
| 
 | ||||
| 	return voter; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(of_bcm_voter_get); | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_bcm_voter_add - queues up the bcm nodes that require updates | ||||
|  * @voter: voter that the bcms are being added to | ||||
|  * @bcm: bcm to add to the commit and wake sleep list | ||||
|  */ | ||||
| void qcom_icc_bcm_voter_add(struct bcm_voter *voter, struct qcom_icc_bcm *bcm) | ||||
| { | ||||
| 	if (!voter) | ||||
| 		return; | ||||
| 
 | ||||
| 	mutex_lock(&voter->lock); | ||||
| 	if (list_empty(&bcm->list)) | ||||
| 		list_add_tail(&bcm->list, &voter->commit_list); | ||||
| 
 | ||||
| 	if (list_empty(&bcm->ws_list)) | ||||
| 		list_add_tail(&bcm->ws_list, &voter->ws_list); | ||||
| 
 | ||||
| 	mutex_unlock(&voter->lock); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_bcm_voter_add); | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_bcm_voter_commit - generates and commits tcs cmds based on bcms | ||||
|  * @voter: voter that needs flushing | ||||
|  * | ||||
|  * This function generates a set of AMC commands and flushes to the BCM device | ||||
|  * associated with the voter. It conditionally generate WAKE and SLEEP commands | ||||
|  * based on deltas between WAKE/SLEEP requirements. The ws_list persists | ||||
|  * through multiple commit requests and bcm nodes are removed only when the | ||||
|  * requirements for WAKE matches SLEEP. | ||||
|  * | ||||
|  * Returns 0 on success, or an appropriate error code otherwise. | ||||
|  */ | ||||
| int qcom_icc_bcm_voter_commit(struct bcm_voter *voter) | ||||
| { | ||||
| 	struct qcom_icc_bcm *bcm; | ||||
| 	struct qcom_icc_bcm *bcm_tmp; | ||||
| 	int commit_idx[MAX_VCD + 1]; | ||||
| 	struct tcs_cmd cmds[MAX_BCMS]; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	if (!voter) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	mutex_lock(&voter->lock); | ||||
| 	list_for_each_entry(bcm, &voter->commit_list, list) | ||||
| 		bcm_aggregate(bcm); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Pre sort the BCMs based on VCD for ease of generating a command list | ||||
| 	 * that groups the BCMs with the same VCD together. VCDs are numbered | ||||
| 	 * with lowest being the most expensive time wise, ensuring that | ||||
| 	 * those commands are being sent the earliest in the queue. This needs | ||||
| 	 * to be sorted every commit since we can't guarantee the order in which | ||||
| 	 * the BCMs are added to the list. | ||||
| 	 */ | ||||
| 	list_sort(NULL, &voter->commit_list, cmp_vcd); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Construct the command list based on a pre ordered list of BCMs | ||||
| 	 * based on VCD. | ||||
| 	 */ | ||||
| 	tcs_list_gen(&voter->commit_list, QCOM_ICC_BUCKET_AMC, cmds, commit_idx); | ||||
| 
 | ||||
| 	if (!commit_idx[0]) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	ret = rpmh_invalidate(voter->dev); | ||||
| 	if (ret) { | ||||
| 		pr_err("Error invalidating RPMH client (%d)\n", ret); | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	ret = rpmh_write_batch(voter->dev, RPMH_ACTIVE_ONLY_STATE, | ||||
| 			       cmds, commit_idx); | ||||
| 	if (ret) { | ||||
| 		pr_err("Error sending AMC RPMH requests (%d)\n", ret); | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	list_for_each_entry_safe(bcm, bcm_tmp, &voter->commit_list, list) | ||||
| 		list_del_init(&bcm->list); | ||||
| 
 | ||||
| 	list_for_each_entry_safe(bcm, bcm_tmp, &voter->ws_list, ws_list) { | ||||
| 		/*
 | ||||
| 		 * Only generate WAKE and SLEEP commands if a resource's | ||||
| 		 * requirements change as the execution environment transitions | ||||
| 		 * between different power states. | ||||
| 		 */ | ||||
| 		if (bcm->vote_x[QCOM_ICC_BUCKET_WAKE] != | ||||
| 		    bcm->vote_x[QCOM_ICC_BUCKET_SLEEP] || | ||||
| 		    bcm->vote_y[QCOM_ICC_BUCKET_WAKE] != | ||||
| 		    bcm->vote_y[QCOM_ICC_BUCKET_SLEEP]) | ||||
| 			list_add_tail(&bcm->list, &voter->commit_list); | ||||
| 		else | ||||
| 			list_del_init(&bcm->ws_list); | ||||
| 	} | ||||
| 
 | ||||
| 	if (list_empty(&voter->commit_list)) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	list_sort(NULL, &voter->commit_list, cmp_vcd); | ||||
| 
 | ||||
| 	tcs_list_gen(&voter->commit_list, QCOM_ICC_BUCKET_WAKE, cmds, commit_idx); | ||||
| 
 | ||||
| 	ret = rpmh_write_batch(voter->dev, RPMH_WAKE_ONLY_STATE, cmds, commit_idx); | ||||
| 	if (ret) { | ||||
| 		pr_err("Error sending WAKE RPMH requests (%d)\n", ret); | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	tcs_list_gen(&voter->commit_list, QCOM_ICC_BUCKET_SLEEP, cmds, commit_idx); | ||||
| 
 | ||||
| 	ret = rpmh_write_batch(voter->dev, RPMH_SLEEP_STATE, cmds, commit_idx); | ||||
| 	if (ret) { | ||||
| 		pr_err("Error sending SLEEP RPMH requests (%d)\n", ret); | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| out: | ||||
| 	list_for_each_entry_safe(bcm, bcm_tmp, &voter->commit_list, list) | ||||
| 		list_del_init(&bcm->list); | ||||
| 
 | ||||
| 	mutex_unlock(&voter->lock); | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_bcm_voter_commit); | ||||
| 
 | ||||
| static int qcom_icc_bcm_voter_probe(struct platform_device *pdev) | ||||
| { | ||||
| 	struct bcm_voter *voter; | ||||
| 
 | ||||
| 	voter = devm_kzalloc(&pdev->dev, sizeof(*voter), GFP_KERNEL); | ||||
| 	if (!voter) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	voter->dev = &pdev->dev; | ||||
| 	voter->np = pdev->dev.of_node; | ||||
| 	mutex_init(&voter->lock); | ||||
| 	INIT_LIST_HEAD(&voter->commit_list); | ||||
| 	INIT_LIST_HEAD(&voter->ws_list); | ||||
| 
 | ||||
| 	mutex_lock(&bcm_voter_lock); | ||||
| 	list_add_tail(&voter->voter_node, &bcm_voters); | ||||
| 	mutex_unlock(&bcm_voter_lock); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static const struct of_device_id bcm_voter_of_match[] = { | ||||
| 	{ .compatible = "qcom,bcm-voter" }, | ||||
| 	{ } | ||||
| }; | ||||
| 
 | ||||
| static struct platform_driver qcom_icc_bcm_voter_driver = { | ||||
| 	.probe = qcom_icc_bcm_voter_probe, | ||||
| 	.driver = { | ||||
| 		.name		= "bcm_voter", | ||||
| 		.of_match_table = bcm_voter_of_match, | ||||
| 	}, | ||||
| }; | ||||
| module_platform_driver(qcom_icc_bcm_voter_driver); | ||||
| 
 | ||||
| MODULE_AUTHOR("David Dai <daidavid1@codeaurora.org>"); | ||||
| MODULE_DESCRIPTION("Qualcomm BCM Voter interconnect driver"); | ||||
| MODULE_LICENSE("GPL v2"); | ||||
							
								
								
									
										27
									
								
								drivers/interconnect/qcom/bcm-voter.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								drivers/interconnect/qcom/bcm-voter.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DRIVERS_INTERCONNECT_QCOM_BCM_VOTER_H__ | ||||
| #define __DRIVERS_INTERCONNECT_QCOM_BCM_VOTER_H__ | ||||
| 
 | ||||
| #include <soc/qcom/cmd-db.h> | ||||
| #include <soc/qcom/rpmh.h> | ||||
| #include <soc/qcom/tcs.h> | ||||
| 
 | ||||
| #include "icc-rpmh.h" | ||||
| 
 | ||||
| #define DEFINE_QBCM(_name, _bcmname, _keepalive, ...)			       \ | ||||
| static struct qcom_icc_bcm _name = {					       \ | ||||
| 	.name = _bcmname,						       \ | ||||
| 	.keepalive = _keepalive,					       \ | ||||
| 	.num_nodes = ARRAY_SIZE(((struct qcom_icc_node *[]){ __VA_ARGS__ })),  \ | ||||
| 	.nodes = { __VA_ARGS__ },					       \ | ||||
| } | ||||
| 
 | ||||
| struct bcm_voter *of_bcm_voter_get(struct device *dev, const char *name); | ||||
| void qcom_icc_bcm_voter_add(struct bcm_voter *voter, struct qcom_icc_bcm *bcm); | ||||
| int qcom_icc_bcm_voter_commit(struct bcm_voter *voter); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										150
									
								
								drivers/interconnect/qcom/icc-rpmh.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								drivers/interconnect/qcom/icc-rpmh.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,150 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/interconnect.h> | ||||
| #include <linux/interconnect-provider.h> | ||||
| #include <linux/module.h> | ||||
| 
 | ||||
| #include "bcm-voter.h" | ||||
| #include "icc-rpmh.h" | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_pre_aggregate - cleans up stale values from prior icc_set | ||||
|  * @node: icc node to operate on | ||||
|  */ | ||||
| void qcom_icc_pre_aggregate(struct icc_node *node) | ||||
| { | ||||
| 	size_t i; | ||||
| 	struct qcom_icc_node *qn; | ||||
| 
 | ||||
| 	qn = node->data; | ||||
| 
 | ||||
| 	for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { | ||||
| 		qn->sum_avg[i] = 0; | ||||
| 		qn->max_peak[i] = 0; | ||||
| 	} | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_pre_aggregate); | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_aggregate - aggregate bw for buckets indicated by tag | ||||
|  * @node: node to aggregate | ||||
|  * @tag: tag to indicate which buckets to aggregate | ||||
|  * @avg_bw: new bw to sum aggregate | ||||
|  * @peak_bw: new bw to max aggregate | ||||
|  * @agg_avg: existing aggregate avg bw val | ||||
|  * @agg_peak: existing aggregate peak bw val | ||||
|  */ | ||||
| int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, | ||||
| 		       u32 peak_bw, u32 *agg_avg, u32 *agg_peak) | ||||
| { | ||||
| 	size_t i; | ||||
| 	struct qcom_icc_node *qn; | ||||
| 	struct qcom_icc_provider *qp; | ||||
| 
 | ||||
| 	qn = node->data; | ||||
| 	qp = to_qcom_provider(node->provider); | ||||
| 
 | ||||
| 	if (!tag) | ||||
| 		tag = QCOM_ICC_TAG_ALWAYS; | ||||
| 
 | ||||
| 	for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) { | ||||
| 		if (tag & BIT(i)) { | ||||
| 			qn->sum_avg[i] += avg_bw; | ||||
| 			qn->max_peak[i] = max_t(u32, qn->max_peak[i], peak_bw); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	*agg_avg += avg_bw; | ||||
| 	*agg_peak = max_t(u32, *agg_peak, peak_bw); | ||||
| 
 | ||||
| 	for (i = 0; i < qn->num_bcms; i++) | ||||
| 		qcom_icc_bcm_voter_add(qp->voter, qn->bcms[i]); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_aggregate); | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_set - set the constraints based on path | ||||
|  * @src: source node for the path to set constraints on | ||||
|  * @dst: destination node for the path to set constraints on | ||||
|  * | ||||
|  * Return: 0 on success, or an error code otherwise | ||||
|  */ | ||||
| int qcom_icc_set(struct icc_node *src, struct icc_node *dst) | ||||
| { | ||||
| 	struct qcom_icc_provider *qp; | ||||
| 	struct icc_node *node; | ||||
| 
 | ||||
| 	if (!src) | ||||
| 		node = dst; | ||||
| 	else | ||||
| 		node = src; | ||||
| 
 | ||||
| 	qp = to_qcom_provider(node->provider); | ||||
| 
 | ||||
| 	qcom_icc_bcm_voter_commit(qp->voter); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_set); | ||||
| 
 | ||||
| /**
 | ||||
|  * qcom_icc_bcm_init - populates bcm aux data and connect qnodes | ||||
|  * @bcm: bcm to be initialized | ||||
|  * @dev: associated provider device | ||||
|  * | ||||
|  * Return: 0 on success, or an error code otherwise | ||||
|  */ | ||||
| int qcom_icc_bcm_init(struct qcom_icc_bcm *bcm, struct device *dev) | ||||
| { | ||||
| 	struct qcom_icc_node *qn; | ||||
| 	const struct bcm_db *data; | ||||
| 	size_t data_count; | ||||
| 	int i; | ||||
| 
 | ||||
| 	/* BCM is already initialised*/ | ||||
| 	if (bcm->addr) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	bcm->addr = cmd_db_read_addr(bcm->name); | ||||
| 	if (!bcm->addr) { | ||||
| 		dev_err(dev, "%s could not find RPMh address\n", | ||||
| 			bcm->name); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	data = cmd_db_read_aux_data(bcm->name, &data_count); | ||||
| 	if (IS_ERR(data)) { | ||||
| 		dev_err(dev, "%s command db read error (%ld)\n", | ||||
| 			bcm->name, PTR_ERR(data)); | ||||
| 		return PTR_ERR(data); | ||||
| 	} | ||||
| 	if (!data_count) { | ||||
| 		dev_err(dev, "%s command db missing or partial aux data\n", | ||||
| 			bcm->name); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	bcm->aux_data.unit = le32_to_cpu(data->unit); | ||||
| 	bcm->aux_data.width = le16_to_cpu(data->width); | ||||
| 	bcm->aux_data.vcd = data->vcd; | ||||
| 	bcm->aux_data.reserved = data->reserved; | ||||
| 	INIT_LIST_HEAD(&bcm->list); | ||||
| 	INIT_LIST_HEAD(&bcm->ws_list); | ||||
| 
 | ||||
| 	/* Link Qnodes to their respective BCMs */ | ||||
| 	for (i = 0; i < bcm->num_nodes; i++) { | ||||
| 		qn = bcm->nodes[i]; | ||||
| 		qn->bcms[qn->num_bcms] = bcm; | ||||
| 		qn->num_bcms++; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(qcom_icc_bcm_init); | ||||
| 
 | ||||
| MODULE_LICENSE("GPL v2"); | ||||
							
								
								
									
										149
									
								
								drivers/interconnect/qcom/icc-rpmh.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								drivers/interconnect/qcom/icc-rpmh.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,149 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DRIVERS_INTERCONNECT_QCOM_ICC_RPMH_H__ | ||||
| #define __DRIVERS_INTERCONNECT_QCOM_ICC_RPMH_H__ | ||||
| 
 | ||||
| #define to_qcom_provider(_provider) \ | ||||
| 	container_of(_provider, struct qcom_icc_provider, provider) | ||||
| 
 | ||||
| /**
 | ||||
|  * struct qcom_icc_provider - Qualcomm specific interconnect provider | ||||
|  * @provider: generic interconnect provider | ||||
|  * @dev: reference to the NoC device | ||||
|  * @bcms: list of bcms that maps to the provider | ||||
|  * @num_bcms: number of @bcms | ||||
|  * @voter: bcm voter targeted by this provider | ||||
|  */ | ||||
| struct qcom_icc_provider { | ||||
| 	struct icc_provider provider; | ||||
| 	struct device *dev; | ||||
| 	struct qcom_icc_bcm **bcms; | ||||
| 	size_t num_bcms; | ||||
| 	struct bcm_voter *voter; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * struct bcm_db - Auxiliary data pertaining to each Bus Clock Manager (BCM) | ||||
|  * @unit: divisor used to convert bytes/sec bw value to an RPMh msg | ||||
|  * @width: multiplier used to convert bytes/sec bw value to an RPMh msg | ||||
|  * @vcd: virtual clock domain that this bcm belongs to | ||||
|  * @reserved: reserved field | ||||
|  */ | ||||
| struct bcm_db { | ||||
| 	__le32 unit; | ||||
| 	__le16 width; | ||||
| 	u8 vcd; | ||||
| 	u8 reserved; | ||||
| }; | ||||
| 
 | ||||
| #define MAX_LINKS		128 | ||||
| #define MAX_BCMS		64 | ||||
| #define MAX_BCM_PER_NODE	3 | ||||
| #define MAX_VCD			10 | ||||
| 
 | ||||
| /*
 | ||||
|  * The AMC bucket denotes constraints that are applied to hardware when | ||||
|  * icc_set_bw() completes, whereas the WAKE and SLEEP constraints are applied | ||||
|  * when the execution environment transitions between active and low power mode. | ||||
|  */ | ||||
| #define QCOM_ICC_BUCKET_AMC		0 | ||||
| #define QCOM_ICC_BUCKET_WAKE		1 | ||||
| #define QCOM_ICC_BUCKET_SLEEP		2 | ||||
| #define QCOM_ICC_NUM_BUCKETS		3 | ||||
| #define QCOM_ICC_TAG_AMC		BIT(QCOM_ICC_BUCKET_AMC) | ||||
| #define QCOM_ICC_TAG_WAKE		BIT(QCOM_ICC_BUCKET_WAKE) | ||||
| #define QCOM_ICC_TAG_SLEEP		BIT(QCOM_ICC_BUCKET_SLEEP) | ||||
| #define QCOM_ICC_TAG_ACTIVE_ONLY	(QCOM_ICC_TAG_AMC | QCOM_ICC_TAG_WAKE) | ||||
| #define QCOM_ICC_TAG_ALWAYS		(QCOM_ICC_TAG_AMC | QCOM_ICC_TAG_WAKE |\ | ||||
| 					 QCOM_ICC_TAG_SLEEP) | ||||
| 
 | ||||
| /**
 | ||||
|  * struct qcom_icc_node - Qualcomm specific interconnect nodes | ||||
|  * @name: the node name used in debugfs | ||||
|  * @links: an array of nodes where we can go next while traversing | ||||
|  * @id: a unique node identifier | ||||
|  * @num_links: the total number of @links | ||||
|  * @channels: num of channels at this node | ||||
|  * @buswidth: width of the interconnect between a node and the bus | ||||
|  * @sum_avg: current sum aggregate value of all avg bw requests | ||||
|  * @max_peak: current max aggregate value of all peak bw requests | ||||
|  * @bcms: list of bcms associated with this logical node | ||||
|  * @num_bcms: num of @bcms | ||||
|  */ | ||||
| struct qcom_icc_node { | ||||
| 	const char *name; | ||||
| 	u16 links[MAX_LINKS]; | ||||
| 	u16 id; | ||||
| 	u16 num_links; | ||||
| 	u16 channels; | ||||
| 	u16 buswidth; | ||||
| 	u64 sum_avg[QCOM_ICC_NUM_BUCKETS]; | ||||
| 	u64 max_peak[QCOM_ICC_NUM_BUCKETS]; | ||||
| 	struct qcom_icc_bcm *bcms[MAX_BCM_PER_NODE]; | ||||
| 	size_t num_bcms; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * struct qcom_icc_bcm - Qualcomm specific hardware accelerator nodes | ||||
|  * known as Bus Clock Manager (BCM) | ||||
|  * @name: the bcm node name used to fetch BCM data from command db | ||||
|  * @type: latency or bandwidth bcm | ||||
|  * @addr: address offsets used when voting to RPMH | ||||
|  * @vote_x: aggregated threshold values, represents sum_bw when @type is bw bcm | ||||
|  * @vote_y: aggregated threshold values, represents peak_bw when @type is bw bcm | ||||
|  * @dirty: flag used to indicate whether the bcm needs to be committed | ||||
|  * @keepalive: flag used to indicate whether a keepalive is required | ||||
|  * @aux_data: auxiliary data used when calculating threshold values and | ||||
|  * communicating with RPMh | ||||
|  * @list: used to link to other bcms when compiling lists for commit | ||||
|  * @ws_list: used to keep track of bcms that may transition between wake/sleep | ||||
|  * @num_nodes: total number of @num_nodes | ||||
|  * @nodes: list of qcom_icc_nodes that this BCM encapsulates | ||||
|  */ | ||||
| struct qcom_icc_bcm { | ||||
| 	const char *name; | ||||
| 	u32 type; | ||||
| 	u32 addr; | ||||
| 	u64 vote_x[QCOM_ICC_NUM_BUCKETS]; | ||||
| 	u64 vote_y[QCOM_ICC_NUM_BUCKETS]; | ||||
| 	bool dirty; | ||||
| 	bool keepalive; | ||||
| 	struct bcm_db aux_data; | ||||
| 	struct list_head list; | ||||
| 	struct list_head ws_list; | ||||
| 	size_t num_nodes; | ||||
| 	struct qcom_icc_node *nodes[]; | ||||
| }; | ||||
| 
 | ||||
| struct qcom_icc_fabric { | ||||
| 	struct qcom_icc_node **nodes; | ||||
| 	size_t num_nodes; | ||||
| }; | ||||
| 
 | ||||
| struct qcom_icc_desc { | ||||
| 	struct qcom_icc_node **nodes; | ||||
| 	size_t num_nodes; | ||||
| 	struct qcom_icc_bcm **bcms; | ||||
| 	size_t num_bcms; | ||||
| }; | ||||
| 
 | ||||
| #define DEFINE_QNODE(_name, _id, _channels, _buswidth, ...)		\ | ||||
| 		static struct qcom_icc_node _name = {			\ | ||||
| 		.id = _id,						\ | ||||
| 		.name = #_name,						\ | ||||
| 		.channels = _channels,					\ | ||||
| 		.buswidth = _buswidth,					\ | ||||
| 		.num_links = ARRAY_SIZE(((int[]){ __VA_ARGS__ })),	\ | ||||
| 		.links = { __VA_ARGS__ },				\ | ||||
| 	} | ||||
| 
 | ||||
| int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, | ||||
| 		       u32 peak_bw, u32 *agg_avg, u32 *agg_peak); | ||||
| int qcom_icc_set(struct icc_node *src, struct icc_node *dst); | ||||
| int qcom_icc_bcm_init(struct qcom_icc_bcm *bcm, struct device *dev); | ||||
| void qcom_icc_pre_aggregate(struct icc_node *node); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										276
									
								
								drivers/interconnect/qcom/osm-l3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								drivers/interconnect/qcom/osm-l3.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,276 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/bitfield.h> | ||||
| #include <linux/clk.h> | ||||
| #include <linux/interconnect-provider.h> | ||||
| #include <linux/io.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/of_device.h> | ||||
| #include <linux/platform_device.h> | ||||
| 
 | ||||
| #include <dt-bindings/interconnect/qcom,osm-l3.h> | ||||
| 
 | ||||
| #include "sc7180.h" | ||||
| #include "sdm845.h" | ||||
| 
 | ||||
| #define LUT_MAX_ENTRIES			40U | ||||
| #define LUT_SRC				GENMASK(31, 30) | ||||
| #define LUT_L_VAL			GENMASK(7, 0) | ||||
| #define LUT_ROW_SIZE			32 | ||||
| #define CLK_HW_DIV			2 | ||||
| 
 | ||||
| /* Register offsets */ | ||||
| #define REG_ENABLE			0x0 | ||||
| #define REG_FREQ_LUT			0x110 | ||||
| #define REG_PERF_STATE			0x920 | ||||
| 
 | ||||
| #define OSM_L3_MAX_LINKS		1 | ||||
| 
 | ||||
| #define to_qcom_provider(_provider) \ | ||||
| 	container_of(_provider, struct qcom_osm_l3_icc_provider, provider) | ||||
| 
 | ||||
| struct qcom_osm_l3_icc_provider { | ||||
| 	void __iomem *base; | ||||
| 	unsigned int max_state; | ||||
| 	unsigned long lut_tables[LUT_MAX_ENTRIES]; | ||||
| 	struct icc_provider provider; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * struct qcom_icc_node - Qualcomm specific interconnect nodes | ||||
|  * @name: the node name used in debugfs | ||||
|  * @links: an array of nodes where we can go next while traversing | ||||
|  * @id: a unique node identifier | ||||
|  * @num_links: the total number of @links | ||||
|  * @buswidth: width of the interconnect between a node and the bus | ||||
|  */ | ||||
| struct qcom_icc_node { | ||||
| 	const char *name; | ||||
| 	u16 links[OSM_L3_MAX_LINKS]; | ||||
| 	u16 id; | ||||
| 	u16 num_links; | ||||
| 	u16 buswidth; | ||||
| }; | ||||
| 
 | ||||
| struct qcom_icc_desc { | ||||
| 	struct qcom_icc_node **nodes; | ||||
| 	size_t num_nodes; | ||||
| }; | ||||
| 
 | ||||
| #define DEFINE_QNODE(_name, _id, _buswidth, ...)			\ | ||||
| 		static struct qcom_icc_node _name = {			\ | ||||
| 		.name = #_name,						\ | ||||
| 		.id = _id,						\ | ||||
| 		.buswidth = _buswidth,					\ | ||||
| 		.num_links = ARRAY_SIZE(((int[]){ __VA_ARGS__ })),	\ | ||||
| 		.links = { __VA_ARGS__ },				\ | ||||
| 	} | ||||
| 
 | ||||
| DEFINE_QNODE(sdm845_osm_apps_l3, SDM845_MASTER_OSM_L3_APPS, 16, SDM845_SLAVE_OSM_L3); | ||||
| DEFINE_QNODE(sdm845_osm_l3, SDM845_SLAVE_OSM_L3, 16); | ||||
| 
 | ||||
| static struct qcom_icc_node *sdm845_osm_l3_nodes[] = { | ||||
| 	[MASTER_OSM_L3_APPS] = &sdm845_osm_apps_l3, | ||||
| 	[SLAVE_OSM_L3] = &sdm845_osm_l3, | ||||
| }; | ||||
| 
 | ||||
| const static struct qcom_icc_desc sdm845_icc_osm_l3 = { | ||||
| 	.nodes = sdm845_osm_l3_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(sdm845_osm_l3_nodes), | ||||
| }; | ||||
| 
 | ||||
| DEFINE_QNODE(sc7180_osm_apps_l3, SC7180_MASTER_OSM_L3_APPS, 16, SC7180_SLAVE_OSM_L3); | ||||
| DEFINE_QNODE(sc7180_osm_l3, SC7180_SLAVE_OSM_L3, 16); | ||||
| 
 | ||||
| static struct qcom_icc_node *sc7180_osm_l3_nodes[] = { | ||||
| 	[MASTER_OSM_L3_APPS] = &sc7180_osm_apps_l3, | ||||
| 	[SLAVE_OSM_L3] = &sc7180_osm_l3, | ||||
| }; | ||||
| 
 | ||||
| const static struct qcom_icc_desc sc7180_icc_osm_l3 = { | ||||
| 	.nodes = sc7180_osm_l3_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(sc7180_osm_l3_nodes), | ||||
| }; | ||||
| 
 | ||||
| static int qcom_icc_set(struct icc_node *src, struct icc_node *dst) | ||||
| { | ||||
| 	struct qcom_osm_l3_icc_provider *qp; | ||||
| 	struct icc_provider *provider; | ||||
| 	struct qcom_icc_node *qn; | ||||
| 	struct icc_node *n; | ||||
| 	unsigned int index; | ||||
| 	u32 agg_peak = 0; | ||||
| 	u32 agg_avg = 0; | ||||
| 	u64 rate; | ||||
| 
 | ||||
| 	qn = src->data; | ||||
| 	provider = src->provider; | ||||
| 	qp = to_qcom_provider(provider); | ||||
| 
 | ||||
| 	list_for_each_entry(n, &provider->nodes, node_list) | ||||
| 		provider->aggregate(n, 0, n->avg_bw, n->peak_bw, | ||||
| 				    &agg_avg, &agg_peak); | ||||
| 
 | ||||
| 	rate = max(agg_avg, agg_peak); | ||||
| 	rate = icc_units_to_bps(rate); | ||||
| 	do_div(rate, qn->buswidth); | ||||
| 
 | ||||
| 	for (index = 0; index < qp->max_state - 1; index++) { | ||||
| 		if (qp->lut_tables[index] >= rate) | ||||
| 			break; | ||||
| 	} | ||||
| 
 | ||||
| 	writel_relaxed(index, qp->base + REG_PERF_STATE); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int qcom_osm_l3_remove(struct platform_device *pdev) | ||||
| { | ||||
| 	struct qcom_osm_l3_icc_provider *qp = platform_get_drvdata(pdev); | ||||
| 
 | ||||
| 	icc_nodes_remove(&qp->provider); | ||||
| 	return icc_provider_del(&qp->provider); | ||||
| } | ||||
| 
 | ||||
| static int qcom_osm_l3_probe(struct platform_device *pdev) | ||||
| { | ||||
| 	u32 info, src, lval, i, prev_freq = 0, freq; | ||||
| 	static unsigned long hw_rate, xo_rate; | ||||
| 	struct qcom_osm_l3_icc_provider *qp; | ||||
| 	const struct qcom_icc_desc *desc; | ||||
| 	struct icc_onecell_data *data; | ||||
| 	struct icc_provider *provider; | ||||
| 	struct qcom_icc_node **qnodes; | ||||
| 	struct icc_node *node; | ||||
| 	size_t num_nodes; | ||||
| 	struct clk *clk; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	clk = clk_get(&pdev->dev, "xo"); | ||||
| 	if (IS_ERR(clk)) | ||||
| 		return PTR_ERR(clk); | ||||
| 
 | ||||
| 	xo_rate = clk_get_rate(clk); | ||||
| 	clk_put(clk); | ||||
| 
 | ||||
| 	clk = clk_get(&pdev->dev, "alternate"); | ||||
| 	if (IS_ERR(clk)) | ||||
| 		return PTR_ERR(clk); | ||||
| 
 | ||||
| 	hw_rate = clk_get_rate(clk) / CLK_HW_DIV; | ||||
| 	clk_put(clk); | ||||
| 
 | ||||
| 	qp = devm_kzalloc(&pdev->dev, sizeof(*qp), GFP_KERNEL); | ||||
| 	if (!qp) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	qp->base = devm_platform_ioremap_resource(pdev, 0); | ||||
| 	if (IS_ERR(qp->base)) | ||||
| 		return PTR_ERR(qp->base); | ||||
| 
 | ||||
| 	/* HW should be in enabled state to proceed */ | ||||
| 	if (!(readl_relaxed(qp->base + REG_ENABLE) & 0x1)) { | ||||
| 		dev_err(&pdev->dev, "error hardware not enabled\n"); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 
 | ||||
| 	for (i = 0; i < LUT_MAX_ENTRIES; i++) { | ||||
| 		info = readl_relaxed(qp->base + REG_FREQ_LUT + | ||||
| 				     i * LUT_ROW_SIZE); | ||||
| 		src = FIELD_GET(LUT_SRC, info); | ||||
| 		lval = FIELD_GET(LUT_L_VAL, info); | ||||
| 		if (src) | ||||
| 			freq = xo_rate * lval; | ||||
| 		else | ||||
| 			freq = hw_rate; | ||||
| 
 | ||||
| 		/* Two of the same frequencies signify end of table */ | ||||
| 		if (i > 0 && prev_freq == freq) | ||||
| 			break; | ||||
| 
 | ||||
| 		dev_dbg(&pdev->dev, "index=%d freq=%d\n", i, freq); | ||||
| 
 | ||||
| 		qp->lut_tables[i] = freq; | ||||
| 		prev_freq = freq; | ||||
| 	} | ||||
| 	qp->max_state = i; | ||||
| 
 | ||||
| 	desc = device_get_match_data(&pdev->dev); | ||||
| 	if (!desc) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	qnodes = desc->nodes; | ||||
| 	num_nodes = desc->num_nodes; | ||||
| 
 | ||||
| 	data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL); | ||||
| 	if (!data) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	provider = &qp->provider; | ||||
| 	provider->dev = &pdev->dev; | ||||
| 	provider->set = qcom_icc_set; | ||||
| 	provider->aggregate = icc_std_aggregate; | ||||
| 	provider->xlate = of_icc_xlate_onecell; | ||||
| 	INIT_LIST_HEAD(&provider->nodes); | ||||
| 	provider->data = data; | ||||
| 
 | ||||
| 	ret = icc_provider_add(provider); | ||||
| 	if (ret) { | ||||
| 		dev_err(&pdev->dev, "error adding interconnect provider\n"); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	for (i = 0; i < num_nodes; i++) { | ||||
| 		size_t j; | ||||
| 
 | ||||
| 		node = icc_node_create(qnodes[i]->id); | ||||
| 		if (IS_ERR(node)) { | ||||
| 			ret = PTR_ERR(node); | ||||
| 			goto err; | ||||
| 		} | ||||
| 
 | ||||
| 		node->name = qnodes[i]->name; | ||||
| 		node->data = qnodes[i]; | ||||
| 		icc_node_add(node, provider); | ||||
| 
 | ||||
| 		for (j = 0; j < qnodes[i]->num_links; j++) | ||||
| 			icc_link_create(node, qnodes[i]->links[j]); | ||||
| 
 | ||||
| 		data->nodes[i] = node; | ||||
| 	} | ||||
| 	data->num_nodes = num_nodes; | ||||
| 
 | ||||
| 	platform_set_drvdata(pdev, qp); | ||||
| 
 | ||||
| 	return 0; | ||||
| err: | ||||
| 	icc_nodes_remove(provider); | ||||
| 	icc_provider_del(provider); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static const struct of_device_id osm_l3_of_match[] = { | ||||
| 	{ .compatible = "qcom,sc7180-osm-l3", .data = &sc7180_icc_osm_l3 }, | ||||
| 	{ .compatible = "qcom,sdm845-osm-l3", .data = &sdm845_icc_osm_l3 }, | ||||
| 	{ } | ||||
| }; | ||||
| MODULE_DEVICE_TABLE(of, osm_l3_of_match); | ||||
| 
 | ||||
| static struct platform_driver osm_l3_driver = { | ||||
| 	.probe = qcom_osm_l3_probe, | ||||
| 	.remove = qcom_osm_l3_remove, | ||||
| 	.driver = { | ||||
| 		.name = "osm-l3", | ||||
| 		.of_match_table = osm_l3_of_match, | ||||
| 	}, | ||||
| }; | ||||
| module_platform_driver(osm_l3_driver); | ||||
| 
 | ||||
| MODULE_DESCRIPTION("Qualcomm OSM L3 interconnect driver"); | ||||
| MODULE_LICENSE("GPL v2"); | ||||
							
								
								
									
										641
									
								
								drivers/interconnect/qcom/sc7180.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										641
									
								
								drivers/interconnect/qcom/sc7180.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,641 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/device.h> | ||||
| #include <linux/interconnect.h> | ||||
| #include <linux/interconnect-provider.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/of_platform.h> | ||||
| #include <dt-bindings/interconnect/qcom,sc7180.h> | ||||
| 
 | ||||
| #include "bcm-voter.h" | ||||
| #include "icc-rpmh.h" | ||||
| #include "sc7180.h" | ||||
| 
 | ||||
| DEFINE_QNODE(qhm_a1noc_cfg, SC7180_MASTER_A1NOC_CFG, 1, 4, SC7180_SLAVE_SERVICE_A1NOC); | ||||
| DEFINE_QNODE(qhm_qspi, SC7180_MASTER_QSPI, 1, 4, SC7180_SLAVE_A1NOC_SNOC); | ||||
| DEFINE_QNODE(qhm_qup_0, SC7180_MASTER_QUP_0, 1, 4, SC7180_SLAVE_A1NOC_SNOC); | ||||
| DEFINE_QNODE(xm_sdc2, SC7180_MASTER_SDCC_2, 1, 8, SC7180_SLAVE_A1NOC_SNOC); | ||||
| DEFINE_QNODE(xm_emmc, SC7180_MASTER_EMMC, 1, 8, SC7180_SLAVE_A1NOC_SNOC); | ||||
| DEFINE_QNODE(xm_ufs_mem, SC7180_MASTER_UFS_MEM, 1, 8, SC7180_SLAVE_A1NOC_SNOC); | ||||
| DEFINE_QNODE(qhm_a2noc_cfg, SC7180_MASTER_A2NOC_CFG, 1, 4, SC7180_SLAVE_SERVICE_A2NOC); | ||||
| DEFINE_QNODE(qhm_qdss_bam, SC7180_MASTER_QDSS_BAM, 1, 4, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(qhm_qup_1, SC7180_MASTER_QUP_1, 1, 4, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(qxm_crypto, SC7180_MASTER_CRYPTO, 1, 8, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(qxm_ipa, SC7180_MASTER_IPA, 1, 8, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(xm_qdss_etr, SC7180_MASTER_QDSS_ETR, 1, 8, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(qhm_usb3, SC7180_MASTER_USB3, 1, 8, SC7180_SLAVE_A2NOC_SNOC); | ||||
| DEFINE_QNODE(qxm_camnoc_hf0_uncomp, SC7180_MASTER_CAMNOC_HF0_UNCOMP, 1, 32, SC7180_SLAVE_CAMNOC_UNCOMP); | ||||
| DEFINE_QNODE(qxm_camnoc_hf1_uncomp, SC7180_MASTER_CAMNOC_HF1_UNCOMP, 1, 32, SC7180_SLAVE_CAMNOC_UNCOMP); | ||||
| DEFINE_QNODE(qxm_camnoc_sf_uncomp, SC7180_MASTER_CAMNOC_SF_UNCOMP, 1, 32, SC7180_SLAVE_CAMNOC_UNCOMP); | ||||
| DEFINE_QNODE(qnm_npu, SC7180_MASTER_NPU, 2, 32, SC7180_SLAVE_CDSP_GEM_NOC); | ||||
| DEFINE_QNODE(qxm_npu_dsp, SC7180_MASTER_NPU_PROC, 1, 8, SC7180_SLAVE_CDSP_GEM_NOC); | ||||
| DEFINE_QNODE(qnm_snoc, SC7180_MASTER_SNOC_CNOC, 1, 8, SC7180_SLAVE_A1NOC_CFG, SC7180_SLAVE_A2NOC_CFG, SC7180_SLAVE_AHB2PHY_SOUTH, SC7180_SLAVE_AHB2PHY_CENTER, SC7180_SLAVE_AOP, SC7180_SLAVE_AOSS, SC7180_SLAVE_BOOT_ROM, SC7180_SLAVE_CAMERA_CFG, SC7180_SLAVE_CAMERA_NRT_THROTTLE_CFG, SC7180_SLAVE_CAMERA_RT_THROTTLE_CFG, SC7180_SLAVE_CLK_CTL, SC7180_SLAVE_RBCPR_CX_CFG, SC7180_SLAVE_RBCPR_MX_CFG, SC7180_SLAVE_CRYPTO_0_CFG, SC7180_SLAVE_DCC_CFG, SC7180_SLAVE_CNOC_DDRSS, SC7180_SLAVE_DISPLAY_CFG, SC7180_SLAVE_DISPLAY_RT_THROTTLE_CFG, SC7180_SLAVE_DISPLAY_THROTTLE_CFG, SC7180_SLAVE_EMMC_CFG, SC7180_SLAVE_GLM, | ||||
| 		SC7180_SLAVE_GFX3D_CFG, SC7180_SLAVE_IMEM_CFG, SC7180_SLAVE_IPA_CFG, SC7180_SLAVE_CNOC_MNOC_CFG, SC7180_SLAVE_CNOC_MSS, SC7180_SLAVE_NPU_CFG, SC7180_SLAVE_NPU_DMA_BWMON_CFG, SC7180_SLAVE_NPU_PROC_BWMON_CFG, SC7180_SLAVE_PDM, SC7180_SLAVE_PIMEM_CFG, SC7180_SLAVE_PRNG, SC7180_SLAVE_QDSS_CFG, SC7180_SLAVE_QM_CFG, SC7180_SLAVE_QM_MPU_CFG, SC7180_SLAVE_QSPI_0, SC7180_SLAVE_QUP_0, SC7180_SLAVE_QUP_1, SC7180_SLAVE_SDCC_2, SC7180_SLAVE_SECURITY, SC7180_SLAVE_SNOC_CFG, SC7180_SLAVE_TCSR, SC7180_SLAVE_TLMM_WEST, SC7180_SLAVE_TLMM_NORTH, SC7180_SLAVE_TLMM_SOUTH, SC7180_SLAVE_UFS_MEM_CFG, SC7180_SLAVE_USB3, SC7180_SLAVE_VENUS_CFG, SC7180_SLAVE_VENUS_THROTTLE_CFG, SC7180_SLAVE_VSENSE_CTRL_CFG, SC7180_SLAVE_SERVICE_CNOC); | ||||
| DEFINE_QNODE(xm_qdss_dap, SC7180_MASTER_QDSS_DAP, 1, 8, SC7180_SLAVE_A1NOC_CFG, SC7180_SLAVE_A2NOC_CFG, SC7180_SLAVE_AHB2PHY_SOUTH, SC7180_SLAVE_AHB2PHY_CENTER, SC7180_SLAVE_AOP, SC7180_SLAVE_AOSS, SC7180_SLAVE_BOOT_ROM, SC7180_SLAVE_CAMERA_CFG, SC7180_SLAVE_CAMERA_NRT_THROTTLE_CFG, SC7180_SLAVE_CAMERA_RT_THROTTLE_CFG, SC7180_SLAVE_CLK_CTL, SC7180_SLAVE_RBCPR_CX_CFG, SC7180_SLAVE_RBCPR_MX_CFG, SC7180_SLAVE_CRYPTO_0_CFG, SC7180_SLAVE_DCC_CFG, SC7180_SLAVE_CNOC_DDRSS, SC7180_SLAVE_DISPLAY_CFG, SC7180_SLAVE_DISPLAY_RT_THROTTLE_CFG, SC7180_SLAVE_DISPLAY_THROTTLE_CFG, SC7180_SLAVE_EMMC_CFG, SC7180_SLAVE_GLM, SC7180_SLAVE_GFX3D_CFG, SC7180_SLAVE_IMEM_CFG, SC7180_SLAVE_IPA_CFG, SC7180_SLAVE_CNOC_MNOC_CFG, SC7180_SLAVE_CNOC_MSS, SC7180_SLAVE_NPU_CFG, SC7180_SLAVE_NPU_DMA_BWMON_CFG, | ||||
| SC7180_SLAVE_NPU_PROC_BWMON_CFG, SC7180_SLAVE_PDM, SC7180_SLAVE_PIMEM_CFG, SC7180_SLAVE_PRNG, SC7180_SLAVE_QDSS_CFG, SC7180_SLAVE_QM_CFG, SC7180_SLAVE_QM_MPU_CFG, SC7180_SLAVE_QSPI_0, SC7180_SLAVE_QUP_0, SC7180_SLAVE_QUP_1, SC7180_SLAVE_SDCC_2, SC7180_SLAVE_SECURITY, SC7180_SLAVE_SNOC_CFG, SC7180_SLAVE_TCSR, SC7180_SLAVE_TLMM_WEST, SC7180_SLAVE_TLMM_NORTH, SC7180_SLAVE_TLMM_SOUTH, SC7180_SLAVE_UFS_MEM_CFG, SC7180_SLAVE_USB3, SC7180_SLAVE_VENUS_CFG, SC7180_SLAVE_VENUS_THROTTLE_CFG, SC7180_SLAVE_VSENSE_CTRL_CFG, SC7180_SLAVE_SERVICE_CNOC); | ||||
| DEFINE_QNODE(qhm_cnoc_dc_noc, SC7180_MASTER_CNOC_DC_NOC, 1, 4, SC7180_SLAVE_GEM_NOC_CFG, SC7180_SLAVE_LLCC_CFG); | ||||
| DEFINE_QNODE(acm_apps0, SC7180_MASTER_APPSS_PROC, 1, 16, SC7180_SLAVE_GEM_NOC_SNOC, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(acm_sys_tcu, SC7180_MASTER_SYS_TCU, 1, 8, SC7180_SLAVE_GEM_NOC_SNOC, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qhm_gemnoc_cfg, SC7180_MASTER_GEM_NOC_CFG, 1, 4, SC7180_SLAVE_MSS_PROC_MS_MPU_CFG, SC7180_SLAVE_SERVICE_GEM_NOC); | ||||
| DEFINE_QNODE(qnm_cmpnoc, SC7180_MASTER_COMPUTE_NOC, 1, 32, SC7180_SLAVE_GEM_NOC_SNOC, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qnm_mnoc_hf, SC7180_MASTER_MNOC_HF_MEM_NOC, 1, 32, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qnm_mnoc_sf, SC7180_MASTER_MNOC_SF_MEM_NOC, 1, 32, SC7180_SLAVE_GEM_NOC_SNOC, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qnm_snoc_gc, SC7180_MASTER_SNOC_GC_MEM_NOC, 1, 8, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qnm_snoc_sf, SC7180_MASTER_SNOC_SF_MEM_NOC, 1, 16, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(qxm_gpu, SC7180_MASTER_GFX3D, 2, 32, SC7180_SLAVE_GEM_NOC_SNOC, SC7180_SLAVE_LLCC); | ||||
| DEFINE_QNODE(ipa_core_master, SC7180_MASTER_IPA_CORE, 1, 8, SC7180_SLAVE_IPA_CORE); | ||||
| DEFINE_QNODE(llcc_mc, SC7180_MASTER_LLCC, 2, 4, SC7180_SLAVE_EBI1); | ||||
| DEFINE_QNODE(qhm_mnoc_cfg, SC7180_MASTER_CNOC_MNOC_CFG, 1, 4, SC7180_SLAVE_SERVICE_MNOC); | ||||
| DEFINE_QNODE(qxm_camnoc_hf0, SC7180_MASTER_CAMNOC_HF0, 2, 32, SC7180_SLAVE_MNOC_HF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_camnoc_hf1, SC7180_MASTER_CAMNOC_HF1, 2, 32, SC7180_SLAVE_MNOC_HF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_camnoc_sf, SC7180_MASTER_CAMNOC_SF, 1, 32, SC7180_SLAVE_MNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_mdp0, SC7180_MASTER_MDP0, 1, 32, SC7180_SLAVE_MNOC_HF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_rot, SC7180_MASTER_ROTATOR, 1, 16, SC7180_SLAVE_MNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_venus0, SC7180_MASTER_VIDEO_P0, 1, 32, SC7180_SLAVE_MNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(qxm_venus_arm9, SC7180_MASTER_VIDEO_PROC, 1, 8, SC7180_SLAVE_MNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(amm_npu_sys, SC7180_MASTER_NPU_SYS, 2, 32, SC7180_SLAVE_NPU_COMPUTE_NOC); | ||||
| DEFINE_QNODE(qhm_npu_cfg, SC7180_MASTER_NPU_NOC_CFG, 1, 4, SC7180_SLAVE_NPU_CAL_DP0, SC7180_SLAVE_NPU_CP, SC7180_SLAVE_NPU_INT_DMA_BWMON_CFG, SC7180_SLAVE_NPU_DPM, SC7180_SLAVE_ISENSE_CFG, SC7180_SLAVE_NPU_LLM_CFG, SC7180_SLAVE_NPU_TCM, SC7180_SLAVE_SERVICE_NPU_NOC); | ||||
| DEFINE_QNODE(qup_core_master_1, SC7180_MASTER_QUP_CORE_0, 1, 4, SC7180_SLAVE_QUP_CORE_0); | ||||
| DEFINE_QNODE(qup_core_master_2, SC7180_MASTER_QUP_CORE_1, 1, 4, SC7180_SLAVE_QUP_CORE_1); | ||||
| DEFINE_QNODE(qhm_snoc_cfg, SC7180_MASTER_SNOC_CFG, 1, 4, SC7180_SLAVE_SERVICE_SNOC); | ||||
| DEFINE_QNODE(qnm_aggre1_noc, SC7180_MASTER_A1NOC_SNOC, 1, 16, SC7180_SLAVE_APPSS, SC7180_SLAVE_SNOC_CNOC, SC7180_SLAVE_SNOC_GEM_NOC_SF, SC7180_SLAVE_IMEM, SC7180_SLAVE_PIMEM, SC7180_SLAVE_QDSS_STM); | ||||
| DEFINE_QNODE(qnm_aggre2_noc, SC7180_MASTER_A2NOC_SNOC, 1, 16, SC7180_SLAVE_APPSS, SC7180_SLAVE_SNOC_CNOC, SC7180_SLAVE_SNOC_GEM_NOC_SF, SC7180_SLAVE_IMEM, SC7180_SLAVE_PIMEM, SC7180_SLAVE_QDSS_STM, SC7180_SLAVE_TCU); | ||||
| DEFINE_QNODE(qnm_gemnoc, SC7180_MASTER_GEM_NOC_SNOC, 1, 8, SC7180_SLAVE_APPSS, SC7180_SLAVE_SNOC_CNOC, SC7180_SLAVE_IMEM, SC7180_SLAVE_PIMEM, SC7180_SLAVE_QDSS_STM, SC7180_SLAVE_TCU); | ||||
| DEFINE_QNODE(qxm_pimem, SC7180_MASTER_PIMEM, 1, 8, SC7180_SLAVE_SNOC_GEM_NOC_GC, SC7180_SLAVE_IMEM); | ||||
| DEFINE_QNODE(qns_a1noc_snoc, SC7180_SLAVE_A1NOC_SNOC, 1, 16, SC7180_MASTER_A1NOC_SNOC); | ||||
| DEFINE_QNODE(srvc_aggre1_noc, SC7180_SLAVE_SERVICE_A1NOC, 1, 4); | ||||
| DEFINE_QNODE(qns_a2noc_snoc, SC7180_SLAVE_A2NOC_SNOC, 1, 16, SC7180_MASTER_A2NOC_SNOC); | ||||
| DEFINE_QNODE(srvc_aggre2_noc, SC7180_SLAVE_SERVICE_A2NOC, 1, 4); | ||||
| DEFINE_QNODE(qns_camnoc_uncomp, SC7180_SLAVE_CAMNOC_UNCOMP, 1, 32); | ||||
| DEFINE_QNODE(qns_cdsp_gemnoc, SC7180_SLAVE_CDSP_GEM_NOC, 1, 32, SC7180_MASTER_COMPUTE_NOC); | ||||
| DEFINE_QNODE(qhs_a1_noc_cfg, SC7180_SLAVE_A1NOC_CFG, 1, 4, SC7180_MASTER_A1NOC_CFG); | ||||
| DEFINE_QNODE(qhs_a2_noc_cfg, SC7180_SLAVE_A2NOC_CFG, 1, 4, SC7180_MASTER_A2NOC_CFG); | ||||
| DEFINE_QNODE(qhs_ahb2phy0, SC7180_SLAVE_AHB2PHY_SOUTH, 1, 4); | ||||
| DEFINE_QNODE(qhs_ahb2phy2, SC7180_SLAVE_AHB2PHY_CENTER, 1, 4); | ||||
| DEFINE_QNODE(qhs_aop, SC7180_SLAVE_AOP, 1, 4); | ||||
| DEFINE_QNODE(qhs_aoss, SC7180_SLAVE_AOSS, 1, 4); | ||||
| DEFINE_QNODE(qhs_boot_rom, SC7180_SLAVE_BOOT_ROM, 1, 4); | ||||
| DEFINE_QNODE(qhs_camera_cfg, SC7180_SLAVE_CAMERA_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_camera_nrt_throttle_cfg, SC7180_SLAVE_CAMERA_NRT_THROTTLE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_camera_rt_throttle_cfg, SC7180_SLAVE_CAMERA_RT_THROTTLE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_clk_ctl, SC7180_SLAVE_CLK_CTL, 1, 4); | ||||
| DEFINE_QNODE(qhs_cpr_cx, SC7180_SLAVE_RBCPR_CX_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_cpr_mx, SC7180_SLAVE_RBCPR_MX_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_crypto0_cfg, SC7180_SLAVE_CRYPTO_0_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_dcc_cfg, SC7180_SLAVE_DCC_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_ddrss_cfg, SC7180_SLAVE_CNOC_DDRSS, 1, 4, SC7180_MASTER_CNOC_DC_NOC); | ||||
| DEFINE_QNODE(qhs_display_cfg, SC7180_SLAVE_DISPLAY_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_display_rt_throttle_cfg, SC7180_SLAVE_DISPLAY_RT_THROTTLE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_display_throttle_cfg, SC7180_SLAVE_DISPLAY_THROTTLE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_emmc_cfg, SC7180_SLAVE_EMMC_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_glm, SC7180_SLAVE_GLM, 1, 4); | ||||
| DEFINE_QNODE(qhs_gpuss_cfg, SC7180_SLAVE_GFX3D_CFG, 1, 8); | ||||
| DEFINE_QNODE(qhs_imem_cfg, SC7180_SLAVE_IMEM_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_ipa, SC7180_SLAVE_IPA_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_mnoc_cfg, SC7180_SLAVE_CNOC_MNOC_CFG, 1, 4, SC7180_MASTER_CNOC_MNOC_CFG); | ||||
| DEFINE_QNODE(qhs_mss_cfg, SC7180_SLAVE_CNOC_MSS, 1, 4); | ||||
| DEFINE_QNODE(qhs_npu_cfg, SC7180_SLAVE_NPU_CFG, 1, 4, SC7180_MASTER_NPU_NOC_CFG); | ||||
| DEFINE_QNODE(qhs_npu_dma_throttle_cfg, SC7180_SLAVE_NPU_DMA_BWMON_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_npu_dsp_throttle_cfg, SC7180_SLAVE_NPU_PROC_BWMON_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_pdm, SC7180_SLAVE_PDM, 1, 4); | ||||
| DEFINE_QNODE(qhs_pimem_cfg, SC7180_SLAVE_PIMEM_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_prng, SC7180_SLAVE_PRNG, 1, 4); | ||||
| DEFINE_QNODE(qhs_qdss_cfg, SC7180_SLAVE_QDSS_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_qm_cfg, SC7180_SLAVE_QM_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_qm_mpu_cfg, SC7180_SLAVE_QM_MPU_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_qspi, SC7180_SLAVE_QSPI_0, 1, 4); | ||||
| DEFINE_QNODE(qhs_qup0, SC7180_SLAVE_QUP_0, 1, 4); | ||||
| DEFINE_QNODE(qhs_qup1, SC7180_SLAVE_QUP_1, 1, 4); | ||||
| DEFINE_QNODE(qhs_sdc2, SC7180_SLAVE_SDCC_2, 1, 4); | ||||
| DEFINE_QNODE(qhs_security, SC7180_SLAVE_SECURITY, 1, 4); | ||||
| DEFINE_QNODE(qhs_snoc_cfg, SC7180_SLAVE_SNOC_CFG, 1, 4, SC7180_MASTER_SNOC_CFG); | ||||
| DEFINE_QNODE(qhs_tcsr, SC7180_SLAVE_TCSR, 1, 4); | ||||
| DEFINE_QNODE(qhs_tlmm_1, SC7180_SLAVE_TLMM_WEST, 1, 4); | ||||
| DEFINE_QNODE(qhs_tlmm_2, SC7180_SLAVE_TLMM_NORTH, 1, 4); | ||||
| DEFINE_QNODE(qhs_tlmm_3, SC7180_SLAVE_TLMM_SOUTH, 1, 4); | ||||
| DEFINE_QNODE(qhs_ufs_mem_cfg, SC7180_SLAVE_UFS_MEM_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_usb3, SC7180_SLAVE_USB3, 1, 4); | ||||
| DEFINE_QNODE(qhs_venus_cfg, SC7180_SLAVE_VENUS_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_venus_throttle_cfg, SC7180_SLAVE_VENUS_THROTTLE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_vsense_ctrl_cfg, SC7180_SLAVE_VSENSE_CTRL_CFG, 1, 4); | ||||
| DEFINE_QNODE(srvc_cnoc, SC7180_SLAVE_SERVICE_CNOC, 1, 4); | ||||
| DEFINE_QNODE(qhs_gemnoc, SC7180_SLAVE_GEM_NOC_CFG, 1, 4, SC7180_MASTER_GEM_NOC_CFG); | ||||
| DEFINE_QNODE(qhs_llcc, SC7180_SLAVE_LLCC_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_mdsp_ms_mpu_cfg, SC7180_SLAVE_MSS_PROC_MS_MPU_CFG, 1, 4); | ||||
| DEFINE_QNODE(qns_gem_noc_snoc, SC7180_SLAVE_GEM_NOC_SNOC, 1, 8, SC7180_MASTER_GEM_NOC_SNOC); | ||||
| DEFINE_QNODE(qns_llcc, SC7180_SLAVE_LLCC, 1, 16, SC7180_MASTER_LLCC); | ||||
| DEFINE_QNODE(srvc_gemnoc, SC7180_SLAVE_SERVICE_GEM_NOC, 1, 4); | ||||
| DEFINE_QNODE(ipa_core_slave, SC7180_SLAVE_IPA_CORE, 1, 8); | ||||
| DEFINE_QNODE(ebi, SC7180_SLAVE_EBI1, 2, 4); | ||||
| DEFINE_QNODE(qns_mem_noc_hf, SC7180_SLAVE_MNOC_HF_MEM_NOC, 1, 32, SC7180_MASTER_MNOC_HF_MEM_NOC); | ||||
| DEFINE_QNODE(qns_mem_noc_sf, SC7180_SLAVE_MNOC_SF_MEM_NOC, 1, 32, SC7180_MASTER_MNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(srvc_mnoc, SC7180_SLAVE_SERVICE_MNOC, 1, 4); | ||||
| DEFINE_QNODE(qhs_cal_dp0, SC7180_SLAVE_NPU_CAL_DP0, 1, 4); | ||||
| DEFINE_QNODE(qhs_cp, SC7180_SLAVE_NPU_CP, 1, 4); | ||||
| DEFINE_QNODE(qhs_dma_bwmon, SC7180_SLAVE_NPU_INT_DMA_BWMON_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_dpm, SC7180_SLAVE_NPU_DPM, 1, 4); | ||||
| DEFINE_QNODE(qhs_isense, SC7180_SLAVE_ISENSE_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_llm, SC7180_SLAVE_NPU_LLM_CFG, 1, 4); | ||||
| DEFINE_QNODE(qhs_tcm, SC7180_SLAVE_NPU_TCM, 1, 4); | ||||
| DEFINE_QNODE(qns_npu_sys, SC7180_SLAVE_NPU_COMPUTE_NOC, 2, 32); | ||||
| DEFINE_QNODE(srvc_noc, SC7180_SLAVE_SERVICE_NPU_NOC, 1, 4); | ||||
| DEFINE_QNODE(qup_core_slave_1, SC7180_SLAVE_QUP_CORE_0, 1, 4); | ||||
| DEFINE_QNODE(qup_core_slave_2, SC7180_SLAVE_QUP_CORE_1, 1, 4); | ||||
| DEFINE_QNODE(qhs_apss, SC7180_SLAVE_APPSS, 1, 8); | ||||
| DEFINE_QNODE(qns_cnoc, SC7180_SLAVE_SNOC_CNOC, 1, 8, SC7180_MASTER_SNOC_CNOC); | ||||
| DEFINE_QNODE(qns_gemnoc_gc, SC7180_SLAVE_SNOC_GEM_NOC_GC, 1, 8, SC7180_MASTER_SNOC_GC_MEM_NOC); | ||||
| DEFINE_QNODE(qns_gemnoc_sf, SC7180_SLAVE_SNOC_GEM_NOC_SF, 1, 16, SC7180_MASTER_SNOC_SF_MEM_NOC); | ||||
| DEFINE_QNODE(qxs_imem, SC7180_SLAVE_IMEM, 1, 8); | ||||
| DEFINE_QNODE(qxs_pimem, SC7180_SLAVE_PIMEM, 1, 8); | ||||
| DEFINE_QNODE(srvc_snoc, SC7180_SLAVE_SERVICE_SNOC, 1, 4); | ||||
| DEFINE_QNODE(xs_qdss_stm, SC7180_SLAVE_QDSS_STM, 1, 4); | ||||
| DEFINE_QNODE(xs_sys_tcu_cfg, SC7180_SLAVE_TCU, 1, 8); | ||||
| 
 | ||||
| DEFINE_QBCM(bcm_acv, "ACV", false, &ebi); | ||||
| DEFINE_QBCM(bcm_mc0, "MC0", true, &ebi); | ||||
| DEFINE_QBCM(bcm_sh0, "SH0", true, &qns_llcc); | ||||
| DEFINE_QBCM(bcm_mm0, "MM0", false, &qns_mem_noc_hf); | ||||
| DEFINE_QBCM(bcm_ce0, "CE0", false, &qxm_crypto); | ||||
| DEFINE_QBCM(bcm_ip0, "IP0", false, &ipa_core_slave); | ||||
| DEFINE_QBCM(bcm_cn0, "CN0", true, &qnm_snoc, &xm_qdss_dap, &qhs_a1_noc_cfg, &qhs_a2_noc_cfg, &qhs_ahb2phy0, &qhs_aop, &qhs_aoss, &qhs_boot_rom, &qhs_camera_cfg, &qhs_camera_nrt_throttle_cfg, &qhs_camera_rt_throttle_cfg, &qhs_clk_ctl, &qhs_cpr_cx, &qhs_cpr_mx, &qhs_crypto0_cfg, &qhs_dcc_cfg, &qhs_ddrss_cfg, &qhs_display_cfg, &qhs_display_rt_throttle_cfg, &qhs_display_throttle_cfg, &qhs_glm, &qhs_gpuss_cfg, &qhs_imem_cfg, &qhs_ipa, &qhs_mnoc_cfg, &qhs_mss_cfg, &qhs_npu_cfg, &qhs_npu_dma_throttle_cfg, &qhs_npu_dsp_throttle_cfg, &qhs_pimem_cfg, &qhs_prng, &qhs_qdss_cfg, &qhs_qm_cfg, &qhs_qm_mpu_cfg, &qhs_qup0, &qhs_qup1, &qhs_security, &qhs_snoc_cfg, &qhs_tcsr, &qhs_tlmm_1, &qhs_tlmm_2, &qhs_tlmm_3, &qhs_ufs_mem_cfg, &qhs_usb3, &qhs_venus_cfg, &qhs_venus_throttle_cfg, &qhs_vsense_ctrl_cfg, &srvc_cnoc); | ||||
| DEFINE_QBCM(bcm_mm1, "MM1", false, &qxm_camnoc_hf0_uncomp, &qxm_camnoc_hf1_uncomp, &qxm_camnoc_sf_uncomp, &qhm_mnoc_cfg, &qxm_mdp0, &qxm_rot, &qxm_venus0, &qxm_venus_arm9); | ||||
| DEFINE_QBCM(bcm_sh2, "SH2", false, &acm_sys_tcu); | ||||
| DEFINE_QBCM(bcm_mm2, "MM2", false, &qns_mem_noc_sf); | ||||
| DEFINE_QBCM(bcm_qup0, "QUP0", false, &qup_core_master_1, &qup_core_master_2); | ||||
| DEFINE_QBCM(bcm_sh3, "SH3", false, &qnm_cmpnoc); | ||||
| DEFINE_QBCM(bcm_sh4, "SH4", false, &acm_apps0); | ||||
| DEFINE_QBCM(bcm_sn0, "SN0", true, &qns_gemnoc_sf); | ||||
| DEFINE_QBCM(bcm_co0, "CO0", false, &qns_cdsp_gemnoc); | ||||
| DEFINE_QBCM(bcm_sn1, "SN1", false, &qxs_imem); | ||||
| DEFINE_QBCM(bcm_cn1, "CN1", false, &qhm_qspi, &xm_sdc2, &xm_emmc, &qhs_ahb2phy2, &qhs_emmc_cfg, &qhs_pdm, &qhs_qspi, &qhs_sdc2); | ||||
| DEFINE_QBCM(bcm_sn2, "SN2", false, &qxm_pimem, &qns_gemnoc_gc); | ||||
| DEFINE_QBCM(bcm_co2, "CO2", false, &qnm_npu); | ||||
| DEFINE_QBCM(bcm_sn3, "SN3", false, &qxs_pimem); | ||||
| DEFINE_QBCM(bcm_co3, "CO3", false, &qxm_npu_dsp); | ||||
| DEFINE_QBCM(bcm_sn4, "SN4", false, &xs_qdss_stm); | ||||
| DEFINE_QBCM(bcm_sn7, "SN7", false, &qnm_aggre1_noc); | ||||
| DEFINE_QBCM(bcm_sn9, "SN9", false, &qnm_aggre2_noc); | ||||
| DEFINE_QBCM(bcm_sn12, "SN12", false, &qnm_gemnoc); | ||||
| 
 | ||||
| static struct qcom_icc_bcm *aggre1_noc_bcms[] = { | ||||
| 	&bcm_cn1, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *aggre1_noc_nodes[] = { | ||||
| 	[MASTER_A1NOC_CFG] = &qhm_a1noc_cfg, | ||||
| 	[MASTER_QSPI] = &qhm_qspi, | ||||
| 	[MASTER_QUP_0] = &qhm_qup_0, | ||||
| 	[MASTER_SDCC_2] = &xm_sdc2, | ||||
| 	[MASTER_EMMC] = &xm_emmc, | ||||
| 	[MASTER_UFS_MEM] = &xm_ufs_mem, | ||||
| 	[SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc, | ||||
| 	[SLAVE_SERVICE_A1NOC] = &srvc_aggre1_noc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_aggre1_noc = { | ||||
| 	.nodes = aggre1_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(aggre1_noc_nodes), | ||||
| 	.bcms = aggre1_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(aggre1_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *aggre2_noc_bcms[] = { | ||||
| 	&bcm_ce0, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *aggre2_noc_nodes[] = { | ||||
| 	[MASTER_A2NOC_CFG] = &qhm_a2noc_cfg, | ||||
| 	[MASTER_QDSS_BAM] = &qhm_qdss_bam, | ||||
| 	[MASTER_QUP_1] = &qhm_qup_1, | ||||
| 	[MASTER_USB3] = &qhm_usb3, | ||||
| 	[MASTER_CRYPTO] = &qxm_crypto, | ||||
| 	[MASTER_IPA] = &qxm_ipa, | ||||
| 	[MASTER_QDSS_ETR] = &xm_qdss_etr, | ||||
| 	[SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc, | ||||
| 	[SLAVE_SERVICE_A2NOC] = &srvc_aggre2_noc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_aggre2_noc = { | ||||
| 	.nodes = aggre2_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(aggre2_noc_nodes), | ||||
| 	.bcms = aggre2_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(aggre2_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *camnoc_virt_bcms[] = { | ||||
| 	&bcm_mm1, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *camnoc_virt_nodes[] = { | ||||
| 	[MASTER_CAMNOC_HF0_UNCOMP] = &qxm_camnoc_hf0_uncomp, | ||||
| 	[MASTER_CAMNOC_HF1_UNCOMP] = &qxm_camnoc_hf1_uncomp, | ||||
| 	[MASTER_CAMNOC_SF_UNCOMP] = &qxm_camnoc_sf_uncomp, | ||||
| 	[SLAVE_CAMNOC_UNCOMP] = &qns_camnoc_uncomp, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_camnoc_virt = { | ||||
| 	.nodes = camnoc_virt_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(camnoc_virt_nodes), | ||||
| 	.bcms = camnoc_virt_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(camnoc_virt_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *compute_noc_bcms[] = { | ||||
| 	&bcm_co0, | ||||
| 	&bcm_co2, | ||||
| 	&bcm_co3, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *compute_noc_nodes[] = { | ||||
| 	[MASTER_NPU] = &qnm_npu, | ||||
| 	[MASTER_NPU_PROC] = &qxm_npu_dsp, | ||||
| 	[SLAVE_CDSP_GEM_NOC] = &qns_cdsp_gemnoc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_compute_noc = { | ||||
| 	.nodes = compute_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(compute_noc_nodes), | ||||
| 	.bcms = compute_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(compute_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *config_noc_bcms[] = { | ||||
| 	&bcm_cn0, | ||||
| 	&bcm_cn1, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *config_noc_nodes[] = { | ||||
| 	[MASTER_SNOC_CNOC] = &qnm_snoc, | ||||
| 	[MASTER_QDSS_DAP] = &xm_qdss_dap, | ||||
| 	[SLAVE_A1NOC_CFG] = &qhs_a1_noc_cfg, | ||||
| 	[SLAVE_A2NOC_CFG] = &qhs_a2_noc_cfg, | ||||
| 	[SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0, | ||||
| 	[SLAVE_AHB2PHY_CENTER] = &qhs_ahb2phy2, | ||||
| 	[SLAVE_AOP] = &qhs_aop, | ||||
| 	[SLAVE_AOSS] = &qhs_aoss, | ||||
| 	[SLAVE_BOOT_ROM] = &qhs_boot_rom, | ||||
| 	[SLAVE_CAMERA_CFG] = &qhs_camera_cfg, | ||||
| 	[SLAVE_CAMERA_NRT_THROTTLE_CFG] = &qhs_camera_nrt_throttle_cfg, | ||||
| 	[SLAVE_CAMERA_RT_THROTTLE_CFG] = &qhs_camera_rt_throttle_cfg, | ||||
| 	[SLAVE_CLK_CTL] = &qhs_clk_ctl, | ||||
| 	[SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx, | ||||
| 	[SLAVE_RBCPR_MX_CFG] = &qhs_cpr_mx, | ||||
| 	[SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg, | ||||
| 	[SLAVE_DCC_CFG] = &qhs_dcc_cfg, | ||||
| 	[SLAVE_CNOC_DDRSS] = &qhs_ddrss_cfg, | ||||
| 	[SLAVE_DISPLAY_CFG] = &qhs_display_cfg, | ||||
| 	[SLAVE_DISPLAY_RT_THROTTLE_CFG] = &qhs_display_rt_throttle_cfg, | ||||
| 	[SLAVE_DISPLAY_THROTTLE_CFG] = &qhs_display_throttle_cfg, | ||||
| 	[SLAVE_EMMC_CFG] = &qhs_emmc_cfg, | ||||
| 	[SLAVE_GLM] = &qhs_glm, | ||||
| 	[SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg, | ||||
| 	[SLAVE_IMEM_CFG] = &qhs_imem_cfg, | ||||
| 	[SLAVE_IPA_CFG] = &qhs_ipa, | ||||
| 	[SLAVE_CNOC_MNOC_CFG] = &qhs_mnoc_cfg, | ||||
| 	[SLAVE_CNOC_MSS] = &qhs_mss_cfg, | ||||
| 	[SLAVE_NPU_CFG] = &qhs_npu_cfg, | ||||
| 	[SLAVE_NPU_DMA_BWMON_CFG] = &qhs_npu_dma_throttle_cfg, | ||||
| 	[SLAVE_NPU_PROC_BWMON_CFG] = &qhs_npu_dsp_throttle_cfg, | ||||
| 	[SLAVE_PDM] = &qhs_pdm, | ||||
| 	[SLAVE_PIMEM_CFG] = &qhs_pimem_cfg, | ||||
| 	[SLAVE_PRNG] = &qhs_prng, | ||||
| 	[SLAVE_QDSS_CFG] = &qhs_qdss_cfg, | ||||
| 	[SLAVE_QM_CFG] = &qhs_qm_cfg, | ||||
| 	[SLAVE_QM_MPU_CFG] = &qhs_qm_mpu_cfg, | ||||
| 	[SLAVE_QSPI_0] = &qhs_qspi, | ||||
| 	[SLAVE_QUP_0] = &qhs_qup0, | ||||
| 	[SLAVE_QUP_1] = &qhs_qup1, | ||||
| 	[SLAVE_SDCC_2] = &qhs_sdc2, | ||||
| 	[SLAVE_SECURITY] = &qhs_security, | ||||
| 	[SLAVE_SNOC_CFG] = &qhs_snoc_cfg, | ||||
| 	[SLAVE_TCSR] = &qhs_tcsr, | ||||
| 	[SLAVE_TLMM_WEST] = &qhs_tlmm_1, | ||||
| 	[SLAVE_TLMM_NORTH] = &qhs_tlmm_2, | ||||
| 	[SLAVE_TLMM_SOUTH] = &qhs_tlmm_3, | ||||
| 	[SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg, | ||||
| 	[SLAVE_USB3] = &qhs_usb3, | ||||
| 	[SLAVE_VENUS_CFG] = &qhs_venus_cfg, | ||||
| 	[SLAVE_VENUS_THROTTLE_CFG] = &qhs_venus_throttle_cfg, | ||||
| 	[SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg, | ||||
| 	[SLAVE_SERVICE_CNOC] = &srvc_cnoc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_config_noc = { | ||||
| 	.nodes = config_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(config_noc_nodes), | ||||
| 	.bcms = config_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(config_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *dc_noc_nodes[] = { | ||||
| 	[MASTER_CNOC_DC_NOC] = &qhm_cnoc_dc_noc, | ||||
| 	[SLAVE_GEM_NOC_CFG] = &qhs_gemnoc, | ||||
| 	[SLAVE_LLCC_CFG] = &qhs_llcc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_dc_noc = { | ||||
| 	.nodes = dc_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(dc_noc_nodes), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *gem_noc_bcms[] = { | ||||
| 	&bcm_sh0, | ||||
| 	&bcm_sh2, | ||||
| 	&bcm_sh3, | ||||
| 	&bcm_sh4, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *gem_noc_nodes[] = { | ||||
| 	[MASTER_APPSS_PROC] = &acm_apps0, | ||||
| 	[MASTER_SYS_TCU] = &acm_sys_tcu, | ||||
| 	[MASTER_GEM_NOC_CFG] = &qhm_gemnoc_cfg, | ||||
| 	[MASTER_COMPUTE_NOC] = &qnm_cmpnoc, | ||||
| 	[MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf, | ||||
| 	[MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf, | ||||
| 	[MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc, | ||||
| 	[MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf, | ||||
| 	[MASTER_GFX3D] = &qxm_gpu, | ||||
| 	[SLAVE_MSS_PROC_MS_MPU_CFG] = &qhs_mdsp_ms_mpu_cfg, | ||||
| 	[SLAVE_GEM_NOC_SNOC] = &qns_gem_noc_snoc, | ||||
| 	[SLAVE_LLCC] = &qns_llcc, | ||||
| 	[SLAVE_SERVICE_GEM_NOC] = &srvc_gemnoc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_gem_noc = { | ||||
| 	.nodes = gem_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(gem_noc_nodes), | ||||
| 	.bcms = gem_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(gem_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *ipa_virt_bcms[] = { | ||||
| 	&bcm_ip0, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *ipa_virt_nodes[] = { | ||||
| 	[MASTER_IPA_CORE] = &ipa_core_master, | ||||
| 	[SLAVE_IPA_CORE] = &ipa_core_slave, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_ipa_virt = { | ||||
| 	.nodes = ipa_virt_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(ipa_virt_nodes), | ||||
| 	.bcms = ipa_virt_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(ipa_virt_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *mc_virt_bcms[] = { | ||||
| 	&bcm_acv, | ||||
| 	&bcm_mc0, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *mc_virt_nodes[] = { | ||||
| 	[MASTER_LLCC] = &llcc_mc, | ||||
| 	[SLAVE_EBI1] = &ebi, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_mc_virt = { | ||||
| 	.nodes = mc_virt_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(mc_virt_nodes), | ||||
| 	.bcms = mc_virt_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(mc_virt_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *mmss_noc_bcms[] = { | ||||
| 	&bcm_mm0, | ||||
| 	&bcm_mm1, | ||||
| 	&bcm_mm2, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *mmss_noc_nodes[] = { | ||||
| 	[MASTER_CNOC_MNOC_CFG] = &qhm_mnoc_cfg, | ||||
| 	[MASTER_CAMNOC_HF0] = &qxm_camnoc_hf0, | ||||
| 	[MASTER_CAMNOC_HF1] = &qxm_camnoc_hf1, | ||||
| 	[MASTER_CAMNOC_SF] = &qxm_camnoc_sf, | ||||
| 	[MASTER_MDP0] = &qxm_mdp0, | ||||
| 	[MASTER_ROTATOR] = &qxm_rot, | ||||
| 	[MASTER_VIDEO_P0] = &qxm_venus0, | ||||
| 	[MASTER_VIDEO_PROC] = &qxm_venus_arm9, | ||||
| 	[SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf, | ||||
| 	[SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf, | ||||
| 	[SLAVE_SERVICE_MNOC] = &srvc_mnoc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_mmss_noc = { | ||||
| 	.nodes = mmss_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(mmss_noc_nodes), | ||||
| 	.bcms = mmss_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(mmss_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *npu_noc_nodes[] = { | ||||
| 	[MASTER_NPU_SYS] = &amm_npu_sys, | ||||
| 	[MASTER_NPU_NOC_CFG] = &qhm_npu_cfg, | ||||
| 	[SLAVE_NPU_CAL_DP0] = &qhs_cal_dp0, | ||||
| 	[SLAVE_NPU_CP] = &qhs_cp, | ||||
| 	[SLAVE_NPU_INT_DMA_BWMON_CFG] = &qhs_dma_bwmon, | ||||
| 	[SLAVE_NPU_DPM] = &qhs_dpm, | ||||
| 	[SLAVE_ISENSE_CFG] = &qhs_isense, | ||||
| 	[SLAVE_NPU_LLM_CFG] = &qhs_llm, | ||||
| 	[SLAVE_NPU_TCM] = &qhs_tcm, | ||||
| 	[SLAVE_NPU_COMPUTE_NOC] = &qns_npu_sys, | ||||
| 	[SLAVE_SERVICE_NPU_NOC] = &srvc_noc, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_npu_noc = { | ||||
| 	.nodes = npu_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(npu_noc_nodes), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *qup_virt_bcms[] = { | ||||
| 	&bcm_qup0, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *qup_virt_nodes[] = { | ||||
| 	[MASTER_QUP_CORE_0] = &qup_core_master_1, | ||||
| 	[MASTER_QUP_CORE_1] = &qup_core_master_2, | ||||
| 	[SLAVE_QUP_CORE_0] = &qup_core_slave_1, | ||||
| 	[SLAVE_QUP_CORE_1] = &qup_core_slave_2, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_qup_virt = { | ||||
| 	.nodes = qup_virt_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(qup_virt_nodes), | ||||
| 	.bcms = qup_virt_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(qup_virt_bcms), | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_bcm *system_noc_bcms[] = { | ||||
| 	&bcm_sn0, | ||||
| 	&bcm_sn1, | ||||
| 	&bcm_sn2, | ||||
| 	&bcm_sn3, | ||||
| 	&bcm_sn4, | ||||
| 	&bcm_sn7, | ||||
| 	&bcm_sn9, | ||||
| 	&bcm_sn12, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_node *system_noc_nodes[] = { | ||||
| 	[MASTER_SNOC_CFG] = &qhm_snoc_cfg, | ||||
| 	[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc, | ||||
| 	[MASTER_A2NOC_SNOC] = &qnm_aggre2_noc, | ||||
| 	[MASTER_GEM_NOC_SNOC] = &qnm_gemnoc, | ||||
| 	[MASTER_PIMEM] = &qxm_pimem, | ||||
| 	[SLAVE_APPSS] = &qhs_apss, | ||||
| 	[SLAVE_SNOC_CNOC] = &qns_cnoc, | ||||
| 	[SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc, | ||||
| 	[SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf, | ||||
| 	[SLAVE_IMEM] = &qxs_imem, | ||||
| 	[SLAVE_PIMEM] = &qxs_pimem, | ||||
| 	[SLAVE_SERVICE_SNOC] = &srvc_snoc, | ||||
| 	[SLAVE_QDSS_STM] = &xs_qdss_stm, | ||||
| 	[SLAVE_TCU] = &xs_sys_tcu_cfg, | ||||
| }; | ||||
| 
 | ||||
| static struct qcom_icc_desc sc7180_system_noc = { | ||||
| 	.nodes = system_noc_nodes, | ||||
| 	.num_nodes = ARRAY_SIZE(system_noc_nodes), | ||||
| 	.bcms = system_noc_bcms, | ||||
| 	.num_bcms = ARRAY_SIZE(system_noc_bcms), | ||||
| }; | ||||
| 
 | ||||
| static int qnoc_probe(struct platform_device *pdev) | ||||
| { | ||||
| 	const struct qcom_icc_desc *desc; | ||||
| 	struct icc_onecell_data *data; | ||||
| 	struct icc_provider *provider; | ||||
| 	struct qcom_icc_node **qnodes; | ||||
| 	struct qcom_icc_provider *qp; | ||||
| 	struct icc_node *node; | ||||
| 	size_t num_nodes, i; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	desc = device_get_match_data(&pdev->dev); | ||||
| 	if (!desc) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	qnodes = desc->nodes; | ||||
| 	num_nodes = desc->num_nodes; | ||||
| 
 | ||||
| 	qp = devm_kzalloc(&pdev->dev, sizeof(*qp), GFP_KERNEL); | ||||
| 	if (!qp) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL); | ||||
| 	if (!data) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	provider = &qp->provider; | ||||
| 	provider->dev = &pdev->dev; | ||||
| 	provider->set = qcom_icc_set; | ||||
| 	provider->pre_aggregate = qcom_icc_pre_aggregate; | ||||
| 	provider->aggregate = qcom_icc_aggregate; | ||||
| 	provider->xlate = of_icc_xlate_onecell; | ||||
| 	INIT_LIST_HEAD(&provider->nodes); | ||||
| 	provider->data = data; | ||||
| 
 | ||||
| 	qp->dev = &pdev->dev; | ||||
| 	qp->bcms = desc->bcms; | ||||
| 	qp->num_bcms = desc->num_bcms; | ||||
| 
 | ||||
| 	qp->voter = of_bcm_voter_get(qp->dev, NULL); | ||||
| 	if (IS_ERR(qp->voter)) | ||||
| 		return PTR_ERR(qp->voter); | ||||
| 
 | ||||
| 	ret = icc_provider_add(provider); | ||||
| 	if (ret) { | ||||
| 		dev_err(&pdev->dev, "error adding interconnect provider\n"); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	for (i = 0; i < num_nodes; i++) { | ||||
| 		size_t j; | ||||
| 
 | ||||
| 		if (!qnodes[i]) | ||||
| 			continue; | ||||
| 
 | ||||
| 		node = icc_node_create(qnodes[i]->id); | ||||
| 		if (IS_ERR(node)) { | ||||
| 			ret = PTR_ERR(node); | ||||
| 			goto err; | ||||
| 		} | ||||
| 
 | ||||
| 		node->name = qnodes[i]->name; | ||||
| 		node->data = qnodes[i]; | ||||
| 		icc_node_add(node, provider); | ||||
| 
 | ||||
| 		for (j = 0; j < qnodes[i]->num_links; j++) | ||||
| 			icc_link_create(node, qnodes[i]->links[j]); | ||||
| 
 | ||||
| 		data->nodes[i] = node; | ||||
| 	} | ||||
| 	data->num_nodes = num_nodes; | ||||
| 
 | ||||
| 	for (i = 0; i < qp->num_bcms; i++) | ||||
| 		qcom_icc_bcm_init(qp->bcms[i], &pdev->dev); | ||||
| 
 | ||||
| 	platform_set_drvdata(pdev, qp); | ||||
| 
 | ||||
| 	return 0; | ||||
| err: | ||||
| 	icc_nodes_remove(provider); | ||||
| 	icc_provider_del(provider); | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int qnoc_remove(struct platform_device *pdev) | ||||
| { | ||||
| 	struct qcom_icc_provider *qp = platform_get_drvdata(pdev); | ||||
| 
 | ||||
| 	icc_nodes_remove(&qp->provider); | ||||
| 	return icc_provider_del(&qp->provider); | ||||
| } | ||||
| 
 | ||||
| static const struct of_device_id qnoc_of_match[] = { | ||||
| 	{ .compatible = "qcom,sc7180-aggre1-noc", | ||||
| 	  .data = &sc7180_aggre1_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-aggre2-noc", | ||||
| 	  .data = &sc7180_aggre2_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-camnoc-virt", | ||||
| 	  .data = &sc7180_camnoc_virt}, | ||||
| 	{ .compatible = "qcom,sc7180-compute-noc", | ||||
| 	  .data = &sc7180_compute_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-config-noc", | ||||
| 	  .data = &sc7180_config_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-dc-noc", | ||||
| 	  .data = &sc7180_dc_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-gem-noc", | ||||
| 	  .data = &sc7180_gem_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-ipa-virt", | ||||
| 	  .data = &sc7180_ipa_virt}, | ||||
| 	{ .compatible = "qcom,sc7180-mc-virt", | ||||
| 	  .data = &sc7180_mc_virt}, | ||||
| 	{ .compatible = "qcom,sc7180-mmss-noc", | ||||
| 	  .data = &sc7180_mmss_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-npu-noc", | ||||
| 	  .data = &sc7180_npu_noc}, | ||||
| 	{ .compatible = "qcom,sc7180-qup-virt", | ||||
| 	  .data = &sc7180_qup_virt}, | ||||
| 	{ .compatible = "qcom,sc7180-system-noc", | ||||
| 	  .data = &sc7180_system_noc}, | ||||
| 	{ } | ||||
| }; | ||||
| MODULE_DEVICE_TABLE(of, qnoc_of_match); | ||||
| 
 | ||||
| static struct platform_driver qnoc_driver = { | ||||
| 	.probe = qnoc_probe, | ||||
| 	.remove = qnoc_remove, | ||||
| 	.driver = { | ||||
| 		.name = "qnoc-sc7180", | ||||
| 		.of_match_table = qnoc_of_match, | ||||
| 	}, | ||||
| }; | ||||
| module_platform_driver(qnoc_driver); | ||||
| 
 | ||||
| MODULE_DESCRIPTION("Qualcomm SC7180 NoC driver"); | ||||
| MODULE_LICENSE("GPL v2"); | ||||
							
								
								
									
										151
									
								
								drivers/interconnect/qcom/sc7180.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								drivers/interconnect/qcom/sc7180.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,151 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Qualcomm #define SC7180 interconnect IDs | ||||
|  * | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DRIVERS_INTERCONNECT_QCOM_SC7180_H | ||||
| #define __DRIVERS_INTERCONNECT_QCOM_SC7180_H | ||||
| 
 | ||||
| #define SC7180_MASTER_APPSS_PROC			0 | ||||
| #define SC7180_MASTER_SYS_TCU				1 | ||||
| #define SC7180_MASTER_NPU_SYS				2 | ||||
| #define SC7180_MASTER_IPA_CORE				3 | ||||
| #define SC7180_MASTER_LLCC				4 | ||||
| #define SC7180_MASTER_A1NOC_CFG				5 | ||||
| #define SC7180_MASTER_A2NOC_CFG				6 | ||||
| #define SC7180_MASTER_CNOC_DC_NOC			7 | ||||
| #define SC7180_MASTER_GEM_NOC_CFG			8 | ||||
| #define SC7180_MASTER_CNOC_MNOC_CFG			9 | ||||
| #define SC7180_MASTER_NPU_NOC_CFG			10 | ||||
| #define SC7180_MASTER_QDSS_BAM				11 | ||||
| #define SC7180_MASTER_QSPI				12 | ||||
| #define SC7180_MASTER_QUP_0				13 | ||||
| #define SC7180_MASTER_QUP_1				14 | ||||
| #define SC7180_MASTER_SNOC_CFG				15 | ||||
| #define SC7180_MASTER_A1NOC_SNOC			16 | ||||
| #define SC7180_MASTER_A2NOC_SNOC			17 | ||||
| #define SC7180_MASTER_COMPUTE_NOC			18 | ||||
| #define SC7180_MASTER_GEM_NOC_SNOC			19 | ||||
| #define SC7180_MASTER_MNOC_HF_MEM_NOC			20 | ||||
| #define SC7180_MASTER_MNOC_SF_MEM_NOC			21 | ||||
| #define SC7180_MASTER_NPU				22 | ||||
| #define SC7180_MASTER_SNOC_CNOC				23 | ||||
| #define SC7180_MASTER_SNOC_GC_MEM_NOC			24 | ||||
| #define SC7180_MASTER_SNOC_SF_MEM_NOC			25 | ||||
| #define SC7180_MASTER_QUP_CORE_0			26 | ||||
| #define SC7180_MASTER_QUP_CORE_1			27 | ||||
| #define SC7180_MASTER_CAMNOC_HF0			28 | ||||
| #define SC7180_MASTER_CAMNOC_HF1			29 | ||||
| #define SC7180_MASTER_CAMNOC_HF0_UNCOMP			30 | ||||
| #define SC7180_MASTER_CAMNOC_HF1_UNCOMP			31 | ||||
| #define SC7180_MASTER_CAMNOC_SF				32 | ||||
| #define SC7180_MASTER_CAMNOC_SF_UNCOMP			33 | ||||
| #define SC7180_MASTER_CRYPTO				34 | ||||
| #define SC7180_MASTER_GFX3D				35 | ||||
| #define SC7180_MASTER_IPA				36 | ||||
| #define SC7180_MASTER_MDP0				37 | ||||
| #define SC7180_MASTER_NPU_PROC				38 | ||||
| #define SC7180_MASTER_PIMEM				39 | ||||
| #define SC7180_MASTER_ROTATOR				40 | ||||
| #define SC7180_MASTER_VIDEO_P0				41 | ||||
| #define SC7180_MASTER_VIDEO_PROC			42 | ||||
| #define SC7180_MASTER_QDSS_DAP				43 | ||||
| #define SC7180_MASTER_QDSS_ETR				44 | ||||
| #define SC7180_MASTER_SDCC_2				45 | ||||
| #define SC7180_MASTER_UFS_MEM				46 | ||||
| #define SC7180_MASTER_USB3				47 | ||||
| #define SC7180_MASTER_EMMC				48 | ||||
| #define SC7180_SLAVE_EBI1				49 | ||||
| #define SC7180_SLAVE_IPA_CORE				50 | ||||
| #define SC7180_SLAVE_A1NOC_CFG				51 | ||||
| #define SC7180_SLAVE_A2NOC_CFG				52 | ||||
| #define SC7180_SLAVE_AHB2PHY_SOUTH			53 | ||||
| #define SC7180_SLAVE_AHB2PHY_CENTER			54 | ||||
| #define SC7180_SLAVE_AOP				55 | ||||
| #define SC7180_SLAVE_AOSS				56 | ||||
| #define SC7180_SLAVE_APPSS				57 | ||||
| #define SC7180_SLAVE_BOOT_ROM				58 | ||||
| #define SC7180_SLAVE_NPU_CAL_DP0			59 | ||||
| #define SC7180_SLAVE_CAMERA_CFG				60 | ||||
| #define SC7180_SLAVE_CAMERA_NRT_THROTTLE_CFG		61 | ||||
| #define SC7180_SLAVE_CAMERA_RT_THROTTLE_CFG		62 | ||||
| #define SC7180_SLAVE_CLK_CTL				63 | ||||
| #define SC7180_SLAVE_NPU_CP				64 | ||||
| #define SC7180_SLAVE_RBCPR_CX_CFG			65 | ||||
| #define SC7180_SLAVE_RBCPR_MX_CFG			66 | ||||
| #define SC7180_SLAVE_CRYPTO_0_CFG			67 | ||||
| #define SC7180_SLAVE_DCC_CFG				68 | ||||
| #define SC7180_SLAVE_CNOC_DDRSS				69 | ||||
| #define SC7180_SLAVE_DISPLAY_CFG			70 | ||||
| #define SC7180_SLAVE_DISPLAY_RT_THROTTLE_CFG		71 | ||||
| #define SC7180_SLAVE_DISPLAY_THROTTLE_CFG		72 | ||||
| #define SC7180_SLAVE_NPU_INT_DMA_BWMON_CFG		73 | ||||
| #define SC7180_SLAVE_NPU_DPM				74 | ||||
| #define SC7180_SLAVE_EMMC_CFG				75 | ||||
| #define SC7180_SLAVE_GEM_NOC_CFG			76 | ||||
| #define SC7180_SLAVE_GLM				77 | ||||
| #define SC7180_SLAVE_GFX3D_CFG				78 | ||||
| #define SC7180_SLAVE_IMEM_CFG				79 | ||||
| #define SC7180_SLAVE_IPA_CFG				80 | ||||
| #define SC7180_SLAVE_ISENSE_CFG				81 | ||||
| #define SC7180_SLAVE_LLCC_CFG				82 | ||||
| #define SC7180_SLAVE_NPU_LLM_CFG			83 | ||||
| #define SC7180_SLAVE_MSS_PROC_MS_MPU_CFG		84 | ||||
| #define SC7180_SLAVE_CNOC_MNOC_CFG			85 | ||||
| #define SC7180_SLAVE_CNOC_MSS				86 | ||||
| #define SC7180_SLAVE_NPU_CFG				87 | ||||
| #define SC7180_SLAVE_NPU_DMA_BWMON_CFG			88 | ||||
| #define SC7180_SLAVE_NPU_PROC_BWMON_CFG			89 | ||||
| #define SC7180_SLAVE_PDM				90 | ||||
| #define SC7180_SLAVE_PIMEM_CFG				91 | ||||
| #define SC7180_SLAVE_PRNG				92 | ||||
| #define SC7180_SLAVE_QDSS_CFG				93 | ||||
| #define SC7180_SLAVE_QM_CFG				94 | ||||
| #define SC7180_SLAVE_QM_MPU_CFG				95 | ||||
| #define SC7180_SLAVE_QSPI_0				96 | ||||
| #define SC7180_SLAVE_QUP_0				97 | ||||
| #define SC7180_SLAVE_QUP_1				98 | ||||
| #define SC7180_SLAVE_SDCC_2				99 | ||||
| #define SC7180_SLAVE_SECURITY				100 | ||||
| #define SC7180_SLAVE_SNOC_CFG				101 | ||||
| #define SC7180_SLAVE_NPU_TCM				102 | ||||
| #define SC7180_SLAVE_TCSR				103 | ||||
| #define SC7180_SLAVE_TLMM_WEST				104 | ||||
| #define SC7180_SLAVE_TLMM_NORTH				105 | ||||
| #define SC7180_SLAVE_TLMM_SOUTH				106 | ||||
| #define SC7180_SLAVE_UFS_MEM_CFG			107 | ||||
| #define SC7180_SLAVE_USB3				108 | ||||
| #define SC7180_SLAVE_VENUS_CFG				109 | ||||
| #define SC7180_SLAVE_VENUS_THROTTLE_CFG			110 | ||||
| #define SC7180_SLAVE_VSENSE_CTRL_CFG			111 | ||||
| #define SC7180_SLAVE_A1NOC_SNOC				112 | ||||
| #define SC7180_SLAVE_A2NOC_SNOC				113 | ||||
| #define SC7180_SLAVE_CAMNOC_UNCOMP			114 | ||||
| #define SC7180_SLAVE_CDSP_GEM_NOC			115 | ||||
| #define SC7180_SLAVE_SNOC_CNOC				116 | ||||
| #define SC7180_SLAVE_GEM_NOC_SNOC			117 | ||||
| #define SC7180_SLAVE_SNOC_GEM_NOC_GC			118 | ||||
| #define SC7180_SLAVE_SNOC_GEM_NOC_SF			119 | ||||
| #define SC7180_SLAVE_LLCC				120 | ||||
| #define SC7180_SLAVE_MNOC_HF_MEM_NOC			121 | ||||
| #define SC7180_SLAVE_MNOC_SF_MEM_NOC			122 | ||||
| #define SC7180_SLAVE_NPU_COMPUTE_NOC			123 | ||||
| #define SC7180_SLAVE_QUP_CORE_0				124 | ||||
| #define SC7180_SLAVE_QUP_CORE_1				125 | ||||
| #define SC7180_SLAVE_IMEM				126 | ||||
| #define SC7180_SLAVE_PIMEM				127 | ||||
| #define SC7180_SLAVE_SERVICE_A1NOC			128 | ||||
| #define SC7180_SLAVE_SERVICE_A2NOC			129 | ||||
| #define SC7180_SLAVE_SERVICE_CNOC			130 | ||||
| #define SC7180_SLAVE_SERVICE_GEM_NOC			131 | ||||
| #define SC7180_SLAVE_SERVICE_MNOC			132 | ||||
| #define SC7180_SLAVE_SERVICE_NPU_NOC			133 | ||||
| #define SC7180_SLAVE_SERVICE_SNOC			134 | ||||
| #define SC7180_SLAVE_QDSS_STM				135 | ||||
| #define SC7180_SLAVE_TCU				136 | ||||
| #define SC7180_MASTER_OSM_L3_APPS			137 | ||||
| #define SC7180_SLAVE_OSM_L3				138 | ||||
| 
 | ||||
| #endif | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										142
									
								
								drivers/interconnect/qcom/sdm845.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								drivers/interconnect/qcom/sdm845.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,142 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DRIVERS_INTERCONNECT_QCOM_SDM845_H__ | ||||
| #define __DRIVERS_INTERCONNECT_QCOM_SDM845_H__ | ||||
| 
 | ||||
| #define SDM845_MASTER_A1NOC_CFG				1 | ||||
| #define SDM845_MASTER_BLSP_1				2 | ||||
| #define SDM845_MASTER_TSIF				3 | ||||
| #define SDM845_MASTER_SDCC_2				4 | ||||
| #define SDM845_MASTER_SDCC_4				5 | ||||
| #define SDM845_MASTER_UFS_CARD				6 | ||||
| #define SDM845_MASTER_UFS_MEM				7 | ||||
| #define SDM845_MASTER_PCIE_0				8 | ||||
| #define SDM845_MASTER_A2NOC_CFG				9 | ||||
| #define SDM845_MASTER_QDSS_BAM				10 | ||||
| #define SDM845_MASTER_BLSP_2				11 | ||||
| #define SDM845_MASTER_CNOC_A2NOC			12 | ||||
| #define SDM845_MASTER_CRYPTO				13 | ||||
| #define SDM845_MASTER_IPA				14 | ||||
| #define SDM845_MASTER_PCIE_1				15 | ||||
| #define SDM845_MASTER_QDSS_ETR				16 | ||||
| #define SDM845_MASTER_USB3_0				17 | ||||
| #define SDM845_MASTER_USB3_1				18 | ||||
| #define SDM845_MASTER_CAMNOC_HF0_UNCOMP			19 | ||||
| #define SDM845_MASTER_CAMNOC_HF1_UNCOMP			20 | ||||
| #define SDM845_MASTER_CAMNOC_SF_UNCOMP			21 | ||||
| #define SDM845_MASTER_SPDM				22 | ||||
| #define SDM845_MASTER_TIC				23 | ||||
| #define SDM845_MASTER_SNOC_CNOC				24 | ||||
| #define SDM845_MASTER_QDSS_DAP				25 | ||||
| #define SDM845_MASTER_CNOC_DC_NOC			26 | ||||
| #define SDM845_MASTER_APPSS_PROC			27 | ||||
| #define SDM845_MASTER_GNOC_CFG				28 | ||||
| #define SDM845_MASTER_LLCC				29 | ||||
| #define SDM845_MASTER_TCU_0				30 | ||||
| #define SDM845_MASTER_MEM_NOC_CFG			31 | ||||
| #define SDM845_MASTER_GNOC_MEM_NOC			32 | ||||
| #define SDM845_MASTER_MNOC_HF_MEM_NOC			33 | ||||
| #define SDM845_MASTER_MNOC_SF_MEM_NOC			34 | ||||
| #define SDM845_MASTER_SNOC_GC_MEM_NOC			35 | ||||
| #define SDM845_MASTER_SNOC_SF_MEM_NOC			36 | ||||
| #define SDM845_MASTER_GFX3D				37 | ||||
| #define SDM845_MASTER_CNOC_MNOC_CFG			38 | ||||
| #define SDM845_MASTER_CAMNOC_HF0			39 | ||||
| #define SDM845_MASTER_CAMNOC_HF1			40 | ||||
| #define SDM845_MASTER_CAMNOC_SF				41 | ||||
| #define SDM845_MASTER_MDP0				42 | ||||
| #define SDM845_MASTER_MDP1				43 | ||||
| #define SDM845_MASTER_ROTATOR				44 | ||||
| #define SDM845_MASTER_VIDEO_P0				45 | ||||
| #define SDM845_MASTER_VIDEO_P1				46 | ||||
| #define SDM845_MASTER_VIDEO_PROC			47 | ||||
| #define SDM845_MASTER_SNOC_CFG				48 | ||||
| #define SDM845_MASTER_A1NOC_SNOC			49 | ||||
| #define SDM845_MASTER_A2NOC_SNOC			50 | ||||
| #define SDM845_MASTER_GNOC_SNOC				51 | ||||
| #define SDM845_MASTER_MEM_NOC_SNOC			52 | ||||
| #define SDM845_MASTER_ANOC_PCIE_SNOC			53 | ||||
| #define SDM845_MASTER_PIMEM				54 | ||||
| #define SDM845_MASTER_GIC				55 | ||||
| #define SDM845_SLAVE_A1NOC_SNOC				56 | ||||
| #define SDM845_SLAVE_SERVICE_A1NOC			57 | ||||
| #define SDM845_SLAVE_ANOC_PCIE_A1NOC_SNOC		58 | ||||
| #define SDM845_SLAVE_A2NOC_SNOC				59 | ||||
| #define SDM845_SLAVE_ANOC_PCIE_SNOC			60 | ||||
| #define SDM845_SLAVE_SERVICE_A2NOC			61 | ||||
| #define SDM845_SLAVE_CAMNOC_UNCOMP			62 | ||||
| #define SDM845_SLAVE_A1NOC_CFG				63 | ||||
| #define SDM845_SLAVE_A2NOC_CFG				64 | ||||
| #define SDM845_SLAVE_AOP				65 | ||||
| #define SDM845_SLAVE_AOSS				66 | ||||
| #define SDM845_SLAVE_CAMERA_CFG				67 | ||||
| #define SDM845_SLAVE_CLK_CTL				68 | ||||
| #define SDM845_SLAVE_CDSP_CFG				69 | ||||
| #define SDM845_SLAVE_RBCPR_CX_CFG			70 | ||||
| #define SDM845_SLAVE_CRYPTO_0_CFG			71 | ||||
| #define SDM845_SLAVE_DCC_CFG				72 | ||||
| #define SDM845_SLAVE_CNOC_DDRSS				73 | ||||
| #define SDM845_SLAVE_DISPLAY_CFG			74 | ||||
| #define SDM845_SLAVE_GLM				75 | ||||
| #define SDM845_SLAVE_GFX3D_CFG				76 | ||||
| #define SDM845_SLAVE_IMEM_CFG				77 | ||||
| #define SDM845_SLAVE_IPA_CFG				78 | ||||
| #define SDM845_SLAVE_CNOC_MNOC_CFG			79 | ||||
| #define SDM845_SLAVE_PCIE_0_CFG				80 | ||||
| #define SDM845_SLAVE_PCIE_1_CFG				81 | ||||
| #define SDM845_SLAVE_PDM				82 | ||||
| #define SDM845_SLAVE_SOUTH_PHY_CFG			83 | ||||
| #define SDM845_SLAVE_PIMEM_CFG				84 | ||||
| #define SDM845_SLAVE_PRNG				85 | ||||
| #define SDM845_SLAVE_QDSS_CFG				86 | ||||
| #define SDM845_SLAVE_BLSP_2				87 | ||||
| #define SDM845_SLAVE_BLSP_1				88 | ||||
| #define SDM845_SLAVE_SDCC_2				89 | ||||
| #define SDM845_SLAVE_SDCC_4				90 | ||||
| #define SDM845_SLAVE_SNOC_CFG				91 | ||||
| #define SDM845_SLAVE_SPDM_WRAPPER			92 | ||||
| #define SDM845_SLAVE_SPSS_CFG				93 | ||||
| #define SDM845_SLAVE_TCSR				94 | ||||
| #define SDM845_SLAVE_TLMM_NORTH				95 | ||||
| #define SDM845_SLAVE_TLMM_SOUTH				96 | ||||
| #define SDM845_SLAVE_TSIF				97 | ||||
| #define SDM845_SLAVE_UFS_CARD_CFG			98 | ||||
| #define SDM845_SLAVE_UFS_MEM_CFG			99 | ||||
| #define SDM845_SLAVE_USB3_0				100 | ||||
| #define SDM845_SLAVE_USB3_1				101 | ||||
| #define SDM845_SLAVE_VENUS_CFG				102 | ||||
| #define SDM845_SLAVE_VSENSE_CTRL_CFG			103 | ||||
| #define SDM845_SLAVE_CNOC_A2NOC				104 | ||||
| #define SDM845_SLAVE_SERVICE_CNOC			105 | ||||
| #define SDM845_SLAVE_LLCC_CFG				106 | ||||
| #define SDM845_SLAVE_MEM_NOC_CFG			107 | ||||
| #define SDM845_SLAVE_GNOC_SNOC				108 | ||||
| #define SDM845_SLAVE_GNOC_MEM_NOC			109 | ||||
| #define SDM845_SLAVE_SERVICE_GNOC			110 | ||||
| #define SDM845_SLAVE_EBI1				111 | ||||
| #define SDM845_SLAVE_MSS_PROC_MS_MPU_CFG		112 | ||||
| #define SDM845_SLAVE_MEM_NOC_GNOC			113 | ||||
| #define SDM845_SLAVE_LLCC				114 | ||||
| #define SDM845_SLAVE_MEM_NOC_SNOC			115 | ||||
| #define SDM845_SLAVE_SERVICE_MEM_NOC			116 | ||||
| #define SDM845_SLAVE_MNOC_SF_MEM_NOC			117 | ||||
| #define SDM845_SLAVE_MNOC_HF_MEM_NOC			118 | ||||
| #define SDM845_SLAVE_SERVICE_MNOC			119 | ||||
| #define SDM845_SLAVE_APPSS				120 | ||||
| #define SDM845_SLAVE_SNOC_CNOC				121 | ||||
| #define SDM845_SLAVE_SNOC_MEM_NOC_GC			122 | ||||
| #define SDM845_SLAVE_SNOC_MEM_NOC_SF			123 | ||||
| #define SDM845_SLAVE_IMEM				124 | ||||
| #define SDM845_SLAVE_PCIE_0				125 | ||||
| #define SDM845_SLAVE_PCIE_1				126 | ||||
| #define SDM845_SLAVE_PIMEM				127 | ||||
| #define SDM845_SLAVE_SERVICE_SNOC			128 | ||||
| #define SDM845_SLAVE_QDSS_STM				129 | ||||
| #define SDM845_SLAVE_TCU				130 | ||||
| #define SDM845_MASTER_OSM_L3_APPS			131 | ||||
| #define SDM845_SLAVE_OSM_L3				132 | ||||
| 
 | ||||
| #endif /* __DRIVERS_INTERCONNECT_QCOM_SDM845_H__ */ | ||||
							
								
								
									
										12
									
								
								include/dt-bindings/interconnect/qcom,osm-l3.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								include/dt-bindings/interconnect/qcom,osm-l3.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Copyright (C) 2019 The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DT_BINDINGS_INTERCONNECT_QCOM_OSM_L3_H | ||||
| #define __DT_BINDINGS_INTERCONNECT_QCOM_OSM_L3_H | ||||
| 
 | ||||
| #define MASTER_OSM_L3_APPS	0 | ||||
| #define SLAVE_OSM_L3		1 | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										161
									
								
								include/dt-bindings/interconnect/qcom,sc7180.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								include/dt-bindings/interconnect/qcom,sc7180.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| /*
 | ||||
|  * Qualcomm SC7180 interconnect IDs | ||||
|  * | ||||
|  * Copyright (c) 2020, The Linux Foundation. All rights reserved. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __DT_BINDINGS_INTERCONNECT_QCOM_SC7180_H | ||||
| #define __DT_BINDINGS_INTERCONNECT_QCOM_SC7180_H | ||||
| 
 | ||||
| #define MASTER_A1NOC_CFG			0 | ||||
| #define MASTER_QSPI			1 | ||||
| #define MASTER_QUP_0			2 | ||||
| #define MASTER_SDCC_2			3 | ||||
| #define MASTER_EMMC			4 | ||||
| #define MASTER_UFS_MEM			5 | ||||
| #define SLAVE_A1NOC_SNOC			6 | ||||
| #define SLAVE_SERVICE_A1NOC			7 | ||||
| 
 | ||||
| #define MASTER_A2NOC_CFG			0 | ||||
| #define MASTER_QDSS_BAM			1 | ||||
| #define MASTER_QUP_1			2 | ||||
| #define MASTER_USB3			3 | ||||
| #define MASTER_CRYPTO			4 | ||||
| #define MASTER_IPA			5 | ||||
| #define MASTER_QDSS_ETR			6 | ||||
| #define SLAVE_A2NOC_SNOC			7 | ||||
| #define SLAVE_SERVICE_A2NOC			8 | ||||
| 
 | ||||
| #define MASTER_CAMNOC_HF0_UNCOMP			0 | ||||
| #define MASTER_CAMNOC_HF1_UNCOMP			1 | ||||
| #define MASTER_CAMNOC_SF_UNCOMP			2 | ||||
| #define SLAVE_CAMNOC_UNCOMP			3 | ||||
| 
 | ||||
| #define MASTER_NPU			0 | ||||
| #define MASTER_NPU_PROC			1 | ||||
| #define SLAVE_CDSP_GEM_NOC			2 | ||||
| 
 | ||||
| #define MASTER_SNOC_CNOC			0 | ||||
| #define MASTER_QDSS_DAP			1 | ||||
| #define SLAVE_A1NOC_CFG			2 | ||||
| #define SLAVE_A2NOC_CFG			3 | ||||
| #define SLAVE_AHB2PHY_SOUTH			4 | ||||
| #define SLAVE_AHB2PHY_CENTER			5 | ||||
| #define SLAVE_AOP			6 | ||||
| #define SLAVE_AOSS			7 | ||||
| #define SLAVE_BOOT_ROM			8 | ||||
| #define SLAVE_CAMERA_CFG				9 | ||||
| #define SLAVE_CAMERA_NRT_THROTTLE_CFG			10 | ||||
| #define SLAVE_CAMERA_RT_THROTTLE_CFG			11 | ||||
| #define SLAVE_CLK_CTL			12 | ||||
| #define SLAVE_RBCPR_CX_CFG			13 | ||||
| #define SLAVE_RBCPR_MX_CFG			14 | ||||
| #define SLAVE_CRYPTO_0_CFG			15 | ||||
| #define SLAVE_DCC_CFG			16 | ||||
| #define SLAVE_CNOC_DDRSS			17 | ||||
| #define SLAVE_DISPLAY_CFG			18 | ||||
| #define SLAVE_DISPLAY_RT_THROTTLE_CFG			19 | ||||
| #define SLAVE_DISPLAY_THROTTLE_CFG			20 | ||||
| #define SLAVE_EMMC_CFG			21 | ||||
| #define SLAVE_GLM					22 | ||||
| #define SLAVE_GFX3D_CFG			23 | ||||
| #define SLAVE_IMEM_CFG			24 | ||||
| #define SLAVE_IPA_CFG			25 | ||||
| #define SLAVE_CNOC_MNOC_CFG			26 | ||||
| #define SLAVE_CNOC_MSS			27 | ||||
| #define SLAVE_NPU_CFG			28 | ||||
| #define SLAVE_NPU_DMA_BWMON_CFG			29 | ||||
| #define SLAVE_NPU_PROC_BWMON_CFG			30 | ||||
| #define SLAVE_PDM			31 | ||||
| #define SLAVE_PIMEM_CFG			32 | ||||
| #define SLAVE_PRNG			33 | ||||
| #define SLAVE_QDSS_CFG			34 | ||||
| #define SLAVE_QM_CFG			35 | ||||
| #define SLAVE_QM_MPU_CFG			36 | ||||
| #define SLAVE_QSPI_0			37 | ||||
| #define SLAVE_QUP_0			38 | ||||
| #define SLAVE_QUP_1			39 | ||||
| #define SLAVE_SDCC_2			40 | ||||
| #define SLAVE_SECURITY			41 | ||||
| #define SLAVE_SNOC_CFG			42 | ||||
| #define SLAVE_TCSR			43 | ||||
| #define SLAVE_TLMM_WEST			44 | ||||
| #define SLAVE_TLMM_NORTH			45 | ||||
| #define SLAVE_TLMM_SOUTH			46 | ||||
| #define SLAVE_UFS_MEM_CFG			47 | ||||
| #define SLAVE_USB3			48 | ||||
| #define SLAVE_VENUS_CFG			49 | ||||
| #define SLAVE_VENUS_THROTTLE_CFG			50 | ||||
| #define SLAVE_VSENSE_CTRL_CFG			51 | ||||
| #define SLAVE_SERVICE_CNOC			52 | ||||
| 
 | ||||
| #define MASTER_CNOC_DC_NOC			0 | ||||
| #define SLAVE_GEM_NOC_CFG			1 | ||||
| #define SLAVE_LLCC_CFG			2 | ||||
| 
 | ||||
| #define MASTER_APPSS_PROC		0 | ||||
| #define MASTER_SYS_TCU			1 | ||||
| #define MASTER_GEM_NOC_CFG			2 | ||||
| #define MASTER_COMPUTE_NOC			3 | ||||
| #define MASTER_MNOC_HF_MEM_NOC			4 | ||||
| #define MASTER_MNOC_SF_MEM_NOC			5 | ||||
| #define MASTER_SNOC_GC_MEM_NOC			6 | ||||
| #define MASTER_SNOC_SF_MEM_NOC			7 | ||||
| #define MASTER_GFX3D			8 | ||||
| #define SLAVE_MSS_PROC_MS_MPU_CFG			9 | ||||
| #define SLAVE_GEM_NOC_SNOC			10 | ||||
| #define SLAVE_LLCC			11 | ||||
| #define SLAVE_SERVICE_GEM_NOC			12 | ||||
| 
 | ||||
| #define MASTER_IPA_CORE			0 | ||||
| #define SLAVE_IPA_CORE			1 | ||||
| 
 | ||||
| #define MASTER_LLCC			0 | ||||
| #define SLAVE_EBI1			1 | ||||
| 
 | ||||
| #define MASTER_CNOC_MNOC_CFG			0 | ||||
| #define MASTER_CAMNOC_HF0			1 | ||||
| #define MASTER_CAMNOC_HF1			2 | ||||
| #define MASTER_CAMNOC_SF			3 | ||||
| #define MASTER_MDP0			4 | ||||
| #define MASTER_ROTATOR			5 | ||||
| #define MASTER_VIDEO_P0			6 | ||||
| #define MASTER_VIDEO_PROC			7 | ||||
| #define SLAVE_MNOC_HF_MEM_NOC			8 | ||||
| #define SLAVE_MNOC_SF_MEM_NOC			9 | ||||
| #define SLAVE_SERVICE_MNOC			10 | ||||
| 
 | ||||
| #define MASTER_NPU_SYS			0 | ||||
| #define MASTER_NPU_NOC_CFG			1 | ||||
| #define SLAVE_NPU_CAL_DP0			2 | ||||
| #define SLAVE_NPU_CP			3 | ||||
| #define SLAVE_NPU_INT_DMA_BWMON_CFG			4 | ||||
| #define SLAVE_NPU_DPM			5 | ||||
| #define SLAVE_ISENSE_CFG			6 | ||||
| #define SLAVE_NPU_LLM_CFG			7 | ||||
| #define SLAVE_NPU_TCM			8 | ||||
| #define SLAVE_NPU_COMPUTE_NOC			9 | ||||
| #define SLAVE_SERVICE_NPU_NOC			10 | ||||
| 
 | ||||
| #define MASTER_QUP_CORE_0			0 | ||||
| #define MASTER_QUP_CORE_1			1 | ||||
| #define SLAVE_QUP_CORE_0			2 | ||||
| #define SLAVE_QUP_CORE_1			3 | ||||
| 
 | ||||
| #define MASTER_SNOC_CFG			0 | ||||
| #define MASTER_A1NOC_SNOC			1 | ||||
| #define MASTER_A2NOC_SNOC			2 | ||||
| #define MASTER_GEM_NOC_SNOC			3 | ||||
| #define MASTER_PIMEM			4 | ||||
| #define SLAVE_APPSS			5 | ||||
| #define SLAVE_SNOC_CNOC			6 | ||||
| #define SLAVE_SNOC_GEM_NOC_GC			7 | ||||
| #define SLAVE_SNOC_GEM_NOC_SF			8 | ||||
| #define SLAVE_IMEM			9 | ||||
| #define SLAVE_PIMEM			10 | ||||
| #define SLAVE_SERVICE_SNOC			11 | ||||
| #define SLAVE_QDSS_STM			12 | ||||
| #define SLAVE_TCU			13 | ||||
| 
 | ||||
| #endif | ||||
| @ -10,134 +10,139 @@ | ||||
| #define __DT_BINDINGS_INTERCONNECT_QCOM_SDM845_H | ||||
| 
 | ||||
| #define MASTER_A1NOC_CFG		0 | ||||
| #define MASTER_BLSP_1			1 | ||||
| #define MASTER_TSIF			2 | ||||
| #define MASTER_SDCC_2			3 | ||||
| #define MASTER_SDCC_4			4 | ||||
| #define MASTER_UFS_CARD			5 | ||||
| #define MASTER_UFS_MEM			6 | ||||
| #define MASTER_PCIE_0			7 | ||||
| #define MASTER_A2NOC_CFG		8 | ||||
| #define MASTER_QDSS_BAM			9 | ||||
| #define MASTER_BLSP_2			10 | ||||
| #define MASTER_CNOC_A2NOC		11 | ||||
| #define MASTER_CRYPTO			12 | ||||
| #define MASTER_IPA			13 | ||||
| #define MASTER_PCIE_1			14 | ||||
| #define MASTER_QDSS_ETR			15 | ||||
| #define MASTER_USB3_0			16 | ||||
| #define MASTER_USB3_1			17 | ||||
| #define MASTER_CAMNOC_HF0_UNCOMP	18 | ||||
| #define MASTER_CAMNOC_HF1_UNCOMP	19 | ||||
| #define MASTER_CAMNOC_SF_UNCOMP		20 | ||||
| #define MASTER_SPDM			21 | ||||
| #define MASTER_TIC			22 | ||||
| #define MASTER_SNOC_CNOC		23 | ||||
| #define MASTER_QDSS_DAP			24 | ||||
| #define MASTER_CNOC_DC_NOC		25 | ||||
| #define MASTER_APPSS_PROC		26 | ||||
| #define MASTER_GNOC_CFG			27 | ||||
| #define MASTER_LLCC			28 | ||||
| #define MASTER_TCU_0			29 | ||||
| #define MASTER_MEM_NOC_CFG		30 | ||||
| #define MASTER_GNOC_MEM_NOC		31 | ||||
| #define MASTER_MNOC_HF_MEM_NOC		32 | ||||
| #define MASTER_MNOC_SF_MEM_NOC		33 | ||||
| #define MASTER_SNOC_GC_MEM_NOC		34 | ||||
| #define MASTER_SNOC_SF_MEM_NOC		35 | ||||
| #define MASTER_GFX3D			36 | ||||
| #define MASTER_CNOC_MNOC_CFG		37 | ||||
| #define MASTER_CAMNOC_HF0		38 | ||||
| #define MASTER_CAMNOC_HF1		39 | ||||
| #define MASTER_CAMNOC_SF		40 | ||||
| #define MASTER_MDP0			41 | ||||
| #define MASTER_MDP1			42 | ||||
| #define MASTER_ROTATOR			43 | ||||
| #define MASTER_VIDEO_P0			44 | ||||
| #define MASTER_VIDEO_P1			45 | ||||
| #define MASTER_VIDEO_PROC		46 | ||||
| #define MASTER_SNOC_CFG			47 | ||||
| #define MASTER_A1NOC_SNOC		48 | ||||
| #define MASTER_A2NOC_SNOC		49 | ||||
| #define MASTER_GNOC_SNOC		50 | ||||
| #define MASTER_MEM_NOC_SNOC		51 | ||||
| #define MASTER_ANOC_PCIE_SNOC		52 | ||||
| #define MASTER_PIMEM			53 | ||||
| #define MASTER_GIC			54 | ||||
| #define SLAVE_A1NOC_SNOC		55 | ||||
| #define SLAVE_SERVICE_A1NOC		56 | ||||
| #define SLAVE_ANOC_PCIE_A1NOC_SNOC	57 | ||||
| #define SLAVE_A2NOC_SNOC		58 | ||||
| #define SLAVE_ANOC_PCIE_SNOC		59 | ||||
| #define SLAVE_SERVICE_A2NOC		60 | ||||
| #define SLAVE_CAMNOC_UNCOMP		61 | ||||
| #define SLAVE_A1NOC_CFG			62 | ||||
| #define SLAVE_A2NOC_CFG			63 | ||||
| #define SLAVE_AOP			64 | ||||
| #define SLAVE_AOSS			65 | ||||
| #define SLAVE_CAMERA_CFG		66 | ||||
| #define SLAVE_CLK_CTL			67 | ||||
| #define SLAVE_CDSP_CFG			68 | ||||
| #define SLAVE_RBCPR_CX_CFG		69 | ||||
| #define SLAVE_CRYPTO_0_CFG		70 | ||||
| #define SLAVE_DCC_CFG			71 | ||||
| #define SLAVE_CNOC_DDRSS		72 | ||||
| #define SLAVE_DISPLAY_CFG		73 | ||||
| #define SLAVE_GLM			74 | ||||
| #define SLAVE_GFX3D_CFG			75 | ||||
| #define SLAVE_IMEM_CFG			76 | ||||
| #define SLAVE_IPA_CFG			77 | ||||
| #define SLAVE_CNOC_MNOC_CFG		78 | ||||
| #define SLAVE_PCIE_0_CFG		79 | ||||
| #define SLAVE_PCIE_1_CFG		80 | ||||
| #define SLAVE_PDM			81 | ||||
| #define SLAVE_SOUTH_PHY_CFG		82 | ||||
| #define SLAVE_PIMEM_CFG			83 | ||||
| #define SLAVE_PRNG			84 | ||||
| #define SLAVE_QDSS_CFG			85 | ||||
| #define SLAVE_BLSP_2			86 | ||||
| #define SLAVE_BLSP_1			87 | ||||
| #define SLAVE_SDCC_2			88 | ||||
| #define SLAVE_SDCC_4			89 | ||||
| #define SLAVE_SNOC_CFG			90 | ||||
| #define SLAVE_SPDM_WRAPPER		91 | ||||
| #define SLAVE_SPSS_CFG			92 | ||||
| #define SLAVE_TCSR			93 | ||||
| #define SLAVE_TLMM_NORTH		94 | ||||
| #define SLAVE_TLMM_SOUTH		95 | ||||
| #define SLAVE_TSIF			96 | ||||
| #define SLAVE_UFS_CARD_CFG		97 | ||||
| #define SLAVE_UFS_MEM_CFG		98 | ||||
| #define SLAVE_USB3_0			99 | ||||
| #define SLAVE_USB3_1			100 | ||||
| #define SLAVE_VENUS_CFG			101 | ||||
| #define SLAVE_VSENSE_CTRL_CFG		102 | ||||
| #define SLAVE_CNOC_A2NOC		103 | ||||
| #define SLAVE_SERVICE_CNOC		104 | ||||
| #define SLAVE_LLCC_CFG			105 | ||||
| #define SLAVE_MEM_NOC_CFG		106 | ||||
| #define SLAVE_GNOC_SNOC			107 | ||||
| #define SLAVE_GNOC_MEM_NOC		108 | ||||
| #define SLAVE_SERVICE_GNOC		109 | ||||
| #define SLAVE_EBI1			110 | ||||
| #define SLAVE_MSS_PROC_MS_MPU_CFG	111 | ||||
| #define SLAVE_MEM_NOC_GNOC		112 | ||||
| #define SLAVE_LLCC			113 | ||||
| #define SLAVE_MEM_NOC_SNOC		114 | ||||
| #define SLAVE_SERVICE_MEM_NOC		115 | ||||
| #define SLAVE_MNOC_SF_MEM_NOC		116 | ||||
| #define SLAVE_MNOC_HF_MEM_NOC		117 | ||||
| #define SLAVE_SERVICE_MNOC		118 | ||||
| #define SLAVE_APPSS			119 | ||||
| #define SLAVE_SNOC_CNOC			120 | ||||
| #define SLAVE_SNOC_MEM_NOC_GC		121 | ||||
| #define SLAVE_SNOC_MEM_NOC_SF		122 | ||||
| #define SLAVE_IMEM			123 | ||||
| #define SLAVE_PCIE_0			124 | ||||
| #define SLAVE_PCIE_1			125 | ||||
| #define SLAVE_PIMEM			126 | ||||
| #define SLAVE_SERVICE_SNOC		127 | ||||
| #define SLAVE_QDSS_STM			128 | ||||
| #define SLAVE_TCU			129 | ||||
| #define MASTER_TSIF			1 | ||||
| #define MASTER_SDCC_2			2 | ||||
| #define MASTER_SDCC_4			3 | ||||
| #define MASTER_UFS_CARD			4 | ||||
| #define MASTER_UFS_MEM			5 | ||||
| #define MASTER_PCIE_0			6 | ||||
| #define SLAVE_A1NOC_SNOC		7 | ||||
| #define SLAVE_SERVICE_A1NOC		8 | ||||
| #define SLAVE_ANOC_PCIE_A1NOC_SNOC	9 | ||||
| 
 | ||||
| #define MASTER_A2NOC_CFG		0 | ||||
| #define MASTER_QDSS_BAM			1 | ||||
| #define MASTER_CNOC_A2NOC		2 | ||||
| #define MASTER_CRYPTO			3 | ||||
| #define MASTER_IPA			4 | ||||
| #define MASTER_PCIE_1			5 | ||||
| #define MASTER_QDSS_ETR			6 | ||||
| #define MASTER_USB3_0			7 | ||||
| #define MASTER_USB3_1			8 | ||||
| #define SLAVE_A2NOC_SNOC		9 | ||||
| #define SLAVE_ANOC_PCIE_SNOC		10 | ||||
| #define SLAVE_SERVICE_A2NOC		11 | ||||
| 
 | ||||
| #define MASTER_SPDM			0 | ||||
| #define MASTER_TIC			1 | ||||
| #define MASTER_SNOC_CNOC		2 | ||||
| #define MASTER_QDSS_DAP			3 | ||||
| #define SLAVE_A1NOC_CFG			4 | ||||
| #define SLAVE_A2NOC_CFG			5 | ||||
| #define SLAVE_AOP			6 | ||||
| #define SLAVE_AOSS			7 | ||||
| #define SLAVE_CAMERA_CFG		8 | ||||
| #define SLAVE_CLK_CTL			9 | ||||
| #define SLAVE_CDSP_CFG			10 | ||||
| #define SLAVE_RBCPR_CX_CFG		11 | ||||
| #define SLAVE_CRYPTO_0_CFG		12 | ||||
| #define SLAVE_DCC_CFG			13 | ||||
| #define SLAVE_CNOC_DDRSS		14 | ||||
| #define SLAVE_DISPLAY_CFG		15 | ||||
| #define SLAVE_GLM			16 | ||||
| #define SLAVE_GFX3D_CFG			17 | ||||
| #define SLAVE_IMEM_CFG			18 | ||||
| #define SLAVE_IPA_CFG			19 | ||||
| #define SLAVE_CNOC_MNOC_CFG		20 | ||||
| #define SLAVE_PCIE_0_CFG		21 | ||||
| #define SLAVE_PCIE_1_CFG		22 | ||||
| #define SLAVE_PDM			23 | ||||
| #define SLAVE_SOUTH_PHY_CFG		24 | ||||
| #define SLAVE_PIMEM_CFG			25 | ||||
| #define SLAVE_PRNG			26 | ||||
| #define SLAVE_QDSS_CFG			27 | ||||
| #define SLAVE_BLSP_2			28 | ||||
| #define SLAVE_BLSP_1			29 | ||||
| #define SLAVE_SDCC_2			30 | ||||
| #define SLAVE_SDCC_4			31 | ||||
| #define SLAVE_SNOC_CFG			32 | ||||
| #define SLAVE_SPDM_WRAPPER		33 | ||||
| #define SLAVE_SPSS_CFG			34 | ||||
| #define SLAVE_TCSR			35 | ||||
| #define SLAVE_TLMM_NORTH		36 | ||||
| #define SLAVE_TLMM_SOUTH		37 | ||||
| #define SLAVE_TSIF			38 | ||||
| #define SLAVE_UFS_CARD_CFG		39 | ||||
| #define SLAVE_UFS_MEM_CFG		40 | ||||
| #define SLAVE_USB3_0			41 | ||||
| #define SLAVE_USB3_1			42 | ||||
| #define SLAVE_VENUS_CFG			43 | ||||
| #define SLAVE_VSENSE_CTRL_CFG		44 | ||||
| #define SLAVE_CNOC_A2NOC		45 | ||||
| #define SLAVE_SERVICE_CNOC		46 | ||||
| 
 | ||||
| #define MASTER_CNOC_DC_NOC		0 | ||||
| #define SLAVE_LLCC_CFG			1 | ||||
| #define SLAVE_MEM_NOC_CFG		2 | ||||
| 
 | ||||
| #define MASTER_APPSS_PROC		0 | ||||
| #define MASTER_GNOC_CFG			1 | ||||
| #define SLAVE_GNOC_SNOC			2 | ||||
| #define SLAVE_GNOC_MEM_NOC		3 | ||||
| #define SLAVE_SERVICE_GNOC		4 | ||||
| 
 | ||||
| #define MASTER_TCU_0			0 | ||||
| #define MASTER_MEM_NOC_CFG		1 | ||||
| #define MASTER_GNOC_MEM_NOC		2 | ||||
| #define MASTER_MNOC_HF_MEM_NOC		3 | ||||
| #define MASTER_MNOC_SF_MEM_NOC		4 | ||||
| #define MASTER_SNOC_GC_MEM_NOC		5 | ||||
| #define MASTER_SNOC_SF_MEM_NOC		6 | ||||
| #define MASTER_GFX3D			7 | ||||
| #define SLAVE_MSS_PROC_MS_MPU_CFG	8 | ||||
| #define SLAVE_MEM_NOC_GNOC		9 | ||||
| #define SLAVE_LLCC			10 | ||||
| #define SLAVE_MEM_NOC_SNOC		11 | ||||
| #define SLAVE_SERVICE_MEM_NOC		12 | ||||
| #define MASTER_LLCC			13 | ||||
| #define SLAVE_EBI1			14 | ||||
| 
 | ||||
| #define MASTER_CNOC_MNOC_CFG		0 | ||||
| #define MASTER_CAMNOC_HF0		1 | ||||
| #define MASTER_CAMNOC_HF1		2 | ||||
| #define MASTER_CAMNOC_SF		3 | ||||
| #define MASTER_MDP0			4 | ||||
| #define MASTER_MDP1			5 | ||||
| #define MASTER_ROTATOR			6 | ||||
| #define MASTER_VIDEO_P0			7 | ||||
| #define MASTER_VIDEO_P1			8 | ||||
| #define MASTER_VIDEO_PROC		9 | ||||
| #define SLAVE_MNOC_SF_MEM_NOC		10 | ||||
| #define SLAVE_MNOC_HF_MEM_NOC		11 | ||||
| #define SLAVE_SERVICE_MNOC		12 | ||||
| #define MASTER_CAMNOC_HF0_UNCOMP	13 | ||||
| #define MASTER_CAMNOC_HF1_UNCOMP	14 | ||||
| #define MASTER_CAMNOC_SF_UNCOMP		15 | ||||
| #define SLAVE_CAMNOC_UNCOMP		16 | ||||
| 
 | ||||
| #define MASTER_SNOC_CFG			0 | ||||
| #define MASTER_A1NOC_SNOC		1 | ||||
| #define MASTER_A2NOC_SNOC		2 | ||||
| #define MASTER_GNOC_SNOC		3 | ||||
| #define MASTER_MEM_NOC_SNOC		4 | ||||
| #define MASTER_ANOC_PCIE_SNOC		5 | ||||
| #define MASTER_PIMEM			6 | ||||
| #define MASTER_GIC			7 | ||||
| #define SLAVE_APPSS			8 | ||||
| #define SLAVE_SNOC_CNOC			9 | ||||
| #define SLAVE_SNOC_MEM_NOC_GC		10 | ||||
| #define SLAVE_SNOC_MEM_NOC_SF		11 | ||||
| #define SLAVE_IMEM			12 | ||||
| #define SLAVE_PCIE_0			13 | ||||
| #define SLAVE_PCIE_1			14 | ||||
| #define SLAVE_PIMEM			15 | ||||
| #define SLAVE_SERVICE_SNOC		16 | ||||
| #define SLAVE_QDSS_STM			17 | ||||
| #define SLAVE_TCU			18 | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user