[PATCH 14/15] drm/radeon: record what is next valid wptr for each ring v3

Alex Deucher alexdeucher at gmail.com
Fri Jul 13 06:57:15 PDT 2012


On Fri, Jul 13, 2012 at 9:46 AM, Christian König
<deathsimple at vodafone.de> wrote:
> On 13.07.2012 14:27, Alex Deucher wrote:
>>
>> On Fri, Jul 13, 2012 at 5:09 AM, Christian König
>> <deathsimple at vodafone.de> wrote:
>>>
>>> On 12.07.2012 18:36, Alex Deucher wrote:
>>>>
>>>> On Thu, Jul 12, 2012 at 12:12 PM, Christian König
>>>> <deathsimple at vodafone.de> wrote:
>>>>>
>>>>> Before emitting any indirect buffer, emit the offset of the next
>>>>> valid ring content if any. This allow code that want to resume
>>>>> ring to resume ring right after ib that caused GPU lockup.
>>>>>
>>>>> v2: use scratch registers instead of storing it into memory
>>>>> v3: skip over the surface sync for ni and si as well
>>>>>
>>>>> Signed-off-by: Jerome Glisse <jglisse at redhat.com>
>>>>> Signed-off-by: Christian König <deathsimple at vodafone.de>
>>>>> ---
>>>>>    drivers/gpu/drm/radeon/evergreen.c   |    8 +++++++-
>>>>>    drivers/gpu/drm/radeon/ni.c          |   11 ++++++++++-
>>>>>    drivers/gpu/drm/radeon/r600.c        |   18 ++++++++++++++++--
>>>>>    drivers/gpu/drm/radeon/radeon.h      |    1 +
>>>>>    drivers/gpu/drm/radeon/radeon_ring.c |    4 ++++
>>>>>    drivers/gpu/drm/radeon/rv770.c       |    4 +++-
>>>>>    drivers/gpu/drm/radeon/si.c          |   22 +++++++++++++++++++---
>>>>>    7 files changed, 60 insertions(+), 8 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/radeon/evergreen.c
>>>>> b/drivers/gpu/drm/radeon/evergreen.c
>>>>> index f39b900..40de347 100644
>>>>> --- a/drivers/gpu/drm/radeon/evergreen.c
>>>>> +++ b/drivers/gpu/drm/radeon/evergreen.c
>>>>> @@ -1368,7 +1368,13 @@ void evergreen_ring_ib_execute(struct
>>>>> radeon_device *rdev, struct radeon_ib *ib)
>>>>>           /* set to DX10/11 mode */
>>>>>           radeon_ring_write(ring, PACKET3(PACKET3_MODE_CONTROL, 0));
>>>>>           radeon_ring_write(ring, 1);
>>>>> -       /* FIXME: implement */
>>>>> +
>>>>> +       if (ring->rptr_save_reg) {
>>>>> +               uint32_t next_rptr = ring->wptr + 2 + 4;
>>>>> +               radeon_ring_write(ring, PACKET0(ring->rptr_save_reg,
>>>>> 0));
>>>>> +               radeon_ring_write(ring, next_rptr);
>>>>> +       }
>>>>
>>>> On r600 and newer please use SET_CONFIG_REG rather than Packet0.
>>>
>>> Why? Please note that it's on purpose that this doesn't interfere with
>>> the
>>> top/bottom of pipe handling and the draw commands, e.g. the register
>>> write
>>> isn't associated with drawing but instead just marks the beginning of
>>> parsing the IB.
>>
>> Packet0's are have been semi-deprecated since r600.  They still work,
>> but the CP guys recommend using the appropriate packet3 whenever
>> possible.
>
> Ok, that makes sense.
>
> Any further comments on the patchset, or can I send that to Dave for merging
> now?

Other than that, it looks good to me.  For the series:

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>


More information about the dri-devel mailing list