On Fri, Jun 19, 2015 at 10:32 AM, <j.glisse@xxxxxxxxx> wrote: > From: Jérôme Glisse <jglisse@xxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx > Signed-off-by: Jérôme Glisse <jglisse@xxxxxxxxxx> > Reviewed-by: Christian König <christian.koenig@xxxxxxx> 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@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel