On 8/11/2025 2:10 PM, Konrad Dybcio wrote: > On 8/8/25 7:22 PM, Akhil P Oommen wrote: >> On 8/7/2025 7:21 PM, Konrad Dybcio wrote: >>> On 7/20/25 2:16 PM, Akhil P Oommen wrote: >>>> Since the PDC resides out of the GPU subsystem and cannot be reset in >>>> case it enters bad state, utmost care must be taken to trigger the PDC >>>> wake/sleep routines in the correct order. >>>> >>>> The PDC wake sequence can be exercised only after a PDC sleep sequence. >>>> Additionally, GMU firmware should initialize a few registers before the >>>> KMD can trigger a PDC sleep sequence. So PDC sleep can't be done if the >>>> GMU firmware has not initialized. Track these dependencies using a new >>>> status variable and trigger PDC sleep/wake sequences appropriately. >>>> >>>> Signed-off-by: Akhil P Oommen <akhi...@oss.qualcomm.com> >>>> --- >>> >>> FWIW some time ago I made this patch, which tackles a similar issue, >>> perhaps it's a good idea to merge both: >>> >>> From 7d6441fc6ec5ee7fe723e1ad86d11fdd17bee922 Mon Sep 17 00:00:00 2001 >>> From: Konrad Dybcio <konrad.dyb...@oss.qualcomm.com> >>> Date: Thu, 20 Feb 2025 10:28:51 +0100 >>> Subject: [PATCH] drm/msm/adreno: Delay the Adreno RPMh startup to HFI init >>> >>> There's no use in trying to power up the GX logic before we're almost >>> ready to fire up the GPU. In fact, with A8xx the PDC and RSC uCode are >>> loaded by the GMU firmware, so we *must* wait for the GMU to fully >>> initialize before trying to do so. >>> >> >> iirc, this wake up sequence should be done before fw start. That aligns >> with downstream sequence order too. > > FWIW techpack/graphics adreno_gen7_gmu.c @ gfx-kernel.lnx.15.0.r3-rel > adb0a9da173e ("kgsl: rgmu: corrected pm suspend flag check on resume") > > // load gmu fw, enable clocks, irq, set up chipid etc. > [...] > > // unmask CM3_SYSRESET > ret = gen7_gmu_device_start(adreno_dev); > if (ret) > goto err; > > if (!test_bit(GMU_PRIV_PDC_RSC_LOADED, &gmu->flags)) { > // set PDC_GPU_ENABLE_PDC & seq_start_addr > ret = gen7_load_pdc_ucode(adreno_dev); > if (ret) > goto err; > > // disable hwcg, sleep/wake handshake setup, pdc ucode > gen7_load_rsc_ucode(adreno_dev); > set_bit(GMU_PRIV_PDC_RSC_LOADED, &gmu->flags); > } > > // set HFI_CTRL_INIT > ret = gen7_gmu_hfi_start(adreno_dev); > if (ret) > goto err; > > // continue booting the gpus, send out feature messages > > on a830, the patch is observably necessary (gmu doesn't start otherwise)
I am confused actually, why are we mixing ucode load and PDC trigger sequence? -Akhil. > > Konrad