[bug report] drm/msm/a6xx: Fix llcc configuration for a660 gpu
Akhil P Oommen
akhilpo at codeaurora.org
Thu Nov 25 09:28:53 UTC 2021
On 11/25/2021 2:06 PM, Dan Carpenter wrote:
> [ Nathan, it turns out that Smatch has been broken with regards to
> uninitialized variables for a while so I'm going through my backlog
> of warnings. No idea if you already reported this one.
>
> - dan]
>
> Hello Akhil P Oommen,
>
> The patch a6f24383f6c0: "drm/msm/a6xx: Fix llcc configuration for
> a660 gpu" from Jul 30, 2021, leads to the following Smatch static
> checker warning:
>
> drivers/gpu/drm/msm/adreno/a6xx_gpu.c:1480 a6xx_llc_activate()
> error: uninitialized symbol 'gpu_scid'.
>
> drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> 1423 static void a6xx_llc_activate(struct a6xx_gpu *a6xx_gpu)
> 1424 {
> 1425 struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
> 1426 struct msm_gpu *gpu = &adreno_gpu->base;
> 1427 u32 gpu_scid, cntl1_regval = 0;
> ^^^^^^^^^^^^
>
> 1428
> 1429 if (IS_ERR(a6xx_gpu->llc_mmio))
> 1430 return;
> 1431
> 1432 if (!llcc_slice_activate(a6xx_gpu->llc_slice)) {
> 1433 gpu_scid = llcc_get_slice_id(a6xx_gpu->llc_slice);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> 1434
> 1435 gpu_scid &= 0x1f;
> 1436 cntl1_regval = (gpu_scid << 0) | (gpu_scid << 5) | (gpu_scid << 10) |
> 1437 (gpu_scid << 15) | (gpu_scid << 20);
> 1438 }
> 1439
> 1440 /*
> 1441 * For targets with a MMU500, activate the slice but don't program the
> 1442 * register. The XBL will take care of that.
> 1443 */
> 1444 if (!llcc_slice_activate(a6xx_gpu->htw_llc_slice)) {
> 1445 if (!a6xx_gpu->have_mmu500) {
> 1446 u32 gpuhtw_scid = llcc_get_slice_id(a6xx_gpu->htw_llc_slice);
> 1447
> 1448 gpuhtw_scid &= 0x1f;
> 1449 cntl1_regval |= FIELD_PREP(GENMASK(29, 25), gpuhtw_scid);
> 1450 }
> 1451 }
> 1452
> 1453 if (!cntl1_regval)
> 1454 return;
> 1455
> 1456 /*
> 1457 * Program the slice IDs for the various GPU blocks and GPU MMU
> 1458 * pagetables
> 1459 */
> 1460 if (!a6xx_gpu->have_mmu500) {
> 1461 a6xx_llc_write(a6xx_gpu,
> 1462 REG_A6XX_CX_MISC_SYSTEM_CACHE_CNTL_1, cntl1_regval);
> 1463
> 1464 /*
> 1465 * Program cacheability overrides to not allocate cache
> 1466 * lines on a write miss
> 1467 */
> 1468 a6xx_llc_rmw(a6xx_gpu,
> 1469 REG_A6XX_CX_MISC_SYSTEM_CACHE_CNTL_0, 0xF, 0x03);
> 1470 return;
> 1471 }
> 1472
> 1473 gpu_rmw(gpu, REG_A6XX_GBIF_SCACHE_CNTL1, GENMASK(24, 0), cntl1_regval);
> 1474
> 1475 /* On A660, the SCID programming for UCHE traffic is done in
> 1476 * A6XX_GBIF_SCACHE_CNTL0[14:10]
> 1477 */
> 1478 if (adreno_is_a660_family(adreno_gpu))
> 1479 gpu_rmw(gpu, REG_A6XX_GBIF_SCACHE_CNTL0, (0x1f << 10) |
> --> 1480 (1 << 8), (gpu_scid << 10) | (1 << 8));
> ^^^^^^^^^^^^^^
> Uninitialized if llcc_slice_activate() failed.
>
> 1481 }
>
> regards,
> dan carpenter
>
Dan,
This is fixed here: https://patchwork.freedesktop.org/patch/464046/
-Akhil.
More information about the dri-devel
mailing list