All of lore.kernel.org
 help / color / mirror / Atom feed
* [arm-perf:for-next/perf 6/7] drivers/perf/arm-cmn.c:2248:35: sparse: sparse: duplicate [noderef]
@ 2025-07-05 12:01 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-07-05 12:01 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp

:::::: 
:::::: Manual check reason: "low confidence static check warning: drivers/perf/arm-cmn.c:2248:35: sparse: sparse: duplicate [noderef]"
:::::: 

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Robin Murphy <robin.murphy@arm.com>
CC: Will Deacon <will@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git for-next/perf
head:   860a831de138a7ad6bc86019adaf10eb84c02655
commit: a7bfae21457c3e46d16868c0bc923e509b4a83e2 [6/7] perf/arm-cmn: Reduce stack usage during discovery
:::::: branch date: 19 hours ago
:::::: commit date: 19 hours ago
config: loongarch-randconfig-r122-20250705 (https://download.01.org/0day-ci/archive/20250705/202507051925.uicPEC8T-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce: (https://download.01.org/0day-ci/archive/20250705/202507051925.uicPEC8T-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202507051925.uicPEC8T-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/perf/arm-cmn.c:2248:35: sparse: sparse: duplicate [noderef]
>> drivers/perf/arm-cmn.c:2248:35: sparse: sparse: multiple address spaces given: __iomem & __iomem

vim +2248 drivers/perf/arm-cmn.c

8e504d93acb647 Robin Murphy   2022-04-18  2245  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2246  static int arm_cmn_discover(struct arm_cmn *cmn, unsigned int rgn_offset)
0ba64770a2f2e5 Robin Murphy   2020-09-18  2247  {
a7bfae21457c3e Robin Murphy   2025-06-27 @2248  	void __iomem *cfg_region, __iomem *xp_region;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2249  	struct arm_cmn_node cfg, *dn;
0947c80aba2397 Robin Murphy   2021-12-03  2250  	struct arm_cmn_dtm *dtm;
7819e05a0dceac Robin Murphy   2023-06-12  2251  	enum cmn_part part;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2252  	u16 child_count, child_poff;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2253  	u64 reg;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2254  	int i, j;
da5f7d2c8019c9 Robin Murphy   2021-12-03  2255  	size_t sz;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2256  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2257  	arm_cmn_init_node_info(cmn, rgn_offset, &cfg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2258  	if (cfg.type != CMN_TYPE_CFG)
0ba64770a2f2e5 Robin Murphy   2020-09-18  2259  		return -ENODEV;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2260  
61ec1d87581204 Robin Murphy   2021-12-03  2261  	cfg_region = cmn->base + rgn_offset;
7819e05a0dceac Robin Murphy   2023-06-12  2262  
7819e05a0dceac Robin Murphy   2023-06-12  2263  	reg = readq_relaxed(cfg_region + CMN_CFGM_PERIPH_ID_01);
7819e05a0dceac Robin Murphy   2023-06-12  2264  	part = FIELD_GET(CMN_CFGM_PID0_PART_0, reg);
7819e05a0dceac Robin Murphy   2023-06-12  2265  	part |= FIELD_GET(CMN_CFGM_PID1_PART_1, reg) << 8;
7819e05a0dceac Robin Murphy   2023-06-12  2266  	if (cmn->part && cmn->part != part)
7819e05a0dceac Robin Murphy   2023-06-12  2267  		dev_warn(cmn->dev,
7819e05a0dceac Robin Murphy   2023-06-12  2268  			 "Firmware binding mismatch: expected part number 0x%x, found 0x%x\n",
7819e05a0dceac Robin Murphy   2023-06-12  2269  			 cmn->part, part);
7819e05a0dceac Robin Murphy   2023-06-12  2270  	cmn->part = part;
7819e05a0dceac Robin Murphy   2023-06-12  2271  	if (!arm_cmn_model(cmn))
7819e05a0dceac Robin Murphy   2023-06-12  2272  		dev_warn(cmn->dev, "Unknown part number: 0x%x\n", part);
7819e05a0dceac Robin Murphy   2023-06-12  2273  
7819e05a0dceac Robin Murphy   2023-06-12  2274  	reg = readl_relaxed(cfg_region + CMN_CFGM_PERIPH_ID_23);
61ec1d87581204 Robin Murphy   2021-12-03  2275  	cmn->rev = FIELD_GET(CMN_CFGM_PID2_REVISION, reg);
61ec1d87581204 Robin Murphy   2021-12-03  2276  
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2277  	/*
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2278  	 * With the device isolation feature, if firmware has neglected to enable
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2279  	 * an XP port then we risk locking up if we try to access anything behind
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2280  	 * it; however we also have no way to tell from Non-Secure whether any
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2281  	 * given port is disabled or not, so the only way to win is not to play...
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2282  	 */
60d1504070c22c Robin Murphy   2021-12-03  2283  	reg = readq_relaxed(cfg_region + CMN_CFGM_INFO_GLOBAL);
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2284  	if (reg & CMN_INFO_DEVICE_ISO_ENABLE) {
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2285  		dev_err(cmn->dev, "Device isolation enabled, not continuing due to risk of lockup\n");
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2286  		return -ENODEV;
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2287  	}
60d1504070c22c Robin Murphy   2021-12-03  2288  	cmn->multi_dtm = reg & CMN_INFO_MULTIPLE_DTM_EN;
60d1504070c22c Robin Murphy   2021-12-03  2289  	cmn->rsp_vc_num = FIELD_GET(CMN_INFO_RSP_VC_NUM, reg);
60d1504070c22c Robin Murphy   2021-12-03  2290  	cmn->dat_vc_num = FIELD_GET(CMN_INFO_DAT_VC_NUM, reg);
60d1504070c22c Robin Murphy   2021-12-03  2291  
23760a0144173e Robin Murphy   2022-04-18  2292  	reg = readq_relaxed(cfg_region + CMN_CFGM_INFO_GLOBAL_1);
23760a0144173e Robin Murphy   2022-04-18  2293  	cmn->snp_vc_num = FIELD_GET(CMN_INFO_SNP_VC_NUM, reg);
23760a0144173e Robin Murphy   2022-04-18  2294  	cmn->req_vc_num = FIELD_GET(CMN_INFO_REQ_VC_NUM, reg);
23760a0144173e Robin Murphy   2022-04-18  2295  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2296  	reg = readq_relaxed(cfg_region + CMN_CHILD_INFO);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2297  	child_count = FIELD_GET(CMN_CI_CHILD_COUNT, reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2298  	child_poff = FIELD_GET(CMN_CI_CHILD_PTR_OFFSET, reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2299  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2300  	cmn->num_xps = child_count;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2301  	cmn->num_dns = cmn->num_xps;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2302  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2303  	/* Pass 1: visit the XPs, enumerate their children */
a7bfae21457c3e Robin Murphy   2025-06-27  2304  	cfg_region += child_poff;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2305  	for (i = 0; i < cmn->num_xps; i++) {
a7bfae21457c3e Robin Murphy   2025-06-27  2306  		reg = readq_relaxed(cfg_region + i * 8);
a7bfae21457c3e Robin Murphy   2025-06-27  2307  		xp_region = cmn->base + (reg & CMN_CHILD_NODE_ADDR);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2308  
a7bfae21457c3e Robin Murphy   2025-06-27  2309  		reg = readq_relaxed(xp_region + CMN_CHILD_INFO);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2310  		cmn->num_dns += FIELD_GET(CMN_CI_CHILD_COUNT, reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2311  	}
0ba64770a2f2e5 Robin Murphy   2020-09-18  2312  
8e504d93acb647 Robin Murphy   2022-04-18  2313  	/*
8e504d93acb647 Robin Murphy   2022-04-18  2314  	 * Some nodes effectively have two separate types, which we'll handle
8e504d93acb647 Robin Murphy   2022-04-18  2315  	 * by creating one of each internally. For a (very) safe initial upper
8e504d93acb647 Robin Murphy   2022-04-18  2316  	 * bound, account for double the number of non-XP nodes.
8e504d93acb647 Robin Murphy   2022-04-18  2317  	 */
8e504d93acb647 Robin Murphy   2022-04-18  2318  	dn = devm_kcalloc(cmn->dev, cmn->num_dns * 2 - cmn->num_xps,
8e504d93acb647 Robin Murphy   2022-04-18  2319  			  sizeof(*dn), GFP_KERNEL);
da5f7d2c8019c9 Robin Murphy   2021-12-03  2320  	if (!dn)
0ba64770a2f2e5 Robin Murphy   2020-09-18  2321  		return -ENOMEM;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2322  
60d1504070c22c Robin Murphy   2021-12-03  2323  	/* Initial safe upper bound on DTMs for any possible mesh layout */
60d1504070c22c Robin Murphy   2021-12-03  2324  	i = cmn->num_xps;
60d1504070c22c Robin Murphy   2021-12-03  2325  	if (cmn->multi_dtm)
60d1504070c22c Robin Murphy   2021-12-03  2326  		i += cmn->num_xps + 1;
60d1504070c22c Robin Murphy   2021-12-03  2327  	dtm = devm_kcalloc(cmn->dev, i, sizeof(*dtm), GFP_KERNEL);
0947c80aba2397 Robin Murphy   2021-12-03  2328  	if (!dtm)
0947c80aba2397 Robin Murphy   2021-12-03  2329  		return -ENOMEM;
0947c80aba2397 Robin Murphy   2021-12-03  2330  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2331  	/* Pass 2: now we can actually populate the nodes */
da5f7d2c8019c9 Robin Murphy   2021-12-03  2332  	cmn->dns = dn;
0947c80aba2397 Robin Murphy   2021-12-03  2333  	cmn->dtms = dtm;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2334  	for (i = 0; i < cmn->num_xps; i++) {
0ba64770a2f2e5 Robin Murphy   2020-09-18  2335  		struct arm_cmn_node *xp = dn++;
60d1504070c22c Robin Murphy   2021-12-03  2336  		unsigned int xp_ports = 0;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2337  
a7bfae21457c3e Robin Murphy   2025-06-27  2338  		reg = readq_relaxed(cfg_region + i * 8);
a7bfae21457c3e Robin Murphy   2025-06-27  2339  		xp_region = cmn->base + (reg & CMN_CHILD_NODE_ADDR);
a7bfae21457c3e Robin Murphy   2025-06-27  2340  		arm_cmn_init_node_info(cmn, reg & CMN_CHILD_NODE_ADDR, xp);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2341  		/*
0ba64770a2f2e5 Robin Murphy   2020-09-18  2342  		 * Thanks to the order in which XP logical IDs seem to be
0ba64770a2f2e5 Robin Murphy   2020-09-18  2343  		 * assigned, we can handily infer the mesh X dimension by
0ba64770a2f2e5 Robin Murphy   2020-09-18  2344  		 * looking out for the XP at (0,1) without needing to know
0ba64770a2f2e5 Robin Murphy   2020-09-18  2345  		 * the exact node ID format, which we can later derive.
0ba64770a2f2e5 Robin Murphy   2020-09-18  2346  		 */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2347  		if (xp->id == (1 << 3))
0ba64770a2f2e5 Robin Murphy   2020-09-18  2348  			cmn->mesh_x = xp->logid;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2349  
7819e05a0dceac Robin Murphy   2023-06-12  2350  		if (cmn->part == PART_CMN600)
7633ec2c262fab Robin Murphy   2023-10-20  2351  			xp->dtc = -1;
60d1504070c22c Robin Murphy   2021-12-03  2352  		else
7633ec2c262fab Robin Murphy   2023-10-20  2353  			xp->dtc = arm_cmn_dtc_domain(cmn, xp_region);
60d1504070c22c Robin Murphy   2021-12-03  2354  
0947c80aba2397 Robin Murphy   2021-12-03  2355  		xp->dtm = dtm - cmn->dtms;
60d1504070c22c Robin Murphy   2021-12-03  2356  		arm_cmn_init_dtm(dtm++, xp, 0);
60d1504070c22c Robin Murphy   2021-12-03  2357  		/*
60d1504070c22c Robin Murphy   2021-12-03  2358  		 * Keeping track of connected ports will let us filter out
e79634b53e3989 Robin Murphy   2024-09-02  2359  		 * unnecessary XP events easily, and also infer the per-XP
e79634b53e3989 Robin Murphy   2024-09-02  2360  		 * part of the node ID format.
60d1504070c22c Robin Murphy   2021-12-03  2361  		 */
2ad91e44e6b0c7 Robin Murphy   2023-04-12  2362  		for (int p = 0; p < CMN_MAX_PORTS; p++)
2ad91e44e6b0c7 Robin Murphy   2023-04-12  2363  			if (arm_cmn_device_connect_info(cmn, xp, p))
2ad91e44e6b0c7 Robin Murphy   2023-04-12  2364  				xp_ports |= BIT(p);
60d1504070c22c Robin Murphy   2021-12-03  2365  
e79634b53e3989 Robin Murphy   2024-09-02  2366  		if (cmn->num_xps == 1) {
e79634b53e3989 Robin Murphy   2024-09-02  2367  			xp->portid_bits = 3;
e79634b53e3989 Robin Murphy   2024-09-02  2368  			xp->deviceid_bits = 2;
e79634b53e3989 Robin Murphy   2024-09-02  2369  		} else if (xp_ports > 0x3) {
e79634b53e3989 Robin Murphy   2024-09-02  2370  			xp->portid_bits = 2;
e79634b53e3989 Robin Murphy   2024-09-02  2371  			xp->deviceid_bits = 1;
e79634b53e3989 Robin Murphy   2024-09-02  2372  		} else {
e79634b53e3989 Robin Murphy   2024-09-02  2373  			xp->portid_bits = 1;
e79634b53e3989 Robin Murphy   2024-09-02  2374  			xp->deviceid_bits = 2;
e79634b53e3989 Robin Murphy   2024-09-02  2375  		}
e79634b53e3989 Robin Murphy   2024-09-02  2376  
e79634b53e3989 Robin Murphy   2024-09-02  2377  		if (cmn->multi_dtm && (xp_ports > 0x3))
60d1504070c22c Robin Murphy   2021-12-03  2378  			arm_cmn_init_dtm(dtm++, xp, 1);
e79634b53e3989 Robin Murphy   2024-09-02  2379  		if (cmn->multi_dtm && (xp_ports > 0xf))
60d1504070c22c Robin Murphy   2021-12-03  2380  			arm_cmn_init_dtm(dtm++, xp, 2);
60d1504070c22c Robin Murphy   2021-12-03  2381  
60d1504070c22c Robin Murphy   2021-12-03  2382  		cmn->ports_used |= xp_ports;
0947c80aba2397 Robin Murphy   2021-12-03  2383  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2384  		reg = readq_relaxed(xp_region + CMN_CHILD_INFO);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2385  		child_count = FIELD_GET(CMN_CI_CHILD_COUNT, reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2386  		child_poff = FIELD_GET(CMN_CI_CHILD_PTR_OFFSET, reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2387  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2388  		for (j = 0; j < child_count; j++) {
0ba64770a2f2e5 Robin Murphy   2020-09-18  2389  			reg = readq_relaxed(xp_region + child_poff + j * 8);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2390  			/*
0ba64770a2f2e5 Robin Murphy   2020-09-18  2391  			 * Don't even try to touch anything external, since in general
0ba64770a2f2e5 Robin Murphy   2020-09-18  2392  			 * we haven't a clue how to power up arbitrary CHI requesters.
0ba64770a2f2e5 Robin Murphy   2020-09-18  2393  			 * As of CMN-600r1 these could only be RN-SAMs or CXLAs,
0ba64770a2f2e5 Robin Murphy   2020-09-18  2394  			 * neither of which have any PMU events anyway.
0ba64770a2f2e5 Robin Murphy   2020-09-18  2395  			 * (Actually, CXLAs do seem to have grown some events in r1p2,
0ba64770a2f2e5 Robin Murphy   2020-09-18  2396  			 * but they don't go to regular XP DTMs, and they depend on
0ba64770a2f2e5 Robin Murphy   2020-09-18  2397  			 * secure configuration which we can't easily deal with)
0ba64770a2f2e5 Robin Murphy   2020-09-18  2398  			 */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2399  			if (reg & CMN_CHILD_NODE_EXTERNAL) {
0ba64770a2f2e5 Robin Murphy   2020-09-18  2400  				dev_dbg(cmn->dev, "ignoring external node %llx\n", reg);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2401  				continue;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2402  			}
50572064ec7109 Ilkka Koskinen 2024-02-09  2403  			/*
50572064ec7109 Ilkka Koskinen 2024-02-09  2404  			 * AmpereOneX erratum AC04_MESH_1 makes some XPs report a bogus
50572064ec7109 Ilkka Koskinen 2024-02-09  2405  			 * child count larger than the number of valid child pointers.
50572064ec7109 Ilkka Koskinen 2024-02-09  2406  			 * A child offset of 0 can only occur on CMN-600; otherwise it
50572064ec7109 Ilkka Koskinen 2024-02-09  2407  			 * would imply the root node being its own grandchild, which
50572064ec7109 Ilkka Koskinen 2024-02-09  2408  			 * we can safely dismiss in general.
50572064ec7109 Ilkka Koskinen 2024-02-09  2409  			 */
50572064ec7109 Ilkka Koskinen 2024-02-09  2410  			if (reg == 0 && cmn->part != PART_CMN600) {
50572064ec7109 Ilkka Koskinen 2024-02-09  2411  				dev_dbg(cmn->dev, "bogus child pointer?\n");
50572064ec7109 Ilkka Koskinen 2024-02-09  2412  				continue;
50572064ec7109 Ilkka Koskinen 2024-02-09  2413  			}
0ba64770a2f2e5 Robin Murphy   2020-09-18  2414  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2415  			arm_cmn_init_node_info(cmn, reg & CMN_CHILD_NODE_ADDR, dn);
dfdf714fed559c Namhyung Kim   2024-11-20  2416  			dn->portid_bits = xp->portid_bits;
dfdf714fed559c Namhyung Kim   2024-11-20  2417  			dn->deviceid_bits = xp->deviceid_bits;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2418  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2419  			switch (dn->type) {
0ba64770a2f2e5 Robin Murphy   2020-09-18  2420  			case CMN_TYPE_DTC:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2421  				cmn->num_dtcs++;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2422  				dn++;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2423  				break;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2424  			/* These guys have PMU events */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2425  			case CMN_TYPE_DVM:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2426  			case CMN_TYPE_HNI:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2427  			case CMN_TYPE_HNF:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2428  			case CMN_TYPE_SBSX:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2429  			case CMN_TYPE_RNI:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2430  			case CMN_TYPE_RND:
60d1504070c22c Robin Murphy   2021-12-03  2431  			case CMN_TYPE_MTSX:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2432  			case CMN_TYPE_CXRA:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2433  			case CMN_TYPE_CXHA:
23760a0144173e Robin Murphy   2022-04-18  2434  			case CMN_TYPE_CCRA:
23760a0144173e Robin Murphy   2022-04-18  2435  			case CMN_TYPE_CCHA:
ac18ea1a893592 Robin Murphy   2023-07-07  2436  			case CMN_TYPE_HNS:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2437  				dn++;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2438  				break;
88b63a82c84ed9 Robin Murphy   2024-09-02  2439  			case CMN_TYPE_CCLA:
88b63a82c84ed9 Robin Murphy   2024-09-02  2440  				dn->pmu_base += CMN_CCLA_PMU_EVENT_SEL;
88b63a82c84ed9 Robin Murphy   2024-09-02  2441  				dn++;
88b63a82c84ed9 Robin Murphy   2024-09-02  2442  				break;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2443  			/* Nothing to see here */
60d1504070c22c Robin Murphy   2021-12-03  2444  			case CMN_TYPE_MPAM_S:
60d1504070c22c Robin Murphy   2021-12-03  2445  			case CMN_TYPE_MPAM_NS:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2446  			case CMN_TYPE_RNSAM:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2447  			case CMN_TYPE_CXLA:
ac18ea1a893592 Robin Murphy   2023-07-07  2448  			case CMN_TYPE_HNS_MPAM_S:
ac18ea1a893592 Robin Murphy   2023-07-07  2449  			case CMN_TYPE_HNS_MPAM_NS:
0dc2f4963f7ef1 Robin Murphy   2024-09-02  2450  			case CMN_TYPE_APB:
0ba64770a2f2e5 Robin Murphy   2020-09-18  2451  				break;
8e504d93acb647 Robin Murphy   2022-04-18  2452  			/*
8e504d93acb647 Robin Murphy   2022-04-18  2453  			 * Split "optimised" combination nodes into separate
8e504d93acb647 Robin Murphy   2022-04-18  2454  			 * types for the different event sets. Offsetting the
8e504d93acb647 Robin Murphy   2022-04-18  2455  			 * base address lets us handle the second pmu_event_sel
8e504d93acb647 Robin Murphy   2022-04-18  2456  			 * register via the normal mechanism later.
8e504d93acb647 Robin Murphy   2022-04-18  2457  			 */
8e504d93acb647 Robin Murphy   2022-04-18  2458  			case CMN_TYPE_HNP:
23760a0144173e Robin Murphy   2022-04-18  2459  			case CMN_TYPE_CCLA_RNI:
8e504d93acb647 Robin Murphy   2022-04-18  2460  				dn[1] = dn[0];
88b63a82c84ed9 Robin Murphy   2024-09-02  2461  				dn[0].pmu_base += CMN_CCLA_PMU_EVENT_SEL;
8e504d93acb647 Robin Murphy   2022-04-18  2462  				dn[1].type = arm_cmn_subtype(dn->type);
8e504d93acb647 Robin Murphy   2022-04-18  2463  				dn += 2;
8e504d93acb647 Robin Murphy   2022-04-18  2464  				break;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2465  			/* Something has gone horribly wrong */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2466  			default:
887e2cff0f8dc4 Will Deacon    2020-10-01  2467  				dev_err(cmn->dev, "invalid device node type: 0x%x\n", dn->type);
0ba64770a2f2e5 Robin Murphy   2020-09-18  2468  				return -ENODEV;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2469  			}
0ba64770a2f2e5 Robin Murphy   2020-09-18  2470  		}
0ba64770a2f2e5 Robin Murphy   2020-09-18  2471  	}
0ba64770a2f2e5 Robin Murphy   2020-09-18  2472  
8e504d93acb647 Robin Murphy   2022-04-18  2473  	/* Correct for any nodes we added or skipped */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2474  	cmn->num_dns = dn - cmn->dns;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2475  
8e504d93acb647 Robin Murphy   2022-04-18  2476  	/* Cheeky +1 to help terminate pointer-based iteration later */
da5f7d2c8019c9 Robin Murphy   2021-12-03  2477  	sz = (void *)(dn + 1) - (void *)cmn->dns;
da5f7d2c8019c9 Robin Murphy   2021-12-03  2478  	dn = devm_krealloc(cmn->dev, cmn->dns, sz, GFP_KERNEL);
da5f7d2c8019c9 Robin Murphy   2021-12-03  2479  	if (dn)
da5f7d2c8019c9 Robin Murphy   2021-12-03  2480  		cmn->dns = dn;
da5f7d2c8019c9 Robin Murphy   2021-12-03  2481  
60d1504070c22c Robin Murphy   2021-12-03  2482  	sz = (void *)dtm - (void *)cmn->dtms;
60d1504070c22c Robin Murphy   2021-12-03  2483  	dtm = devm_krealloc(cmn->dev, cmn->dtms, sz, GFP_KERNEL);
60d1504070c22c Robin Murphy   2021-12-03  2484  	if (dtm)
60d1504070c22c Robin Murphy   2021-12-03  2485  		cmn->dtms = dtm;
60d1504070c22c Robin Murphy   2021-12-03  2486  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2487  	/*
0ba64770a2f2e5 Robin Murphy   2020-09-18  2488  	 * If mesh_x wasn't set during discovery then we never saw
0ba64770a2f2e5 Robin Murphy   2020-09-18  2489  	 * an XP at (0,1), thus we must have an Nx1 configuration.
0ba64770a2f2e5 Robin Murphy   2020-09-18  2490  	 */
0ba64770a2f2e5 Robin Murphy   2020-09-18  2491  	if (!cmn->mesh_x)
0ba64770a2f2e5 Robin Murphy   2020-09-18  2492  		cmn->mesh_x = cmn->num_xps;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2493  	cmn->mesh_y = cmn->num_xps / cmn->mesh_x;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2494  
60d1504070c22c Robin Murphy   2021-12-03  2495  	/* 1x1 config plays havoc with XP event encodings */
60d1504070c22c Robin Murphy   2021-12-03  2496  	if (cmn->num_xps == 1)
60d1504070c22c Robin Murphy   2021-12-03  2497  		dev_warn(cmn->dev, "1x1 config not fully supported, translate XP events manually\n");
60d1504070c22c Robin Murphy   2021-12-03  2498  
7819e05a0dceac Robin Murphy   2023-06-12  2499  	dev_dbg(cmn->dev, "periph_id part 0x%03x revision %d\n", cmn->part, cmn->rev);
60d1504070c22c Robin Murphy   2021-12-03  2500  	reg = cmn->ports_used;
60d1504070c22c Robin Murphy   2021-12-03  2501  	dev_dbg(cmn->dev, "mesh %dx%d, ID width %d, ports %6pbl%s\n",
60d1504070c22c Robin Murphy   2021-12-03  2502  		cmn->mesh_x, cmn->mesh_y, arm_cmn_xyidbits(cmn), &reg,
60d1504070c22c Robin Murphy   2021-12-03  2503  		cmn->multi_dtm ? ", multi-DTM" : "");
0ba64770a2f2e5 Robin Murphy   2020-09-18  2504  
0ba64770a2f2e5 Robin Murphy   2020-09-18  2505  	return 0;
0ba64770a2f2e5 Robin Murphy   2020-09-18  2506  }
0ba64770a2f2e5 Robin Murphy   2020-09-18  2507  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-07-05 12:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-05 12:01 [arm-perf:for-next/perf 6/7] drivers/perf/arm-cmn.c:2248:35: sparse: sparse: duplicate [noderef] kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.