diff options
| author | Alex Deucher <alexander.deucher@amd.com> | 2012-03-29 19:04:08 -0400 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2012-04-02 11:07:42 +0100 | 
| commit | 402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd (patch) | |
| tree | 2de887cae4ddcaf291562f796231c4feb829ad42 | |
| parent | d06221c0617ab6d0bc41c4980cefdd9c8cc9a1c1 (diff) | |
| download | olio-linux-3.10-402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd.tar.xz olio-linux-3.10-402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd.zip  | |
drm/radeon/kms: fix fans after resume
On pre-R600 asics, the SpeedFanControl table is not
executed as part of ASIC_Init as it is on newer asics.
Fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=29412
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/atom.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/atom.h | 1 | 
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c index d1bd239cd9e..5ce9bf51a8d 100644 --- a/drivers/gpu/drm/radeon/atom.c +++ b/drivers/gpu/drm/radeon/atom.c @@ -1306,8 +1306,11 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)  int atom_asic_init(struct atom_context *ctx)  { +	struct radeon_device *rdev = ctx->card->dev->dev_private;  	int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);  	uint32_t ps[16]; +	int ret; +  	memset(ps, 0, 64);  	ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR)); @@ -1317,7 +1320,17 @@ int atom_asic_init(struct atom_context *ctx)  	if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))  		return 1; -	return atom_execute_table(ctx, ATOM_CMD_INIT, ps); +	ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps); +	if (ret) +		return ret; + +	memset(ps, 0, 64); + +	if (rdev->family < CHIP_R600) { +		if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL)) +			atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps); +	} +	return ret;  }  void atom_destroy(struct atom_context *ctx) diff --git a/drivers/gpu/drm/radeon/atom.h b/drivers/gpu/drm/radeon/atom.h index 93cfe2086ba..25fea631dad 100644 --- a/drivers/gpu/drm/radeon/atom.h +++ b/drivers/gpu/drm/radeon/atom.h @@ -44,6 +44,7 @@  #define ATOM_CMD_SETSCLK	0x0A  #define ATOM_CMD_SETMCLK	0x0B  #define ATOM_CMD_SETPCLK	0x0C +#define ATOM_CMD_SPDFANCNTL	0x39  #define ATOM_DATA_FWI_PTR	0xC  #define ATOM_DATA_IIO_PTR	0x32  |