On Mon, May 29, 2023 at 03:52:24PM +0200, Konrad Dybcio wrote: > > This function is responsible for telling the GPU to halt transactions > on all of its relevant buses, drain them and leave them in a predictable > state, so that the GPU can be e.g. reset cleanly. > > Move the function to a6xx_gpu.c, remove the static keyword and add a > prototype in a6xx_gpu.h to accomodate for the move. > > Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> Reviewed-by: Akhil P Oommen <quic_akhilpo@xxxxxxxxxxx> -Akhil > --- > drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 37 ----------------------------------- > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 36 ++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 ++ > 3 files changed, 38 insertions(+), 37 deletions(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > index 9421716a2fe5..b86be123ecd0 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > @@ -868,43 +868,6 @@ static void a6xx_gmu_rpmh_off(struct a6xx_gmu *gmu) > (val & 1), 100, 1000); > } > > -#define GBIF_CLIENT_HALT_MASK BIT(0) > -#define GBIF_ARB_HALT_MASK BIT(1) > - > -static void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, > - bool gx_off) > -{ > - struct msm_gpu *gpu = &adreno_gpu->base; > - > - if (!a6xx_has_gbif(adreno_gpu)) { > - gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0xf); > - spin_until((gpu_read(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL1) & > - 0xf) == 0xf); > - gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0); > - > - return; > - } > - > - if (gx_off) { > - /* Halt the gx side of GBIF */ > - gpu_write(gpu, REG_A6XX_RBBM_GBIF_HALT, 1); > - spin_until(gpu_read(gpu, REG_A6XX_RBBM_GBIF_HALT_ACK) & 1); > - } > - > - /* Halt new client requests on GBIF */ > - gpu_write(gpu, REG_A6XX_GBIF_HALT, GBIF_CLIENT_HALT_MASK); > - spin_until((gpu_read(gpu, REG_A6XX_GBIF_HALT_ACK) & > - (GBIF_CLIENT_HALT_MASK)) == GBIF_CLIENT_HALT_MASK); > - > - /* Halt all AXI requests on GBIF */ > - gpu_write(gpu, REG_A6XX_GBIF_HALT, GBIF_ARB_HALT_MASK); > - spin_until((gpu_read(gpu, REG_A6XX_GBIF_HALT_ACK) & > - (GBIF_ARB_HALT_MASK)) == GBIF_ARB_HALT_MASK); > - > - /* The GBIF halt needs to be explicitly cleared */ > - gpu_write(gpu, REG_A6XX_GBIF_HALT, 0x0); > -} > - > /* Force the GMU off in case it isn't responsive */ > static void a6xx_gmu_force_off(struct a6xx_gmu *gmu) > { > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > index e34aa15156a4..6bb4da70f6a6 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > @@ -1597,6 +1597,42 @@ static void a6xx_llc_slices_init(struct platform_device *pdev, > a6xx_gpu->llc_mmio = ERR_PTR(-EINVAL); > } > > +#define GBIF_CLIENT_HALT_MASK BIT(0) > +#define GBIF_ARB_HALT_MASK BIT(1) > + > +void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bool gx_off) > +{ > + struct msm_gpu *gpu = &adreno_gpu->base; > + > + if (!a6xx_has_gbif(adreno_gpu)) { > + gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0xf); > + spin_until((gpu_read(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL1) & > + 0xf) == 0xf); > + gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0); > + > + return; > + } > + > + if (gx_off) { > + /* Halt the gx side of GBIF */ > + gpu_write(gpu, REG_A6XX_RBBM_GBIF_HALT, 1); > + spin_until(gpu_read(gpu, REG_A6XX_RBBM_GBIF_HALT_ACK) & 1); > + } > + > + /* Halt new client requests on GBIF */ > + gpu_write(gpu, REG_A6XX_GBIF_HALT, GBIF_CLIENT_HALT_MASK); > + spin_until((gpu_read(gpu, REG_A6XX_GBIF_HALT_ACK) & > + (GBIF_CLIENT_HALT_MASK)) == GBIF_CLIENT_HALT_MASK); > + > + /* Halt all AXI requests on GBIF */ > + gpu_write(gpu, REG_A6XX_GBIF_HALT, GBIF_ARB_HALT_MASK); > + spin_until((gpu_read(gpu, REG_A6XX_GBIF_HALT_ACK) & > + (GBIF_ARB_HALT_MASK)) == GBIF_ARB_HALT_MASK); > + > + /* The GBIF halt needs to be explicitly cleared */ > + gpu_write(gpu, REG_A6XX_GBIF_HALT, 0x0); > +} > + > static int a6xx_pm_resume(struct msm_gpu *gpu) > { > struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h > index eea2e60ce3b7..9580def06d45 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h > @@ -88,4 +88,6 @@ void a6xx_show(struct msm_gpu *gpu, struct msm_gpu_state *state, > struct msm_gpu_state *a6xx_gpu_state_get(struct msm_gpu *gpu); > int a6xx_gpu_state_put(struct msm_gpu_state *state); > > +void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bool gx_off); > + > #endif /* __A6XX_GPU_H__ */ > > -- > 2.40.1 >