[PATCH 3/5] drm/amdgpu: Avoid to use SOC15_REG_OFFSET in static const array

Christian König ckoenig.leichtzumerken at gmail.com
Fri Dec 1 08:20:01 UTC 2017


> static const struct amdgpu_ring_funcs uvd_v7_0_ring_vm_funcs = {
>      	.type = AMDGPU_RING_TYPE_UVD,
>      	.align_mask = 0xf,
> 	.nop = PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_NO_OP), 0),
That one is trivial. There is an .insert_nop callback a bit further down:
> .insert_nop = amdgpu_ring_insert_nop,

When you override this the .nop member isn't used any more. See 
amdgpu_ring_insert_nop() as well.

> How to change the SOC15_REG_OFFSET used in the following  case :
> const struct nbio_hdp_flush_reg nbio_v7_0_hdp_flush_reg = {
> 	.hdp_flush_req_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_REQ),
> 	.hdp_flush_done_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_DONE),
> ...
That one looks more tricky, but probably doable as well.

And taking a look at how this is used in gfx_v9_0_ring_emit_hdp_flush() 
for example:
>         if (ring->adev->flags & AMD_IS_APU)
>                 nbio_hf_reg = &nbio_v7_0_hdp_flush_reg;
>         else
>                 nbio_hf_reg = &nbio_v6_1_hdp_flush_reg;
...

That looks like a good candidate for a cleanup anyway.

Probably best approach is to put some hdp_funcs into adev. This can then 
be used to cleanup similar code in the gmc_v9_0.c as well:
>         /* After HDP is initialized, flush HDP.*/
>         if (adev->flags & AMD_IS_APU)
>                 nbio_v7_0_hdp_flush(adev);
>         else
>                 nbio_v6_1_hdp_flush(adev);

Thanks for taking care of this,
Christian.

Am 30.11.2017 um 22:17 schrieb Liu, Shaoyun:
> Ok ,  I  think can make the change . It involved logic change , please carefully review it .
>
> How to change the SOC15_REG_OFFSET used in the following  case :
> const struct nbio_hdp_flush_reg nbio_v7_0_hdp_flush_reg = {
> 	.hdp_flush_req_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_REQ),
> 	.hdp_flush_done_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_DONE),
> ...
> 	
>
> and similar :
> static const struct amdgpu_ring_funcs uvd_v7_0_ring_vm_funcs = {
>      	.type = AMDGPU_RING_TYPE_UVD,
>      	.align_mask = 0xf,
> 	.nop = PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_NO_OP), 0),
> ...
>
> Can we avoid use fixed  IP_BASE_INST*_SEG*  + mmReg  for them ?
>
> Regards
> Shaoyun.liu
>
> -----Original Message-----
> From: Koenig, Christian
> Sent: Thursday, November 30, 2017 3:00 PM
> To: Liu, Shaoyun; amd-gfx at lists.freedesktop.org
> Subject: Re: [PATCH 3/5] drm/amdgpu: Avoid to use SOC15_REG_OFFSET in static const array
>
>> Like static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[]
> Actually those could be completely nuked instead.
>
> We added those because we feared that the GDS registers similar to the VMID base registers aren't continuously for older hardware generations.
>
> But somebody just copy & pasted the code from gfx8 over to gfx9 and here it doesn't make to much sense any more.
>
> Please just remove those arrays and replace them with register offsets directly in the code.
>
> E.g. instead of amdgpu_gds_reg_offset[vmid].mem_base use SOC15_REG_OFFSET(GC, 0, mmGDS_VMID0_BASE) + 2 * vmid. etc..
>
> Thanks,
> Christian.
>
> Am 30.11.2017 um 19:58 schrieb Liu, Shaoyun:
>> I think what you are talking is the  golden setting registers as such as   golden_settings_gc_9_0[]   etc .  I can change them as suggested (Use  SOC15_REG_GOLDEN_VALUE  and define a structure for the golden register values).
>>
>> There are some places that requires directly use the register offset  in the constant array .  Like
>>    static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[]
>> The structure amdgpu_gds_reg_offset require driver directly put the offset in the array .  It will introduce a lot other un-clean and unnecessary  changes  if we change the structure . For this kind of case , I would rather add the fixed base  + reg offset as  mentioned before :    #define  VG10_GC_BASE0_OFFSET(reg)  (0x2000 + reg) ,  since all of these GDS register  are based on same  GC_BASE0.
>>
>> Regards
>> Shaoyun.liu
>>
>> -----Original Message-----
>> From: Christian König [mailto:ckoenig.leichtzumerken at gmail.com]
>> Sent: Thursday, November 30, 2017 3:42 AM
>> To: Liu, Shaoyun; Koenig, Christian; amd-gfx at lists.freedesktop.org
>> Subject: Re: [PATCH 3/5] drm/amdgpu: Avoid to use SOC15_REG_OFFSET in
>> static const array
>>
>> I would rather go with something like this:
>>
>> #define SOC15_REG_GOLDEN_VALUE(ip, inst, reg, value, mask) {
>> ip##_HWIP, inst, reg##_BASE_IDX, reg, value, mask }
>>
>> And please define a structure for the golden register values instead of just using an u32 array.
>>
>> Regards,
>> Christian.
>>
>> Am 29.11.2017 um 21:52 schrieb Liu, Shaoyun:
>>> There are other place of the golden register setting where I already replace the SOC15_REG_OFFSET with SOC15_REG_ENTRY.   All these GDS register offset are based on GC_BASE0 (0x2000) so how about I use following defines
>>>
>>> #define  VG10_GC_BASE0_OFFSET(reg)  (0x2000 + reg)
>>>
>>> And use it to replace the SOC15_REG_OFFSET used in
>>> amdgpu_gds_reg_offset[]
>>>
>>> Regards
>>> Shaoyun.liu
>>>
>>> -----Original Message-----
>>> From: Christian König [mailto:ckoenig.leichtzumerken at gmail.com]
>>> Sent: Wednesday, November 29, 2017 3:08 PM
>>> To: Liu, Shaoyun; amd-gfx at lists.freedesktop.org
>>> Subject: Re: [PATCH 3/5] drm/amdgpu: Avoid to use SOC15_REG_OFFSET in
>>> static const array
>>>
>>> Am 29.11.2017 um 20:09 schrieb Shaoyun Liu:
>>>> Change-Id: I59828a9a10652988e22b50d87dd1ec9df8ae7a1d
>>>> Signed-off-by: Shaoyun Liu <Shaoyun.Liu at amd.com>
>>>> ---
>>>>      drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c     | 259 +++++++++++++++---------------
>>>>      drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c     |  14 +-
>>>>      drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c    |  13 +-
>>>>      drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c    |  12 +-
>>>>      drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c    |  88 +++++-----
>>>>      drivers/gpu/drm/amd/amdgpu/soc15.c        |  93 ++++++++---
>>>>      drivers/gpu/drm/amd/amdgpu/soc15.h        |   4 +
>>>>      drivers/gpu/drm/amd/amdgpu/soc15_common.h |   3 +
>>>>      drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c     |   3 +-
>>>>      drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c     |   2 +-
>>>>      10 files changed, 278 insertions(+), 213 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>>> index 5497ed6..f0560d2 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>>>> @@ -67,150 +67,151 @@
>>>>      
>>>>      static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] =
>>>>      {
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID0_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID0_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID0),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID0) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID1_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID1_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID1),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID1) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID2_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID2_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID2),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID2) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID3_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID3_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID3),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID3) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID4_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID4_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID4),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID4) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID5_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID5_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID5),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID5) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID6_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID6_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID6),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID6) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID7_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID7_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID7),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID7) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID8_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID8_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID8),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID8) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID9_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID9_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID9),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID9) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID10_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID10_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID10),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID10) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID11_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID11_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID11),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID11) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID12_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID12_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID12),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID12)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID13_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID13_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID13),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID13) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID14_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID14_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID14),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID14) },
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGDS_VMID15_BASE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_VMID15_SIZE),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_GWS_VMID15),
>>>> -	  SOC15_REG_OFFSET(GC, 0, mmGDS_OA_VMID15) }
>>>> +	/* Fix me if GC base for the register is not 0x2000 in the future
>>>> +asic */
>>> Yeah, we need a better solution for this.
>>>
>>> How about a VG10_GOLDEN_REG macro or something like this?
>>>
>>> Regards,
>>> Christian.
>>>
>>>> +	{ (0x2000 + mmGDS_VMID0_BASE),
>>>> +	  (0x2000 + mmGDS_VMID0_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID0),
>>>> +	  (0x2000 + mmGDS_OA_VMID0) },
>>>> +	{ (0x2000 + mmGDS_VMID1_BASE),
>>>> +	  (0x2000 + mmGDS_VMID1_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID1),
>>>> +	  (0x2000 + mmGDS_OA_VMID1) },
>>>> +	{ (0x2000 + mmGDS_VMID2_BASE),
>>>> +	  (0x2000 + mmGDS_VMID2_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID2),
>>>> +	  (0x2000 + mmGDS_OA_VMID2) },
>>>> +	{ (0x2000 + mmGDS_VMID3_BASE),
>>>> +	  (0x2000 + mmGDS_VMID3_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID3),
>>>> +	  (0x2000 + mmGDS_OA_VMID3) },
>>>> +	{ (0x2000 + mmGDS_VMID4_BASE),
>>>> +	  (0x2000 + mmGDS_VMID4_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID4),
>>>> +	  (0x2000 + mmGDS_OA_VMID4) },
>>>> +	{ (0x2000 + mmGDS_VMID5_BASE),
>>>> +	  (0x2000 + mmGDS_VMID5_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID5),
>>>> +	  (0x2000 + mmGDS_OA_VMID5) },
>>>> +	{ (0x2000 + mmGDS_VMID6_BASE),
>>>> +	  (0x2000 + mmGDS_VMID6_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID6),
>>>> +	  (0x2000 + mmGDS_OA_VMID6) },
>>>> +	{ (0x2000 + mmGDS_VMID7_BASE),
>>>> +	  (0x2000 + mmGDS_VMID7_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID7),
>>>> +	  (0x2000 + mmGDS_OA_VMID7) },
>>>> +	{ (0x2000 + mmGDS_VMID8_BASE),
>>>> +	  (0x2000 + mmGDS_VMID8_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID8),
>>>> +	  (0x2000 + mmGDS_OA_VMID8) },
>>>> +	{ (0x2000 + mmGDS_VMID9_BASE),
>>>> +	  (0x2000 + mmGDS_VMID9_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID9),
>>>> +	  (0x2000 + mmGDS_OA_VMID9) },
>>>> +	{ (0x2000 + mmGDS_VMID10_BASE),
>>>> +	  (0x2000 + mmGDS_VMID10_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID10),
>>>> +	  (0x2000 + mmGDS_OA_VMID10) },
>>>> +	{ (0x2000 + mmGDS_VMID11_BASE),
>>>> +	  (0x2000 + mmGDS_VMID11_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID11),
>>>> +	  (0x2000 + mmGDS_OA_VMID11) },
>>>> +	{ (0x2000 + mmGDS_VMID12_BASE),
>>>> +	  (0x2000 + mmGDS_VMID12_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID12),
>>>> +	  (0x2000 + mmGDS_OA_VMID12)},
>>>> +	{ (0x2000 + mmGDS_VMID13_BASE),
>>>> +	  (0x2000 + mmGDS_VMID13_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID13),
>>>> +	  (0x2000 + mmGDS_OA_VMID13) },
>>>> +	{ (0x2000 + mmGDS_VMID14_BASE),
>>>> +	  (0x2000 + mmGDS_VMID14_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID14),
>>>> +	  (0x2000 + mmGDS_OA_VMID14) },
>>>> +	{ (0x2000 + mmGDS_VMID15_BASE),
>>>> +	  (0x2000 + mmGDS_VMID15_SIZE),
>>>> +	  (0x2000 + mmGDS_GWS_VMID15),
>>>> +	  (0x2000 + mmGDS_OA_VMID15) }
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_gc_9_0[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPC_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPF_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPG_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmDB_DEBUG2), 0xf00fffff, 0x00000420,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_GPU_ID), 0x0000000f, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmIA_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_BINNER_EVENT_CNTL_3), 0x00000003, 0x82400024,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_ENHANCE), 0x3fffffff, 0x00000001,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_LINE_STIPPLE_STATE), 0x0000ff0f, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_0), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_1), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_2), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_PREWALKER_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_SPM_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmSH_MEM_CONFIG), 0x00001000, 0x00001000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmSPI_CONFIG_CNTL_1), 0x0000000f, 0x01000107,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmSQC_CONFIG), 0x03000000, 0x020a2000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTA_CNTL_AUX), 0xfffffeef, 0x010b0000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTCP_CHAN_STEER_HI), 0xffffffff, 0x4a2c0e68,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTCP_CHAN_STEER_LO), 0xffffffff, 0xb5d3f197,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmVGT_CACHE_INVALIDATION), 0x3fff3af3, 0x19200000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmVGT_GS_MAX_WAVE_ID), 0x00000fff, 0x000003ff,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmWD_UTCL1_CNTL), 0x08000000, 0x08000080
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPC_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPF_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPG_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmDB_DEBUG2), 0xf00fffff, 0x00000420,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_GPU_ID), 0x0000000f, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmIA_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_BINNER_EVENT_CNTL_3), 0x00000003, 0x82400024,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_ENHANCE), 0x3fffffff, 0x00000001,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_LINE_STIPPLE_STATE), 0x0000ff0f, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_0), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_1), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_2), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_PREWALKER_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_SPM_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmSH_MEM_CONFIG), 0x00001000, 0x00001000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmSPI_CONFIG_CNTL_1), 0x0000000f, 0x01000107,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmSQC_CONFIG), 0x03000000, 0x020a2000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTA_CNTL_AUX), 0xfffffeef, 0x010b0000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTCP_CHAN_STEER_HI), 0xffffffff, 0x4a2c0e68,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTCP_CHAN_STEER_LO), 0xffffffff, 0xb5d3f197,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmVGT_CACHE_INVALIDATION), 0x3fff3af3, 0x19200000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmVGT_GS_MAX_WAVE_ID), 0x00000fff, 0x000003ff,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmWD_UTCL1_CNTL), 0x08000000, 0x08000080
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_gc_9_0_vg10[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCB_HW_CONTROL), 0x0000f000, 0x00012107,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCB_HW_CONTROL_3), 0x30000000, 0x10000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_ADDR_CONFIG), 0xffff77ff, 0x2a114042,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_ADDR_CONFIG_READ), 0xffff77ff, 0x2a114042,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_ENHANCE_1), 0x00008000, 0x00048000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRMI_UTCL1_CNTL2), 0x00030000, 0x00020000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTD_CNTL), 0x00001800, 0x00000800
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCB_HW_CONTROL), 0x0000f000, 0x00012107,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCB_HW_CONTROL_3), 0x30000000, 0x10000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_ADDR_CONFIG), 0xffff77ff, 0x2a114042,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_ADDR_CONFIG_READ), 0xffff77ff, 0x2a114042,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_ENHANCE_1), 0x00008000, 0x00048000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRMI_UTCL1_CNTL2), 0x00030000, 0x00020000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTD_CNTL), 0x00001800, 0x00000800
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_gc_9_1[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCB_HW_CONTROL), 0xfffdf3cf, 0x00014104,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPC_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPF_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCPG_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmDB_DEBUG2), 0xf00fffff, 0x00000420,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_GPU_ID), 0x0000000f, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmIA_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_BINNER_EVENT_CNTL_3), 0x00000003, 0x82400024,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_ENHANCE), 0x3fffffff, 0x00000001,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_LINE_STIPPLE_STATE), 0x0000ff0f, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_0), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_1), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_GPM_UTCL1_CNTL_2), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_PREWALKER_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRLC_SPM_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTA_CNTL_AUX), 0xfffffeef, 0x010b0000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTCP_CHAN_STEER_HI), 0xffffffff, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTCP_CHAN_STEER_LO), 0xffffffff, 0x00003120,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmVGT_CACHE_INVALIDATION), 0x3fff3af3, 0x19200000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmVGT_GS_MAX_WAVE_ID), 0x00000fff, 0x000000ff,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmWD_UTCL1_CNTL), 0x08000000, 0x08000080
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCB_HW_CONTROL), 0xfffdf3cf, 0x00014104,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPC_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPF_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCPG_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmDB_DEBUG2), 0xf00fffff, 0x00000420,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_GPU_ID), 0x0000000f, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmIA_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_BINNER_EVENT_CNTL_3), 0x00000003, 0x82400024,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_ENHANCE), 0x3fffffff, 0x00000001,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_LINE_STIPPLE_STATE), 0x0000ff0f, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_0), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_1), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_GPM_UTCL1_CNTL_2), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_PREWALKER_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRLC_SPM_UTCL1_CNTL), 0x08000000, 0x08000080,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTA_CNTL_AUX), 0xfffffeef, 0x010b0000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTCP_CHAN_STEER_HI), 0xffffffff, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTCP_CHAN_STEER_LO), 0xffffffff, 0x00003120,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmVGT_CACHE_INVALIDATION), 0x3fff3af3, 0x19200000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmVGT_GS_MAX_WAVE_ID), 0x00000fff, 0x000000ff,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmWD_UTCL1_CNTL), 0x08000000, 0x08000080
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_gc_9_1_rv1[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(GC, 0, mmCB_HW_CONTROL_3), 0x30000000, 0x10000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_ADDR_CONFIG), 0xffff77ff, 0x24000042,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGB_ADDR_CONFIG_READ), 0xffff77ff, 0x24000042,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_ENHANCE_1), 0xffffffff, 0x04048000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmPA_SC_MODE_CNTL_1), 0x06000000, 0x06000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmRMI_UTCL1_CNTL2), 0x00030000, 0x00020000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmTD_CNTL), 0x01bd9f33, 0x00000800
>>>> +	SOC15_REG_ENTRY(GC, 0, mmCB_HW_CONTROL_3), 0x30000000, 0x10000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_ADDR_CONFIG), 0xffff77ff, 0x24000042,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGB_ADDR_CONFIG_READ), 0xffff77ff, 0x24000042,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_ENHANCE_1), 0xffffffff, 0x04048000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmPA_SC_MODE_CNTL_1), 0x06000000, 0x06000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmRMI_UTCL1_CNTL2), 0x00030000, 0x00020000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmTD_CNTL), 0x01bd9f33, 0x00000800
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_gc_9_x_common[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGRBM_CAM_INDEX), 0xffffffff, 0x00000000,
>>>> -	SOC15_REG_OFFSET(GC, 0, mmGRBM_CAM_DATA), 0xffffffff, 0x2544c382
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGRBM_CAM_INDEX), 0xffffffff, 0x00000000,
>>>> +	SOC15_REG_ENTRY(GC, 0, mmGRBM_CAM_DATA), 0xffffffff, 0x2544c382
>>>>      };
>>>>      
>>>>      #define VEGA10_GB_ADDR_CONFIG_GOLDEN 0x2a114042 @@ -230,18
>>>> +231,18 @@ static void gfx_v9_0_init_golden_registers(struct amdgpu_device *adev)
>>>>      {
>>>>      	switch (adev->asic_type) {
>>>>      	case CHIP_VEGA10:
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_gc_9_0,
>>>>      						 ARRAY_SIZE(golden_settings_gc_9_0));
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_gc_9_0_vg10,
>>>>      						 ARRAY_SIZE(golden_settings_gc_9_0_vg10));
>>>>      		break;
>>>>      	case CHIP_RAVEN:
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_gc_9_1,
>>>>      						 ARRAY_SIZE(golden_settings_gc_9_1));
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_gc_9_1_rv1,
>>>>      						 ARRAY_SIZE(golden_settings_gc_9_1_rv1));
>>>>      		break;
>>>> @@ -249,7 +250,7 @@ static void gfx_v9_0_init_golden_registers(struct amdgpu_device *adev)
>>>>      		break;
>>>>      	}
>>>>      
>>>> -	amdgpu_program_register_sequence(adev, golden_settings_gc_9_x_common,
>>>> +	soc15_program_register_sequence(adev,
>>>> +golden_settings_gc_9_x_common,
>>>>      					(const u32)ARRAY_SIZE(golden_settings_gc_9_x_common));
>>>>      }
>>>>      
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>>>> index 30eb625..ca66e1c 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>>>> @@ -35,6 +35,7 @@
>>>>      #include "mmhub/mmhub_1_0_offset.h"
>>>>      #include "athub/athub_1_0_offset.h"
>>>>      
>>>> +#include "soc15.h"
>>>>      #include "soc15_common.h"
>>>>      #include "umc/umc_6_0_sh_mask.h"
>>>>      
>>>> @@ -76,14 +77,14 @@
>>>>      
>>>>      static const u32 golden_settings_mmhub_1_0_0[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(MMHUB, 0, mmDAGB1_WRCLI2), 0x00000007, 0xfe5fe0fa,
>>>> -	SOC15_REG_OFFSET(MMHUB, 0, mmMMEA1_DRAM_WR_CLI2GRP_MAP0), 0x00000030, 0x55555565
>>>> +	SOC15_REG_ENTRY(MMHUB, 0, mmDAGB1_WRCLI2), 0x00000007, 0xfe5fe0fa,
>>>> +	SOC15_REG_ENTRY(MMHUB, 0, mmMMEA1_DRAM_WR_CLI2GRP_MAP0),
>>>> +0x00000030,
>>>> +0x55555565
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_athub_1_0_0[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(ATHUB, 0, mmRPB_ARB_CNTL), 0x0000ff00, 0x00000800,
>>>> -	SOC15_REG_OFFSET(ATHUB, 0, mmRPB_ARB_CNTL2), 0x00ff00ff, 0x00080008
>>>> +	SOC15_REG_ENTRY(ATHUB, 0, mmRPB_ARB_CNTL), 0x0000ff00, 0x00000800,
>>>> +	SOC15_REG_ENTRY(ATHUB, 0, mmRPB_ARB_CNTL2), 0x00ff00ff, 0x00080008
>>>>      };
>>>>      
>>>>      /* Ecc related register addresses, (BASE + reg offset) */ @@
>>>> -895,12
>>>> +896,13 @@ static int gmc_v9_0_sw_fini(void *handle)
>>>>      
>>>>      static void gmc_v9_0_init_golden_registers(struct amdgpu_device *adev)
>>>>      {
>>>> +
>>>>      	switch (adev->asic_type) {
>>>>      	case CHIP_VEGA10:
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						golden_settings_mmhub_1_0_0,
>>>>      						ARRAY_SIZE(golden_settings_mmhub_1_0_0));
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						golden_settings_athub_1_0_0,
>>>>      						ARRAY_SIZE(golden_settings_athub_1_0_0));
>>>>      		break;
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
>>>> b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
>>>> index 76db711..3b87b8a 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
>>>> @@ -78,8 +78,8 @@ u32 nbio_v6_1_get_memsize(struct amdgpu_device
>>>> *adev)
>>>>      
>>>>      static const u32 nbio_sdma_doorbell_range_reg[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(NBIO, 0, mmBIF_SDMA0_DOORBELL_RANGE),
>>>> -	SOC15_REG_OFFSET(NBIO, 0, mmBIF_SDMA1_DOORBELL_RANGE)
>>>> +	(0xd20 + mmBIF_SDMA0_DOORBELL_RANGE),
>>>> +	(0xd20 + mmBIF_SDMA1_DOORBELL_RANGE)
>>>>      };
>>>>      
>>>>      void nbio_v6_1_sdma_doorbell_range(struct amdgpu_device *adev,
>>>> int instance, @@ -94,6 +94,7 @@ void nbio_v6_1_sdma_doorbell_range(struct amdgpu_device *adev, int instance,
>>>>      		doorbell_range = REG_SET_FIELD(doorbell_range,
>>>> BIF_SDMA0_DOORBELL_RANGE, SIZE, 0);
>>>>      
>>>>      	WREG32(nbio_sdma_doorbell_range_reg[instance], doorbell_range);
>>>> +
>>>>      }
>>>>      
>>>>      void nbio_v6_1_enable_doorbell_aperture(struct amdgpu_device
>>>> *adev, @@ -216,8 +217,8 @@ void nbio_v6_1_get_clockgating_state(struct amdgpu_device *adev, u32 *flags)
>>>>      }
>>>>      
>>>>      const struct nbio_hdp_flush_reg nbio_v6_1_hdp_flush_reg = {
>>>> -	.hdp_flush_req_offset = SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_GPU_HDP_FLUSH_REQ),
>>>> -	.hdp_flush_done_offset = SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_GPU_HDP_FLUSH_DONE),
>>>> +	.hdp_flush_req_offset =  0xd20 + mmBIF_BX_PF0_GPU_HDP_FLUSH_REQ,
>>>> +	.hdp_flush_done_offset = 0xd20 + mmBIF_BX_PF0_GPU_HDP_FLUSH_DONE,
>>>>      	.ref_and_mask_cp0 = BIF_BX_PF0_GPU_HDP_FLUSH_DONE__CP0_MASK,
>>>>      	.ref_and_mask_cp1 = BIF_BX_PF0_GPU_HDP_FLUSH_DONE__CP1_MASK,
>>>>      	.ref_and_mask_cp2 = BIF_BX_PF0_GPU_HDP_FLUSH_DONE__CP2_MASK,
>>>> @@ -233,8 +234,8 @@ void nbio_v6_1_get_clockgating_state(struct amdgpu_device *adev, u32 *flags)
>>>>      };
>>>>      
>>>>      const struct nbio_pcie_index_data nbio_v6_1_pcie_index_data = {
>>>> -	.index_offset = SOC15_REG_OFFSET(NBIO, 0, mmPCIE_INDEX),
>>>> -	.data_offset = SOC15_REG_OFFSET(NBIO, 0, mmPCIE_DATA),
>>>> +	.index_offset = 0x0 + mmPCIE_INDEX,
>>>> +	.data_offset = 0x0 + mmPCIE_DATA,
>>>>      };
>>>>      
>>>>      void nbio_v6_1_detect_hw_virt(struct amdgpu_device *adev) diff
>>>> --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c
>>>> index 1fb7717..7252d572 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c
>>>> @@ -75,8 +75,8 @@ u32 nbio_v7_0_get_memsize(struct amdgpu_device
>>>> *adev)
>>>>      
>>>>      static const u32 nbio_sdma_doorbell_range_reg[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(NBIO, 0, mmBIF_SDMA0_DOORBELL_RANGE),
>>>> -	SOC15_REG_OFFSET(NBIO, 0, mmBIF_SDMA1_DOORBELL_RANGE)
>>>> +	(0xd20 + mmBIF_SDMA0_DOORBELL_RANGE),
>>>> +	(0xd20 + mmBIF_SDMA1_DOORBELL_RANGE)
>>>>      };
>>>>      
>>>>      void nbio_v7_0_sdma_doorbell_range(struct amdgpu_device *adev,
>>>> int instance, @@ -186,8 +186,8 @@ void nbio_v7_0_ih_control(struct amdgpu_device *adev)
>>>>      }
>>>>      
>>>>      const struct nbio_hdp_flush_reg nbio_v7_0_hdp_flush_reg = {
>>>> -	.hdp_flush_req_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_REQ),
>>>> -	.hdp_flush_done_offset = SOC15_REG_OFFSET(NBIO, 0, mmGPU_HDP_FLUSH_DONE),
>>>> +	.hdp_flush_req_offset = 0xd20 + mmGPU_HDP_FLUSH_REQ,
>>>> +	.hdp_flush_done_offset = 0xd20 + mmGPU_HDP_FLUSH_DONE,
>>>>      	.ref_and_mask_cp0 = GPU_HDP_FLUSH_DONE__CP0_MASK,
>>>>      	.ref_and_mask_cp1 = GPU_HDP_FLUSH_DONE__CP1_MASK,
>>>>      	.ref_and_mask_cp2 = GPU_HDP_FLUSH_DONE__CP2_MASK, @@ -203,6
>>>> +203,6 @@ void nbio_v7_0_ih_control(struct amdgpu_device *adev)
>>>>      };
>>>>      
>>>>      const struct nbio_pcie_index_data nbio_v7_0_pcie_index_data = {
>>>> -	.index_offset = SOC15_REG_OFFSET(NBIO, 0, mmPCIE_INDEX2),
>>>> -	.data_offset = SOC15_REG_OFFSET(NBIO, 0, mmPCIE_DATA2)
>>>> +	.index_offset = 0x0 + mmPCIE_INDEX2,
>>>> +	.data_offset = 0x0 + mmPCIE_DATA2
>>>>      };
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>>>> index e324c66..c653695 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
>>>> @@ -54,57 +54,57 @@
>>>>      static void sdma_v4_0_set_irq_funcs(struct amdgpu_device *adev);
>>>>      
>>>>      static const u32 golden_settings_sdma_4[] = {
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_CHICKEN_BITS), 0xfe931f07, 0x02831d07,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_CLK_CTRL), 0xff000ff0, 0x3f000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GFX_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GFX_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_PAGE_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_PAGE_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_POWER_CNTL), 0x003ff006, 0x0003c000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC0_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC0_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC1_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC1_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_UTCL1_PAGE), 0x000003ff, 0x000003c0,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_CHICKEN_BITS), 0xfe931f07, 0x02831f07,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_CLK_CTRL), 0xffffffff, 0x3f000100,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_GFX_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_GFX_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_PAGE_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_PAGE_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_POWER_CNTL), 0x003ff000, 0x0003c000,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_RLC0_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_RLC0_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_RLC1_IB_CNTL), 0x800f0100, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_RLC1_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_UTCL1_PAGE), 0x000003ff, 0x000003c0
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_CHICKEN_BITS), 0xfe931f07, 0x02831d07,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_CLK_CTRL), 0xff000ff0, 0x3f000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GFX_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GFX_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_PAGE_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_PAGE_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_POWER_CNTL), 0x003ff006, 0x0003c000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC0_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC0_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC1_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC1_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_UTCL1_PAGE), 0x000003ff, 0x000003c0,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_CHICKEN_BITS), 0xfe931f07, 0x02831f07,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_CLK_CTRL), 0xffffffff, 0x3f000100,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_GFX_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_GFX_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_PAGE_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_PAGE_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_POWER_CNTL), 0x003ff000, 0x0003c000,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_RLC0_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_RLC0_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_RLC1_IB_CNTL), 0x800f0100, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_RLC1_RB_WPTR_POLL_CNTL), 0x0000fff0, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_UTCL1_PAGE), 0x000003ff,
>>>> +0x000003c0
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_sdma_vg10[] = {
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG), 0x0018773f, 0x00104002,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ), 0x0018773f, 0x00104002,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG), 0x0018773f, 0x00104002,
>>>> -	SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ), 0x0018773f, 0x00104002
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG), 0x0018773f, 0x00104002,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ), 0x0018773f, 0x00104002,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG), 0x0018773f, 0x00104002,
>>>> +	SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ),
>>>> +0x0018773f,
>>>> +0x00104002
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_sdma_4_1[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_CHICKEN_BITS), 0xfe931f07, 0x02831d07,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_CLK_CTRL), 0xffffffff, 0x3f000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GFX_IB_CNTL), 0x800f0111, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GFX_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_POWER_CNTL), 0xfc3fffff, 0x40000051,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC0_IB_CNTL), 0x800f0111, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC0_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC1_IB_CNTL), 0x800f0111, 0x00000100,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_RLC1_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_UTCL1_PAGE), 0x000003ff, 0x000003c0
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_CHICKEN_BITS), 0xfe931f07, 0x02831d07,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_CLK_CTRL), 0xffffffff, 0x3f000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GFX_IB_CNTL), 0x800f0111, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GFX_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_POWER_CNTL), 0xfc3fffff, 0x40000051,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC0_IB_CNTL), 0x800f0111, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC0_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC1_IB_CNTL), 0x800f0111, 0x00000100,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_RLC1_RB_WPTR_POLL_CNTL), 0xfffffff7, 0x00403000,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_UTCL1_PAGE), 0x000003ff,
>>>> +0x000003c0
>>>>      };
>>>>      
>>>>      static const u32 golden_settings_sdma_rv1[] =
>>>>      {
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG), 0x0018773f, 0x00000002,
>>>> -	SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ), 0x0018773f, 0x00000002
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG), 0x0018773f, 0x00000002,
>>>> +	SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ),
>>>> +0x0018773f,
>>>> +0x00000002
>>>>      };
>>>>      
>>>>      #define sdma_v4_0_get_reg_offset(inst, offset) ( 0 == inst ? \
>>>> @@
>>>> -115,18 +115,18 @@ static void sdma_v4_0_init_golden_registers(struct amdgpu_device *adev)
>>>>      {
>>>>      	switch (adev->asic_type) {
>>>>      	case CHIP_VEGA10:
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_sdma_4,
>>>>      						 ARRAY_SIZE(golden_settings_sdma_4));
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_sdma_vg10,
>>>>      						 ARRAY_SIZE(golden_settings_sdma_vg10));
>>>>      		break;
>>>>      	case CHIP_RAVEN:
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_sdma_4_1,
>>>>      						 ARRAY_SIZE(golden_settings_sdma_4_1));
>>>> -		amdgpu_program_register_sequence(adev,
>>>> +		soc15_program_register_sequence(adev,
>>>>      						 golden_settings_sdma_rv1,
>>>>      						 ARRAY_SIZE(golden_settings_sdma_rv1));
>>>>      		break;
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c
>>>> b/drivers/gpu/drm/amd/amdgpu/soc15.c
>>>> index 7c88bcb..779c671 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/soc15.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
>>>> @@ -332,25 +332,34 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev,
>>>>      	return true;
>>>>      }
>>>>      
>>>> -static struct amdgpu_allowed_register_entry soc15_allowed_read_registers[] = {
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS2)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS_SE0)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS_SE1)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS_SE2)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGRBM_STATUS_SE3)},
>>>> -	{ SOC15_REG_OFFSET(SDMA0, 0, mmSDMA0_STATUS_REG)},
>>>> -	{ SOC15_REG_OFFSET(SDMA1, 0, mmSDMA1_STATUS_REG)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_STAT)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_STALLED_STAT1)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_STALLED_STAT2)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_STALLED_STAT3)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_CPF_BUSY_STAT)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_CPF_STALLED_STAT1)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_CPF_STATUS)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_CPC_STALLED_STAT1)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmCP_CPC_STATUS)},
>>>> -	{ SOC15_REG_OFFSET(GC, 0, mmGB_ADDR_CONFIG)},
>>>> +struct soc15_allowed_register_entry {
>>>> +	uint32_t hwip;
>>>> +	uint32_t inst;
>>>> +	uint32_t seg;
>>>> +	uint32_t reg_offset;
>>>> +	bool grbm_indexed;
>>>> +};
>>>> +
>>>> +
>>>> +static struct soc15_allowed_register_entry soc15_allowed_read_registers[] = {
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS2)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS_SE0)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS_SE1)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS_SE2)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGRBM_STATUS_SE3)},
>>>> +	{ SOC15_REG_ENTRY(SDMA0, 0, mmSDMA0_STATUS_REG)},
>>>> +	{ SOC15_REG_ENTRY(SDMA1, 0, mmSDMA1_STATUS_REG)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_STAT)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_STALLED_STAT1)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_STALLED_STAT2)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_STALLED_STAT3)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_CPF_BUSY_STAT)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_CPF_STALLED_STAT1)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_CPF_STATUS)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_CPC_STALLED_STAT1)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmCP_CPC_STATUS)},
>>>> +	{ SOC15_REG_ENTRY(GC, 0, mmGB_ADDR_CONFIG)},
>>>>      };
>>>>      
>>>>      static uint32_t soc15_read_indexed_register(struct amdgpu_device
>>>> *adev, u32 se_num, @@ -390,10 +399,13 @@ static int soc15_read_register(struct amdgpu_device *adev, u32 se_num,
>>>>      			    u32 sh_num, u32 reg_offset, u32 *value)
>>>>      {
>>>>      	uint32_t i;
>>>> +	struct soc15_allowed_register_entry  *en;
>>>>      
>>>>      	*value = 0;
>>>>      	for (i = 0; i < ARRAY_SIZE(soc15_allowed_read_registers); i++) {
>>>> -		if (reg_offset != soc15_allowed_read_registers[i].reg_offset)
>>>> +		en = &soc15_allowed_read_registers[i];
>>>> +		if (reg_offset != (adev->reg_offset[en->hwip][en->inst][en->seg]
>>>> +					+ en->reg_offset))
>>>>      			continue;
>>>>      
>>>>      		*value = soc15_get_register_value(adev, @@ -404,6 +416,47 @@
>>>> static int soc15_read_register(struct amdgpu_device *adev, u32 se_num,
>>>>      	return -EINVAL;
>>>>      }
>>>>      
>>>> +
>>>> +/**
>>>> + * soc15_program_register_sequence - program an array of registers.
>>>> + *
>>>> + * @adev: amdgpu_device pointer
>>>> + * @regs: pointer to the register array
>>>> + * @array_size: size of the register array
>>>> + *
>>>> + * Programs an array or registers with and and or masks.
>>>> + * This is a helper for setting golden registers.
>>>> + */
>>>> +
>>>> +void soc15_program_register_sequence(struct amdgpu_device *adev,
>>>> +					     const u32 *regs,
>>>> +					     const u32 array_size)
>>>> +{
>>>> +	u32 tmp, reg, and_mask, or_mask;
>>>> +	int i;
>>>> +
>>>> +	if (array_size % 6)
>>>> +		return;
>>>> +
>>>> +	for (i = 0; i < array_size; i +=6) {
>>>> +		reg =  adev->reg_offset[regs[i + 0]][regs[i + 1]][regs[i + 2]] +
>>>> +			regs[i + 3];
>>>> +		and_mask = regs[i + 4];
>>>> +		or_mask = regs[i + 5];
>>>> +
>>>> +		if (and_mask == 0xffffffff) {
>>>> +			tmp = or_mask;
>>>> +		} else {
>>>> +			tmp = RREG32(reg);
>>>> +			tmp &= ~and_mask;
>>>> +			tmp |= or_mask;
>>>> +		}
>>>> +		WREG32(reg, tmp);
>>>> +	}
>>>> +
>>>> +}
>>>> +
>>>> +
>>>>      static int soc15_asic_reset(struct amdgpu_device *adev)
>>>>      {
>>>>      	u32 i;
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.h
>>>> b/drivers/gpu/drm/amd/amdgpu/soc15.h
>>>> index c34496f..4882307 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/soc15.h
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.h
>>>> @@ -33,6 +33,10 @@ void soc15_grbm_select(struct amdgpu_device *adev,
>>>>      		    u32 me, u32 pipe, u32 queue, u32 vmid);
>>>>      int soc15_set_ip_blocks(struct amdgpu_device *adev);
>>>>      
>>>> +void soc15_program_register_sequence(struct amdgpu_device *adev,
>>>> +					     const u32 *registers,
>>>> +					     const u32 array_size);
>>>> +
>>>>      int vega10_reg_base_init(struct amdgpu_device *adev);
>>>>      
>>>>      #endif
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15_common.h
>>>> b/drivers/gpu/drm/amd/amdgpu/soc15_common.h
>>>> index 62a6e21..7f73125 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/soc15_common.h
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/soc15_common.h
>>>> @@ -53,6 +53,9 @@ struct nbio_pcie_index_data {
>>>>                                                              (3 ==
>>>> reg##_BASE_IDX ? ip##_BASE__INST##inst##_SEG3 + reg : \
>>>>                                                                  
>>>> (ip##_BASE__INST##inst##_SEG4 + reg)))))
>>>>      
>>>> +#define SOC15_REG_ENTRY(ip, inst, reg)	ip##_HWIP, inst, reg##_BASE_IDX, reg
>>>> +
>>>> +
>>>>      #define WREG32_FIELD15(ip, idx, reg, field, val)	\
>>>>      	WREG32(adev->reg_offset[ip##_HWIP][idx][mm##reg##_BASE_IDX] + mm##reg,	\
>>>>      	(RREG32(adev->reg_offset[ip##_HWIP][idx][mm##reg##_BASE_IDX] + mm##reg)	\
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
>>>> index 660fa41..6823c7b 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
>>>> @@ -1681,7 +1681,8 @@ static int uvd_v7_0_set_clockgating_state(void *handle,
>>>>      static const struct amdgpu_ring_funcs uvd_v7_0_ring_vm_funcs = {
>>>>      	.type = AMDGPU_RING_TYPE_UVD,
>>>>      	.align_mask = 0xf,
>>>> -	.nop = PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_NO_OP), 0),
>>>> +	/*Fix me  if UVD_HWIP base or  mmUVD_NO_OP_BASE_IDX changed in future asic */
>>>> +	.nop = PACKET0((0x7e00 + mmUVD_NO_OP), 0),
>>>>      	.support_64bit_ptrs = false,
>>>>      	.vmhub = AMDGPU_MMHUB,
>>>>      	.get_rptr = uvd_v7_0_ring_get_rptr, diff --git
>>>> a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>>>> b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>>>> index e4673f7..f93ca21 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>>>> @@ -1100,7 +1100,7 @@ static int vcn_v1_0_process_interrupt(struct amdgpu_device *adev,
>>>>      static const struct amdgpu_ring_funcs vcn_v1_0_dec_ring_vm_funcs = {
>>>>      	.type = AMDGPU_RING_TYPE_VCN_DEC,
>>>>      	.align_mask = 0xf,
>>>> -	.nop = PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_NO_OP), 0),
>>>> +	.nop = PACKET0(0x81ff, 0),
>>>>      	.support_64bit_ptrs = false,
>>>>      	.vmhub = AMDGPU_MMHUB,
>>>>      	.get_rptr = vcn_v1_0_dec_ring_get_rptr,
>>> _______________________________________________
>>> 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