All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset
@ 2010-12-20 17:35 Alex Deucher
  2010-12-20 17:35 ` [PATCH 2/2] drm/radeon/kms/evergreen: reset the grbm blocks at resume and init Alex Deucher
  2010-12-20 19:31 ` [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Jerome Glisse
  0 siblings, 2 replies; 3+ messages in thread
From: Alex Deucher @ 2010-12-20 17:35 UTC (permalink / raw)
  To: airlied, dri-devel; +Cc: stable

Only reset the grbm blocks, srbm tends to lock the GPU
if not done properly and in most cases is not necessary.
Also, no need to call asic init after reset the grbm blocks.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
---
 drivers/gpu/drm/radeon/evergreen.c |   15 ---------------
 1 files changed, 0 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 901f366..8b82749 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -2036,7 +2036,6 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev)
 static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
 {
 	struct evergreen_mc_save save;
-	u32 srbm_reset = 0;
 	u32 grbm_reset = 0;
 
 	dev_info(rdev->dev, "GPU softreset \n");
@@ -2075,16 +2074,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
 	udelay(50);
 	WREG32(GRBM_SOFT_RESET, 0);
 	(void)RREG32(GRBM_SOFT_RESET);
-
-	/* reset all the system blocks */
-	srbm_reset = SRBM_SOFT_RESET_ALL_MASK;
-
-	dev_info(rdev->dev, "  SRBM_SOFT_RESET=0x%08X\n", srbm_reset);
-	WREG32(SRBM_SOFT_RESET, srbm_reset);
-	(void)RREG32(SRBM_SOFT_RESET);
-	udelay(50);
-	WREG32(SRBM_SOFT_RESET, 0);
-	(void)RREG32(SRBM_SOFT_RESET);
 	/* Wait a little for things to settle down */
 	udelay(50);
 	dev_info(rdev->dev, "  GRBM_STATUS=0x%08X\n",
@@ -2095,10 +2084,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
 		RREG32(GRBM_STATUS_SE1));
 	dev_info(rdev->dev, "  SRBM_STATUS=0x%08X\n",
 		RREG32(SRBM_STATUS));
-	/* After reset we need to reinit the asic as GPU often endup in an
-	 * incoherent state.
-	 */
-	atom_asic_init(rdev->mode_info.atom_context);
 	evergreen_mc_resume(rdev, &save);
 	return 0;
 }
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] drm/radeon/kms/evergreen: reset the grbm blocks at resume and init
  2010-12-20 17:35 [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Alex Deucher
@ 2010-12-20 17:35 ` Alex Deucher
  2010-12-20 19:31 ` [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Jerome Glisse
  1 sibling, 0 replies; 3+ messages in thread
From: Alex Deucher @ 2010-12-20 17:35 UTC (permalink / raw)
  To: airlied, dri-devel; +Cc: Alex Deucher, stable

This fixes module reloading and resume as the gfx block seems to
be left in a bad state in some cases.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
---
 drivers/gpu/drm/radeon/evergreen.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 8b82749..056b93c 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -2701,6 +2701,11 @@ int evergreen_resume(struct radeon_device *rdev)
 {
 	int r;
 
+	/* reset the asic, the gfx blocks are often in a bad state
+	 * after the driver is unloaded or after a resume
+	 */
+	if (radeon_asic_reset(rdev))
+		dev_warn(rdev->dev, "GPU reset failed !\n");
 	/* Do not reset GPU before posting, on rv770 hw unlike on r500 hw,
 	 * posting will perform necessary task to bring back GPU into good
 	 * shape.
@@ -2861,6 +2866,11 @@ int evergreen_init(struct radeon_device *rdev)
 	r = radeon_atombios_init(rdev);
 	if (r)
 		return r;
+	/* reset the asic, the gfx blocks are often in a bad state
+	 * after the driver is unloaded or after a resume
+	 */
+	if (radeon_asic_reset(rdev))
+		dev_warn(rdev->dev, "GPU reset failed !\n");
 	/* Post card if necessary */
 	if (!evergreen_card_posted(rdev)) {
 		if (!rdev->bios) {
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset
  2010-12-20 17:35 [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Alex Deucher
  2010-12-20 17:35 ` [PATCH 2/2] drm/radeon/kms/evergreen: reset the grbm blocks at resume and init Alex Deucher
@ 2010-12-20 19:31 ` Jerome Glisse
  1 sibling, 0 replies; 3+ messages in thread
From: Jerome Glisse @ 2010-12-20 19:31 UTC (permalink / raw)
  To: Alex Deucher; +Cc: stable, dri-devel

On Mon, Dec 20, 2010 at 12:35 PM, Alex Deucher <alexdeucher@gmail.com> wrote:
> Only reset the grbm blocks, srbm tends to lock the GPU
> if not done properly and in most cases is not necessary.
> Also, no need to call asic init after reset the grbm blocks.
>
> Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
> Cc: stable@kernel.org
> ---

Reviewed-by: Jerome Glisse <jglisse@redhat.com>

>  drivers/gpu/drm/radeon/evergreen.c |   15 ---------------
>  1 files changed, 0 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
> index 901f366..8b82749 100644
> --- a/drivers/gpu/drm/radeon/evergreen.c
> +++ b/drivers/gpu/drm/radeon/evergreen.c
> @@ -2036,7 +2036,6 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev)
>  static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
>  {
>        struct evergreen_mc_save save;
> -       u32 srbm_reset = 0;
>        u32 grbm_reset = 0;
>
>        dev_info(rdev->dev, "GPU softreset \n");
> @@ -2075,16 +2074,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
>        udelay(50);
>        WREG32(GRBM_SOFT_RESET, 0);
>        (void)RREG32(GRBM_SOFT_RESET);
> -
> -       /* reset all the system blocks */
> -       srbm_reset = SRBM_SOFT_RESET_ALL_MASK;
> -
> -       dev_info(rdev->dev, "  SRBM_SOFT_RESET=0x%08X\n", srbm_reset);
> -       WREG32(SRBM_SOFT_RESET, srbm_reset);
> -       (void)RREG32(SRBM_SOFT_RESET);
> -       udelay(50);
> -       WREG32(SRBM_SOFT_RESET, 0);
> -       (void)RREG32(SRBM_SOFT_RESET);
>        /* Wait a little for things to settle down */
>        udelay(50);
>        dev_info(rdev->dev, "  GRBM_STATUS=0x%08X\n",
> @@ -2095,10 +2084,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev)
>                RREG32(GRBM_STATUS_SE1));
>        dev_info(rdev->dev, "  SRBM_STATUS=0x%08X\n",
>                RREG32(SRBM_STATUS));
> -       /* After reset we need to reinit the asic as GPU often endup in an
> -        * incoherent state.
> -        */
> -       atom_asic_init(rdev->mode_info.atom_context);
>        evergreen_mc_resume(rdev, &save);
>        return 0;
>  }
> --
> 1.7.2.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-12-20 19:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-20 17:35 [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Alex Deucher
2010-12-20 17:35 ` [PATCH 2/2] drm/radeon/kms/evergreen: reset the grbm blocks at resume and init Alex Deucher
2010-12-20 19:31 ` [PATCH 1/2] drm/radeon/kms: fix evergreen asic reset Jerome Glisse

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.