[PATCH 2/2] drm/radeon: fix bank tiling parameters on SI

Alex Deucher alexdeucher at gmail.com
Tue Jul 31 07:42:31 PDT 2012


On Tue, Jul 31, 2012 at 10:21 AM, Christian König
<deathsimple at vodafone.de> wrote:
> On 31.07.2012 16:02, Alex Deucher wrote:
>>
>> On Tue, Jul 31, 2012 at 7:48 AM, Christian König
>> <deathsimple at vodafone.de> wrote:
>>>
>>> The sixteen bank case wasn't handled here, leading to GPU
>>> crashes because of userspace miscalculation.
>>
>> You mean a GPU hang or a segfault in userspace?  IIRC, from the hw
>> perspective numbers of banks over 8 are considered 8 for tiling.
>
> Well it was a GPU segfault :) The GPU was accessing memory regions that
> weren't VM mapped.
>
> As far as i could figure it out it wasn't happy with the alignment of the
> color buffer. The number of banks we used for that calculation seemed to be
> different from what the kernel programmed into the tiling config registers.
> So I tried changing it from 8 to 16 and hurray it started working (ok, more
> or less currently digging into the next problem).
>
> It is possible that this is just masquerading another bug, but as far as I
> can see it is the most logical explanation.

Seems reasonable.

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

>
> Why are 16 banks equal to 8 banks on the hw side?

I was talking to one of the hw guys about some issues with tiling.
Certain 6xx or 7xx chips report more than 8 banks in the MC config,
but the tiling configuration on them only supports 4 and 8 banks.
IIRC, he said number of banks above 8 should be treated as 8 at least
for 6xx-9xx.  Although, looking at it again it looks like maybe we
want 16 bank support for evergreen/cayman as well after all.  It
shouldn't hurt other than possibly over allocating a bit.

Alex

>
> Christian.
>
>
>>
>> Alex
>>
>>> Signed-off-by: Christian König <deathsimple at vodafone.de>
>>> Cc: stable at vger.kernel.org
>>> ---
>>>   drivers/gpu/drm/radeon/si.c |   16 ++++++++++++----
>>>   1 file changed, 12 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
>>> index 0b02792..0182fc8 100644
>>> --- a/drivers/gpu/drm/radeon/si.c
>>> +++ b/drivers/gpu/drm/radeon/si.c
>>> @@ -1639,11 +1639,19 @@ static void si_gpu_init(struct radeon_device
>>> *rdev)
>>>                  /* XXX what about 12? */
>>>                  rdev->config.si.tile_config |= (3 << 0);
>>>                  break;
>>> -       }
>>> -       if ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT)
>>> -               rdev->config.si.tile_config |= 1 << 4;
>>> -       else
>>> +       }
>>> +       switch ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) {
>>> +       case 0: /* four banks */
>>>                  rdev->config.si.tile_config |= 0 << 4;
>>> +               break;
>>> +       case 1: /* eight banks */
>>> +               rdev->config.si.tile_config |= 1 << 4;
>>> +               break;
>>> +       case 2: /* sixteen banks */
>>> +       default:
>>> +               rdev->config.si.tile_config |= 2 << 4;
>>> +               break;
>>> +       }
>>>          rdev->config.si.tile_config |=
>>>                  ((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >>
>>> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
>>>          rdev->config.si.tile_config |=
>>> --
>>> 1.7.9.5
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>


More information about the dri-devel mailing list