aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2012-03-29 19:04:08 -0400
committerLuis Henriques <luis.henriques@canonical.com>2012-05-01 05:59:57 -0400
commit1d91e02743890891dd7f0ef86c735f01bb6856b9 (patch)
treeb2fdc3d05fc56a8d0e710eb3c90853f51a9f710b /drivers/gpu/drm
parentbd24306d91f3cfd0128a21936e5a9bbed042990e (diff)
drm/radeon/kms: fix fans after resume
BugLink: http://bugs.launchpad.net/bugs/983326 commit 402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd upstream. 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> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/radeon/atom.c15
-rw-r--r--drivers/gpu/drm/radeon/atom.h1
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index 9a0aee2f065..88661eaa2c7 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -1301,8 +1301,11 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
1301 1301
1302int atom_asic_init(struct atom_context *ctx) 1302int atom_asic_init(struct atom_context *ctx)
1303{ 1303{
1304 struct radeon_device *rdev = ctx->card->dev->dev_private;
1304 int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR); 1305 int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
1305 uint32_t ps[16]; 1306 uint32_t ps[16];
1307 int ret;
1308
1306 memset(ps, 0, 64); 1309 memset(ps, 0, 64);
1307 1310
1308 ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR)); 1311 ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
@@ -1312,7 +1315,17 @@ int atom_asic_init(struct atom_context *ctx)
1312 1315
1313 if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) 1316 if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
1314 return 1; 1317 return 1;
1315 return atom_execute_table(ctx, ATOM_CMD_INIT, ps); 1318 ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
1319 if (ret)
1320 return ret;
1321
1322 memset(ps, 0, 64);
1323
1324 if (rdev->family < CHIP_R600) {
1325 if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
1326 atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
1327 }
1328 return ret;
1316} 1329}
1317 1330
1318void atom_destroy(struct atom_context *ctx) 1331void 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 @@
44#define ATOM_CMD_SETSCLK 0x0A 44#define ATOM_CMD_SETSCLK 0x0A
45#define ATOM_CMD_SETMCLK 0x0B 45#define ATOM_CMD_SETMCLK 0x0B
46#define ATOM_CMD_SETPCLK 0x0C 46#define ATOM_CMD_SETPCLK 0x0C
47#define ATOM_CMD_SPDFANCNTL 0x39
47 48
48#define ATOM_DATA_FWI_PTR 0xC 49#define ATOM_DATA_FWI_PTR 0xC
49#define ATOM_DATA_IIO_PTR 0x32 50#define ATOM_DATA_IIO_PTR 0x32