Message ID | 1434724336-15761-2-git-send-email-j.glisse@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Jun 19, 2015 at 10:32 AM, <j.glisse@gmail.com> wrote: > From: Jérôme Glisse <jglisse@redhat.com> > > In order for hibernation to reliably work we need to properly turn > off the SDMA block, sadly after numerous attemps i haven't not found > proper sequence for clean and full shutdown. So simply reset both > SDMA block, this makes hibernation works reliably on sea island GPU > family (CI) > > Hibernation and suspend to ram were tested (several times) on : > Bonaire > Hawaii > Mullins > Kaveri > Kabini > > Cc: stable@vger.kernel.org > Signed-off-by: Jérôme Glisse <jglisse@redhat.com> > Reviewed-by: Christian König <christian.koenig@amd.com> Applied the series. thanks! Alex > --- > drivers/gpu/drm/radeon/cik_sdma.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c > index f86eb54..d16f2ee 100644 > --- a/drivers/gpu/drm/radeon/cik_sdma.c > +++ b/drivers/gpu/drm/radeon/cik_sdma.c > @@ -268,6 +268,17 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev) > } > rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false; > rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false; > + > + /* FIXME use something else than big hammer but after few days can not > + * seem to find good combination so reset SDMA blocks as it seems we > + * do not shut them down properly. This fix hibernation and does not > + * affect suspend to ram. > + */ > + WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1); > + (void)RREG32(SRBM_SOFT_RESET); > + udelay(50); > + WREG32(SRBM_SOFT_RESET, 0); > + (void)RREG32(SRBM_SOFT_RESET); > } > > /** > -- > 2.1.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c index f86eb54..d16f2ee 100644 --- a/drivers/gpu/drm/radeon/cik_sdma.c +++ b/drivers/gpu/drm/radeon/cik_sdma.c @@ -268,6 +268,17 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev) } rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false; rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false; + + /* FIXME use something else than big hammer but after few days can not + * seem to find good combination so reset SDMA blocks as it seems we + * do not shut them down properly. This fix hibernation and does not + * affect suspend to ram. + */ + WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1); + (void)RREG32(SRBM_SOFT_RESET); + udelay(50); + WREG32(SRBM_SOFT_RESET, 0); + (void)RREG32(SRBM_SOFT_RESET); } /**