Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf/arm_cspmu: nvidia: Add revision id matching

Distinguish NVIDIA devices by revision and variant bits
in PMIIDR register in addition to product id.

Reviewed-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Signed-off-by: Besar Wicaksono <bwicaksono@nvidia.com>
Signed-off-by: Will Deacon <will@kernel.org>

authored by

Besar Wicaksono and committed by
Will Deacon
82dfd72b 04330be8

+8 -10
+8 -10
drivers/perf/arm_cspmu/nvidia_cspmu.c
··· 23 23 24 24 #define NV_GENERIC_FILTER_ID_MASK GENMASK_ULL(31, 0) 25 25 26 - #define NV_PRODID_MASK GENMASK(31, 0) 26 + #define NV_PRODID_MASK (PMIIDR_PRODUCTID | PMIIDR_VARIANT | PMIIDR_REVISION) 27 27 28 28 #define NV_FORMAT_NAME_GENERIC 0 29 29 ··· 220 220 221 221 static const struct nv_cspmu_match nv_cspmu_match[] = { 222 222 { 223 - .prodid = 0x103, 223 + .prodid = 0x10300000, 224 224 .prodid_mask = NV_PRODID_MASK, 225 225 .filter_mask = NV_PCIE_FILTER_ID_MASK, 226 226 .filter_default_val = NV_PCIE_FILTER_ID_MASK, ··· 230 230 .format_attr = pcie_pmu_format_attrs 231 231 }, 232 232 { 233 - .prodid = 0x104, 233 + .prodid = 0x10400000, 234 234 .prodid_mask = NV_PRODID_MASK, 235 235 .filter_mask = NV_NVL_C2C_FILTER_ID_MASK, 236 236 .filter_default_val = NV_NVL_C2C_FILTER_ID_MASK, ··· 240 240 .format_attr = nvlink_c2c_pmu_format_attrs 241 241 }, 242 242 { 243 - .prodid = 0x105, 243 + .prodid = 0x10500000, 244 244 .prodid_mask = NV_PRODID_MASK, 245 245 .filter_mask = NV_NVL_C2C_FILTER_ID_MASK, 246 246 .filter_default_val = NV_NVL_C2C_FILTER_ID_MASK, ··· 250 250 .format_attr = nvlink_c2c_pmu_format_attrs 251 251 }, 252 252 { 253 - .prodid = 0x106, 253 + .prodid = 0x10600000, 254 254 .prodid_mask = NV_PRODID_MASK, 255 255 .filter_mask = NV_CNVL_FILTER_ID_MASK, 256 256 .filter_default_val = NV_CNVL_FILTER_ID_MASK, ··· 260 260 .format_attr = cnvlink_pmu_format_attrs 261 261 }, 262 262 { 263 - .prodid = 0x2CF, 263 + .prodid = 0x2CF00000, 264 264 .prodid_mask = NV_PRODID_MASK, 265 265 .filter_mask = 0x0, 266 266 .filter_default_val = 0x0, ··· 312 312 313 313 static int nv_cspmu_init_ops(struct arm_cspmu *cspmu) 314 314 { 315 - u32 prodid; 316 315 struct nv_cspmu_ctx *ctx; 317 316 struct device *dev = cspmu->dev; 318 317 struct arm_cspmu_impl_ops *impl_ops = &cspmu->impl.ops; ··· 321 322 if (!ctx) 322 323 return -ENOMEM; 323 324 324 - prodid = FIELD_GET(PMIIDR_PRODUCTID, cspmu->impl.pmiidr); 325 - 326 325 /* Find matching PMU. */ 327 326 for (; match->prodid; match++) { 328 327 const u32 prodid_mask = match->prodid_mask; 329 328 330 - if ((match->prodid & prodid_mask) == (prodid & prodid_mask)) 329 + if ((match->prodid & prodid_mask) == 330 + (cspmu->impl.pmiidr & prodid_mask)) 331 331 break; 332 332 } 333 333