From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com
Subject: [arm-perf:for-next/perf 6/7] drivers/perf/arm-cmn.c:2248:35: sparse: sparse: duplicate [noderef]
Date: Sat, 5 Jul 2025 20:01:24 +0800 [thread overview]
Message-ID: <202507051925.uicPEC8T-lkp@intel.com> (raw)
::::::
:::::: 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), ®,
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
reply other threads:[~2025-07-05 12:01 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202507051925.uicPEC8T-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.