<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi Alex,</p>
    <p>In Catalyst driver source code, Stoney is listed as supported, I
      don't know how well it is supported though. I think at least
      people have run some graphic operations.</p>
    <p>What kind of hangs happens in Stoney? Is it a graphic operation
      hang? Or OpenCL? Or something else? How easily it is reproduced?</p>
    <p>Stoney is similar to Carizzo. People has tried computes on
      Carrizo till Fiji in fglrx.<br>
    </p>
    <p>At least, we need to limit this change for Stoney only unless it
      is reported in other ASICs too.</p>
    <p> This change can affect compute performance a lot. People are
      evaluating even the AMDGPU PRO OpenCL on FIJI, as far as I know.<br>
    </p>
    <p>Thanks,</p>
    <p>Alex Bin<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 2017-06-07 12:32 PM, Deucher,
      Alexander wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:BN6PR12MB1652FFCD2FC9C923271C1475F7C80@BN6PR12MB1652.namprd12.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Exchange Server">
      <!-- converted from text -->
      <style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
      <font size="2"><span style="font-size:10pt;">
          <div class="PlainText">> -----Original Message-----<br>
            > From: Xie, AlexBin<br>
            > Sent: Wednesday, June 07, 2017 12:31 PM<br>
            > To: Alex Deucher; <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
            > Cc: Deucher, Alexander<br>
            > Subject: Re: [PATCH 1/3] drm/amdgpu: fix mec queue
            policy on single MEC<br>
            > asics<br>
            > <br>
            > Hi Alex,<br>
            > <br>
            > In closed source driver, we assign compute queues to
            all 4 pipes always.<br>
            > There is no hangs.<br>
            > <br>
            > May I know which ASIC?<br>
            <br>
            It was reported on Stoney.<br>
            <br>
            Alex<br>
            <br>
            > <br>
            > Assign all queues in first pipe first mec can slow
            things down.<br>
            > <br>
            > Thanks,<br>
            > <br>
            > Alex Bin Xie<br>
            > <br>
            > <br>
            > <br>
            > On 2017-06-07 11:10 AM, Alex Deucher wrote:<br>
            > > Fixes hangs on single MEC asics.<br>
            > ><br>
            > > Fixes: 2ed286fb434 (drm/amdgpu: new queue policy,
            take first 2 queues of<br>
            > each pipe v2)<br>
            > > Signed-off-by: Alex Deucher
            <a class="moz-txt-link-rfc2396E" href="mailto:alexander.deucher@amd.com"><alexander.deucher@amd.com></a><br>
            > > ---<br>
            > >   drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12
            +++++++++---<br>
            > >   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 12
            +++++++++---<br>
            > >   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12
            +++++++++---<br>
            > >   3 files changed, 27 insertions(+), 9
            deletions(-)<br>
            > ><br>
            > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c<br>
            > b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c<br>
            > > index 4c04e9d..862bc72 100644<br>
            > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c<br>
            > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c<br>
            > > @@ -2825,9 +2825,15 @@ static void<br>
            > gfx_v7_0_compute_queue_acquire(struct amdgpu_device
            *adev)<br>
            > >              if (mec >=
            adev->gfx.mec.num_mec)<br>
            > >                      break;<br>
            > ><br>
            > > -           /* policy: amdgpu owns the first two
            queues of the first MEC<br>
            > */<br>
            > > -           if (mec == 0 && queue < 2)<br>
            > > -                   set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           if (adev->gfx.mec.num_mec > 1) {<br>
            > > +                   /* policy: amdgpu owns the
            first two queues of the<br>
            > first MEC */<br>
            > > +                   if (mec == 0 && queue
            < 2)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           } else {<br>
            > > +                   /* policy: amdgpu owns all
            queues in the first pipe */<br>
            > > +                   if (mec == 0 && pipe
            == 0)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           }<br>
            > >      }<br>
            > ><br>
            > >      /* update the number of active compute rings
            */<br>
            > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
            > b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
            > > index ad2e0bb..1370b39 100644<br>
            > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
            > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c<br>
            > > @@ -1464,9 +1464,15 @@ static void<br>
            > gfx_v8_0_compute_queue_acquire(struct amdgpu_device
            *adev)<br>
            > >              if (mec >=
            adev->gfx.mec.num_mec)<br>
            > >                      break;<br>
            > ><br>
            > > -           /* policy: amdgpu owns the first two
            queues of the first MEC<br>
            > */<br>
            > > -           if (mec == 0 && queue < 2)<br>
            > > -                   set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           if (adev->gfx.mec.num_mec > 1) {<br>
            > > +                   /* policy: amdgpu owns the
            first two queues of the<br>
            > first MEC */<br>
            > > +                   if (mec == 0 && queue
            < 2)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           } else {<br>
            > > +                   /* policy: amdgpu owns all
            queues in the first pipe */<br>
            > > +                   if (mec == 0 && pipe
            == 0)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           }<br>
            > >      }<br>
            > ><br>
            > >      /* update the number of active compute rings
            */<br>
            > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<br>
            > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<br>
            > > index cf15a350..9d675b3 100644<br>
            > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<br>
            > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<br>
            > > @@ -873,9 +873,15 @@ static void<br>
            > gfx_v9_0_compute_queue_acquire(struct amdgpu_device
            *adev)<br>
            > >              if (mec >=
            adev->gfx.mec.num_mec)<br>
            > >                      break;<br>
            > ><br>
            > > -           /* policy: amdgpu owns the first two
            queues of the first MEC<br>
            > */<br>
            > > -           if (mec == 0 && queue < 2)<br>
            > > -                   set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           if (adev->gfx.mec.num_mec > 1) {<br>
            > > +                   /* policy: amdgpu owns the
            first two queues of the<br>
            > first MEC */<br>
            > > +                   if (mec == 0 && queue
            < 2)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           } else {<br>
            > > +                   /* policy: amdgpu owns all
            queues in the first pipe */<br>
            > > +                   if (mec == 0 && pipe
            == 0)<br>
            > > +                           set_bit(i,
            adev->gfx.mec.queue_bitmap);<br>
            > > +           }<br>
            > >      }<br>
            > ><br>
            > >      /* update the number of active compute rings
            */<br>
            <br>
          </div>
        </span></font>
    </blockquote>
    <br>
  </body>
</html>