From: Alex Deucher alexander.deucher@amd.com
Older firmware didn't support the new nop packet.
v2 (Andreas Boll): - Drop usage of packet3 for new firmware
Signed-off-by: Alex Deucher alexander.deucher@amd.com Reviewed-by: Christian König christian.koenig@amd.com (v1) Signed-off-by: Andreas Boll andreas.boll.dev@gmail.com Cc: stable@vger.kernel.org --- drivers/gpu/drm/radeon/cik.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index c0ea661..e5985d5 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -7900,6 +7900,7 @@ restart_ih: static int cik_startup(struct radeon_device *rdev) { struct radeon_ring *ring; + u32 nop; int r;
/* enable pcie gen2/3 link */ @@ -8033,9 +8034,15 @@ static int cik_startup(struct radeon_device *rdev) } cik_irq_set(rdev);
+ if (rdev->family == CHIP_HAWAII) { + nop = RADEON_CP_PACKET2; + } else { + nop = PACKET3(PACKET3_NOP, 0x3FFF); + } + ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET, - PACKET3(PACKET3_NOP, 0x3FFF)); + nop); if (r) return r;
@@ -8043,7 +8050,7 @@ static int cik_startup(struct radeon_device *rdev) /* type-2 packets are deprecated on MEC, use type-3 instead */ ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP1_RPTR_OFFSET, - PACKET3(PACKET3_NOP, 0x3FFF)); + nop); if (r) return r; ring->me = 1; /* first MEC */ @@ -8054,7 +8061,7 @@ static int cik_startup(struct radeon_device *rdev) /* type-2 packets are deprecated on MEC, use type-3 instead */ ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP2_RPTR_OFFSET, - PACKET3(PACKET3_NOP, 0x3FFF)); + nop); if (r) return r; /* dGPU only have 1 MEC */
From: Alex Deucher alexander.deucher@amd.com
Return 2 so we can be sure the kernel has the necessary changes for acceleration to work.
Note: This patch depends on these two commits: - drm/radeon: fix cut and paste issue for hawaii. - drm/radeon: use packet2 for nop on hawaii with old firmware
Signed-off-by: Alex Deucher alexander.deucher@amd.com Signed-off-by: Andreas Boll andreas.boll.dev@gmail.com Cc: stable@vger.kernel.org --- drivers/gpu/drm/radeon/radeon_kms.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index d25ae6a..c1a206d 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c @@ -254,7 +254,14 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file } break; case RADEON_INFO_ACCEL_WORKING2: - *value = rdev->accel_working; + if (rdev->family == CHIP_HAWAII) { + if (rdev->accel_working) + *value = 2; + else + *value = 0; + } else { + *value = rdev->accel_working; + } break; case RADEON_INFO_TILING_CONFIG: if (rdev->family >= CHIP_BONAIRE)
From: Alex Deucher alexander.deucher@amd.com
Older firmware didn't support the new nop packet.
Signed-off-by: Alex Deucher alexander.deucher@amd.com Signed-off-by: Andreas Boll andreas.boll.dev@gmail.com --- drivers/gpu/drm/radeon/cik.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index e5985d5..8b580dc 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -8035,7 +8035,10 @@ static int cik_startup(struct radeon_device *rdev) cik_irq_set(rdev);
if (rdev->family == CHIP_HAWAII) { - nop = RADEON_CP_PACKET2; + if (rdev->new_fw) + nop = PACKET3(PACKET3_NOP, 0x3FFF); + else + nop = RADEON_CP_PACKET2; } else { nop = PACKET3(PACKET3_NOP, 0x3FFF); }
Adjust the previous tweak for hawaii to return 3 if the new firmware is used.
Signed-off-by: Andreas Boll andreas.boll.dev@gmail.com --- drivers/gpu/drm/radeon/radeon_kms.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index c1a206d..eb7164d 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c @@ -255,10 +255,14 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file break; case RADEON_INFO_ACCEL_WORKING2: if (rdev->family == CHIP_HAWAII) { - if (rdev->accel_working) - *value = 2; - else + if (rdev->accel_working) { + if (rdev->new_fw) + *value = 3; + else + *value = 2; + } else { *value = 0; + } } else { *value = rdev->accel_working; }
On Fri, Aug 1, 2014 at 2:05 PM, Andreas Boll andreas.boll.dev@gmail.com wrote:
From: Alex Deucher alexander.deucher@amd.com
Older firmware didn't support the new nop packet.
v2 (Andreas Boll):
- Drop usage of packet3 for new firmware
Signed-off-by: Alex Deucher alexander.deucher@amd.com Reviewed-by: Christian König christian.koenig@amd.com (v1) Signed-off-by: Andreas Boll andreas.boll.dev@gmail.com Cc: stable@vger.kernel.org
Added the series to my 3.17 tree. thanks!
Alex
drivers/gpu/drm/radeon/cik.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index c0ea661..e5985d5 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -7900,6 +7900,7 @@ restart_ih: static int cik_startup(struct radeon_device *rdev) { struct radeon_ring *ring;
u32 nop; int r; /* enable pcie gen2/3 link */
@@ -8033,9 +8034,15 @@ static int cik_startup(struct radeon_device *rdev) } cik_irq_set(rdev);
if (rdev->family == CHIP_HAWAII) {
nop = RADEON_CP_PACKET2;
} else {
nop = PACKET3(PACKET3_NOP, 0x3FFF);
}
ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET,
PACKET3(PACKET3_NOP, 0x3FFF));
nop); if (r) return r;
@@ -8043,7 +8050,7 @@ static int cik_startup(struct radeon_device *rdev) /* type-2 packets are deprecated on MEC, use type-3 instead */ ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP1_RPTR_OFFSET,
PACKET3(PACKET3_NOP, 0x3FFF));
nop); if (r) return r; ring->me = 1; /* first MEC */
@@ -8054,7 +8061,7 @@ static int cik_startup(struct radeon_device *rdev) /* type-2 packets are deprecated on MEC, use type-3 instead */ ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]; r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP2_RPTR_OFFSET,
PACKET3(PACKET3_NOP, 0x3FFF));
nop); if (r) return r; /* dGPU only have 1 MEC */
-- 2.0.1
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
dri-devel@lists.freedesktop.org