On Thu, Sep 2, 2010 at 9:44 PM, Dave Airlie <airlied at redhat.com> wrote:
> On Thu, 2010-09-02 at 21:32 -0400, Alex Deucher wrote:
>> These VGT regs need to be programmed via the ring rather than
>> MMIO as on previous asics (r6xx/r7xx).
>>
>
> So we need someway for userspace to know this has happened, either a
> version bump or a change to the info ioctl again.

We can do a version bump for 2.6.36.  Not sure what the best option is
for 2.6.35.

Alex

>
> Dave.
>
>> Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
>> ---
>> ?drivers/gpu/drm/radeon/evergreen.c | ? 39 
>> +++++++++++++++++++++++++++++++++++-
>> ?drivers/gpu/drm/radeon/r600.c ? ? ?| ? ?5 +---
>> ?2 files changed, 39 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/evergreen.c 
>> b/drivers/gpu/drm/radeon/evergreen.c
>> index 875d891..7b81e5c 100644
>> --- a/drivers/gpu/drm/radeon/evergreen.c
>> +++ b/drivers/gpu/drm/radeon/evergreen.c
>> @@ -1110,6 +1110,43 @@ static int evergreen_cp_load_microcode(struct 
>> radeon_device *rdev)
>> ? ? ? return 0;
>> ?}
>>
>> +static int evergreen_cp_start(struct radeon_device *rdev)
>> +{
>> + ? ? int r;
>> + ? ? uint32_t cp_me;
>> +
>> + ? ? r = radeon_ring_lock(rdev, 7);
>> + ? ? if (r) {
>> + ? ? ? ? ? ? DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
>> + ? ? ? ? ? ? return r;
>> + ? ? }
>> + ? ? radeon_ring_write(rdev, PACKET3(PACKET3_ME_INITIALIZE, 5));
>> + ? ? radeon_ring_write(rdev, 0x1);
>> + ? ? radeon_ring_write(rdev, 0x0);
>> + ? ? radeon_ring_write(rdev, rdev->config.evergreen.max_hw_contexts - 1);
>> + ? ? radeon_ring_write(rdev, PACKET3_ME_INITIALIZE_DEVICE_ID(1));
>> + ? ? radeon_ring_write(rdev, 0);
>> + ? ? radeon_ring_write(rdev, 0);
>> + ? ? radeon_ring_unlock_commit(rdev);
>> +
>> + ? ? cp_me = 0xff;
>> + ? ? WREG32(CP_ME_CNTL, cp_me);
>> +
>> + ? ? r = radeon_ring_lock(rdev, 4);
>> + ? ? if (r) {
>> + ? ? ? ? ? ? DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
>> + ? ? ? ? ? ? return r;
>> + ? ? }
>> + ? ? /* init some VGT regs */
>> + ? ? radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
>> + ? ? radeon_ring_write(rdev, (VGT_VERTEX_REUSE_BLOCK_CNTL - 
>> PACKET3_SET_CONTEXT_REG_START) >> 2);
>> + ? ? radeon_ring_write(rdev, 0xe);
>> + ? ? radeon_ring_write(rdev, 0x10);
>> + ? ? radeon_ring_unlock_commit(rdev);
>> +
>> + ? ? return 0;
>> +}
>> +
>> ?int evergreen_cp_resume(struct radeon_device *rdev)
>> ?{
>> ? ? ? u32 tmp;
>> @@ -1165,7 +1202,7 @@ int evergreen_cp_resume(struct radeon_device *rdev)
>> ? ? ? rdev->cp.rptr = RREG32(CP_RB_RPTR);
>> ? ? ? rdev->cp.wptr = RREG32(CP_RB_WPTR);
>>
>> - ? ? r600_cp_start(rdev);
>> + ? ? evergreen_cp_start(rdev);
>> ? ? ? rdev->cp.ready = true;
>> ? ? ? r = radeon_ring_test(rdev);
>> ? ? ? if (r) {
>> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
>> index 73e6a1a..f280717 100644
>> --- a/drivers/gpu/drm/radeon/r600.c
>> +++ b/drivers/gpu/drm/radeon/r600.c
>> @@ -2120,10 +2120,7 @@ int r600_cp_start(struct radeon_device *rdev)
>> ? ? ? }
>> ? ? ? radeon_ring_write(rdev, PACKET3(PACKET3_ME_INITIALIZE, 5));
>> ? ? ? radeon_ring_write(rdev, 0x1);
>> - ? ? if (rdev->family >= CHIP_CEDAR) {
>> - ? ? ? ? ? ? radeon_ring_write(rdev, 0x0);
>> - ? ? ? ? ? ? radeon_ring_write(rdev, rdev->config.evergreen.max_hw_contexts 
>> - 1);
>> - ? ? } else if (rdev->family >= CHIP_RV770) {
>> + ? ? if (rdev->family >= CHIP_RV770) {
>> ? ? ? ? ? ? ? radeon_ring_write(rdev, 0x0);
>> ? ? ? ? ? ? ? radeon_ring_write(rdev, rdev->config.rv770.max_hw_contexts - 
>> 1);
>> ? ? ? } else {
>
>
>

Reply via email to