[PATCH 5/8] drm/amdgpu: According hardware design revert vce and uvd doorbell assignment
Deucher, Alexander
Alexander.Deucher at amd.com
Wed Jul 26 04:48:19 UTC 2017
> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Min, Frank
> Sent: Tuesday, July 25, 2017 10:17 PM
> To: Alex Deucher; Yu, Xiangliang
> Cc: amd-gfx list
> Subject: RE: [PATCH 5/8] drm/amdgpu: According hardware design revert vce
> and uvd doorbell assignment
>
> Hi Alex,
> In sriov currently we only use only one encoding ring for uvd and vce. the
> logic here is to leave the unused doorbell location(for vce it is
> AMDGPU_DOORBELL64_VCE_RING2_3 * 2 + 1 and for uvd it is
> AMDGPU_DOORBELL64_UVD_RING2_3 * 2 + 1) for all the unused ring index.
>
> How about to change the code like this:
>
> if (amdgpu_sriov_vf(adev)) {
> /* DOORBELL only works under SRIOV */
> ring->use_doorbell = true;
> if (i == 0)
> ring->doorbell_index =
> AMDGPU_DOORBELL64_VCE_RING0_1 * 2;
> else
> ring->doorbell_index =
> AMDGPU_DOORBELL64_VCE_RING2_3 * 2 + 1;
> }
>
> if (amdgpu_sriov_vf(adev)) {
> ring->use_doorbell = true;
> if (i == 0)
> ring->doorbell_index =
> AMDGPU_DOORBELL64_UVD_RING0_1 * 2;
> else
> ring->doorbell_index =
> AMDGPU_DOORBELL64_UVD_RING2_3 * 2 + 1;
> }
That's fine. Just add a comment similar to your explanation above where you set the doorbells so it's clear why they are set that way. With that fixed:
Acked-by: Alex Deucher <alexander.deucher at amd.com>
Alex
>
> Best Regards,
> Frank
>
> -----邮件原件-----
> 发件人: Alex Deucher [mailto:alexdeucher at gmail.com]
> 发送时间: 2017年7月26日 0:00
> 收件人: Yu, Xiangliang <Xiangliang.Yu at amd.com>
> 抄送: amd-gfx list <amd-gfx at lists.freedesktop.org>; Min, Frank
> <Frank.Min at amd.com>
> 主题: Re: [PATCH 5/8] drm/amdgpu: According hardware design revert vce
> and uvd doorbell assignment
>
> On Tue, Jul 25, 2017 at 5:17 AM, Xiangliang.Yu <Xiangliang.Yu at amd.com>
> wrote:
> > From: Frank Min <Frank.Min at amd.com>
> >
> > Now uvd doorbell is from 0xf8-0xfb and vce doorbell is from 0xfc-0xff
> >
> > Signed-off-by: Frank Min <Frank.Min at amd.com>
> > Signed-off-by: Xiangliang.Yu <Xiangliang.Yu at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 18 +++++++++---------
> > drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 6 ++++--
> > drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | 6 +++---
> > 3 files changed, 16 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > index fe96236..d287621 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > @@ -680,15 +680,15 @@ typedef enum
> _AMDGPU_DOORBELL64_ASSIGNMENT
> > /* overlap the doorbell assignment with VCN as they are mutually
> exclusive
> > * VCE engine's doorbell is 32 bit and two VCE ring share one QWORD
> > */
> > - AMDGPU_DOORBELL64_RING0_1 = 0xF8,
> > - AMDGPU_DOORBELL64_RING2_3 = 0xF9,
> > - AMDGPU_DOORBELL64_RING4_5 = 0xFA,
> > - AMDGPU_DOORBELL64_RING6_7 = 0xFB,
> > -
> > - AMDGPU_DOORBELL64_UVD_RING0_1 = 0xFC,
> > - AMDGPU_DOORBELL64_UVD_RING2_3 = 0xFD,
> > - AMDGPU_DOORBELL64_UVD_RING4_5 = 0xFE,
> > - AMDGPU_DOORBELL64_UVD_RING6_7 = 0xFF,
> > + AMDGPU_DOORBELL64_UVD_RING0_1 = 0xF8,
> > + AMDGPU_DOORBELL64_UVD_RING2_3 = 0xF9,
> > + AMDGPU_DOORBELL64_UVD_RING4_5 = 0xFA,
> > + AMDGPU_DOORBELL64_UVD_RING6_7 = 0xFB,
> > +
> > + AMDGPU_DOORBELL64_VCE_RING0_1 = 0xFC,
> > + AMDGPU_DOORBELL64_VCE_RING2_3 = 0xFD,
> > + AMDGPU_DOORBELL64_VCE_RING4_5 = 0xFE,
> > + AMDGPU_DOORBELL64_VCE_RING6_7 = 0xFF,
> >
> > AMDGPU_DOORBELL64_MAX_ASSIGNMENT = 0xFF,
> > AMDGPU_DOORBELL64_INVALID = 0xFFFF
> > diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
> > b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
> > index ab447e8..590c3f0 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
> > @@ -435,13 +435,15 @@ static int uvd_v7_0_sw_init(void *handle)
> > return r;
> > }
> >
> > -
> > for (i = 0; i < adev->uvd.num_enc_rings; ++i) {
> > ring = &adev->uvd.ring_enc[i];
> > sprintf(ring->name, "uvd_enc%d", i);
> > if (amdgpu_sriov_vf(adev)) {
> > ring->use_doorbell = true;
> > - ring->doorbell_index =
> AMDGPU_DOORBELL64_UVD_RING0_1 * 2;
> > + if (i == 0)
> > + ring->doorbell_index =
> AMDGPU_DOORBELL64_UVD_RING0_1 * 2;
> > + else
> > + ring->doorbell_index =
> > + AMDGPU_DOORBELL64_UVD_RING2_3 * 2 + 1;
>
> Can you clarify the requirements? This logic doesn't seem right.
>
> > }
> > r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.irq, 0);
> > if (r)
> > diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
> > b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
> > index 9e0050d..34c2281 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
> > @@ -446,11 +446,11 @@ static int vce_v4_0_sw_init(void *handle)
> > /* DOORBELL only works under SRIOV */
> > ring->use_doorbell = true;
> > if (i == 0)
> > - ring->doorbell_index = AMDGPU_DOORBELL64_RING0_1 *
> 2;
> > + ring->doorbell_index =
> > + AMDGPU_DOORBELL64_VCE_RING0_1 * 2;
> > else if (i == 1)
> > - ring->doorbell_index = AMDGPU_DOORBELL64_RING2_3 *
> 2;
> > + ring->doorbell_index =
> > + AMDGPU_DOORBELL64_VCE_RING2_3 * 2;
> > else
> > - ring->doorbell_index = AMDGPU_DOORBELL64_RING2_3 *
> 2 + 1;
> > + ring->doorbell_index =
> > + AMDGPU_DOORBELL64_VCE_RING2_3 * 2 + 1;
>
> Same here. The one is even weirder.
>
> Alex
>
> > }
> > r = amdgpu_ring_init(adev, ring, 512, &adev->vce.irq, 0);
> > if (r)
> > --
> > 2.7.4
> >
> > _______________________________________________
> > amd-gfx mailing list
> > amd-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list