<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<p style="font-family:Arial;font-size:10pt;color:#008000;margin:15pt;" align="Left">
[Public]<br>
</p>
<br>
<div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
><span style="font-family: -apple-system, HelveticaNeue; font-size: 14.6667px; display: inline !important;">(... && !amdgpu_sriov_vf(adev))</span></div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
<span style="font-family: -apple-system, HelveticaNeue; font-size: 14.6667px; display: inline !important;"><br>
</span></div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
<span style="font-family: -apple-system, HelveticaNeue; font-size: 14.6667px; display: inline !important;">This kind of closes the door for all versions. My thought was - having it in the same function provides a logical grouping for how it's handled for different
 cases - VF vs non-VF - for a particular IP version.</span></div>
<div id="ms-outlook-mobile-signature">
<div><br>
</div>
Thanks,<br>
Lijo</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Kuehling, Felix <Felix.Kuehling@amd.com><br>
<b>Sent:</b> Wednesday, November 10, 2021 9:27:22 PM<br>
<b>To:</b> Lazar, Lijo <Lijo.Lazar@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Zhang, Bokun <Bokun.Zhang@amd.com><br>
<b>Subject:</b> Re: [PATCH v2 1/1] drm/amdgpu: Fix MMIO HDP flush on SRIOV</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Am 2021-11-10 um 4:14 a.m. schrieb Lazar, Lijo:<br>
><br>
><br>
> On 11/10/2021 8:00 AM, Felix Kuehling wrote:<br>
>> Disable HDP register remapping on SRIOV and set rmmio_remap.reg_offset<br>
>> to the fixed address of the VF register for hdp_v*_flush_hdp.<br>
>><br>
>> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com><br>
>> ---<br>
>>   drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 4 ++++<br>
>>   drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c | 4 ++++<br>
>>   drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c | 4 +++-<br>
>>   drivers/gpu/drm/amd/amdgpu/nbio_v7_2.c | 4 ++++<br>
>>   drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 4 +++-<br>
>>   drivers/gpu/drm/amd/amdgpu/nv.c        | 8 +++++---<br>
>>   drivers/gpu/drm/amd/amdgpu/soc15.c     | 8 +++++---<br>
>>   7 files changed, 28 insertions(+), 8 deletions(-)<br>
>><br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
>> index 4ecd2b5808ce..ee7cab37dfd5 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
>> @@ -359,6 +359,10 @@ static void nbio_v2_3_init_registers(struct<br>
>> amdgpu_device *adev)<br>
>>         if (def != data)<br>
>>           WREG32_PCIE(smnPCIE_CONFIG_CNTL, data);<br>
>> +<br>
>> +    if (amdgpu_sriov_vf(adev))<br>
>> +        adev->rmmio_remap.reg_offset = SOC15_REG_OFFSET(NBIO, 0,<br>
>> +            mmBIF_BX_DEV0_EPF0_VF0_HDP_MEM_COHERENCY_FLUSH_CNTL) << 2;<br>
><br>
> Wouldn't it be better to do this assignment inside<br>
> remap_hdp_registers()? Return with a comment saying no remap is done<br>
> for VFs. That looks easier to manage per IP version.<br>
<br>
I was considering that. I felt it was clearer not to have that hidden<br>
side effect in remap_hdp_registers and to have the explicit condition<br>
(... &&  !amdgpu_sriov_vf(adev)) around the remap_hdp_registers call in<br>
soc15/nv_common_hw_init.<br>
<br>
Regards,<br>
  Felix<br>
<br>
<br>
><br>
> Thanks,<br>
> Lijo<br>
><br>
>>   }<br>
>>     #define NAVI10_PCIE__LC_L0S_INACTIVITY_DEFAULT        0x00000000<br>
>> // off by default, no gains over L1<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c<br>
>> index 0d2d629e2d6a..4bbacf1be25a 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c<br>
>> @@ -276,6 +276,10 @@ static void nbio_v6_1_init_registers(struct<br>
>> amdgpu_device *adev)<br>
>>         if (def != data)<br>
>>           WREG32_PCIE(smnPCIE_CI_CNTL, data);<br>
>> +<br>
>> +    if (amdgpu_sriov_vf(adev))<br>
>> +        adev->rmmio_remap.reg_offset = SOC15_REG_OFFSET(NBIO, 0,<br>
>> +            mmBIF_BX_DEV0_EPF0_VF0_HDP_MEM_COHERENCY_FLUSH_CNTL) << 2;<br>
>>   }<br>
>>     static void nbio_v6_1_program_ltr(struct amdgpu_device *adev)<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c<br>
>> index 3c00666a13e1..37a4039fdfc5 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_0.c<br>
>> @@ -273,7 +273,9 @@ const struct nbio_hdp_flush_reg<br>
>> nbio_v7_0_hdp_flush_reg = {<br>
>>     static void nbio_v7_0_init_registers(struct amdgpu_device *adev)<br>
>>   {<br>
>> -<br>
>> +    if (amdgpu_sriov_vf(adev))<br>
>> +        adev->rmmio_remap.reg_offset =<br>
>> +            SOC15_REG_OFFSET(NBIO, 0,<br>
>> mmHDP_MEM_COHERENCY_FLUSH_CNTL) << 2;<br>
>>   }<br>
>>     const struct amdgpu_nbio_funcs nbio_v7_0_funcs = {<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_2.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nbio_v7_2.c<br>
>> index 8f2a315e7c73..3444332ea110 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_2.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_2.c<br>
>> @@ -371,6 +371,10 @@ static void nbio_v7_2_init_registers(struct<br>
>> amdgpu_device *adev)<br>
>>           if (def != data)<br>
>>               WREG32_PCIE_PORT(SOC15_REG_OFFSET(NBIO, 0,<br>
>> regPCIE_CONFIG_CNTL), data);<br>
>>       }<br>
>> +<br>
>> +    if (amdgpu_sriov_vf(adev))<br>
>> +        adev->rmmio_remap.reg_offset = SOC15_REG_OFFSET(NBIO, 0,<br>
>> +            regBIF_BX_PF0_HDP_MEM_COHERENCY_FLUSH_CNTL) << 2;<br>
>>   }<br>
>>     const struct amdgpu_nbio_funcs nbio_v7_2_funcs = {<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c<br>
>> index b8bd03d16dba..e96516d3fd45 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c<br>
>> @@ -362,7 +362,9 @@ const struct nbio_hdp_flush_reg<br>
>> nbio_v7_4_hdp_flush_reg_ald = {<br>
>>     static void nbio_v7_4_init_registers(struct amdgpu_device *adev)<br>
>>   {<br>
>> -<br>
>> +    if (amdgpu_sriov_vf(adev))<br>
>> +        adev->rmmio_remap.reg_offset = SOC15_REG_OFFSET(NBIO, 0,<br>
>> +            mmBIF_BX_DEV0_EPF0_VF0_HDP_MEM_COHERENCY_FLUSH_CNTL) << 2;<br>
>>   }<br>
>>     static void<br>
>> nbio_v7_4_handle_ras_controller_intr_no_bifring(struct amdgpu_device<br>
>> *adev)<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/nv.c<br>
>> index febc903adf58..7088528079c6 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/nv.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/nv.c<br>
>> @@ -730,8 +730,10 @@ static int nv_common_early_init(void *handle)<br>
>>   #define MMIO_REG_HOLE_OFFSET (0x80000 - PAGE_SIZE)<br>
>>       struct amdgpu_device *adev = (struct amdgpu_device *)handle;<br>
>>   -    adev->rmmio_remap.reg_offset = MMIO_REG_HOLE_OFFSET;<br>
>> -    adev->rmmio_remap.bus_addr = adev->rmmio_base +<br>
>> MMIO_REG_HOLE_OFFSET;<br>
>> +    if (!amdgpu_sriov_vf(adev)) {<br>
>> +        adev->rmmio_remap.reg_offset = MMIO_REG_HOLE_OFFSET;<br>
>> +        adev->rmmio_remap.bus_addr = adev->rmmio_base +<br>
>> MMIO_REG_HOLE_OFFSET;<br>
>> +    }<br>
>>       adev->smc_rreg = NULL;<br>
>>       adev->smc_wreg = NULL;<br>
>>       adev->pcie_rreg = &nv_pcie_rreg;<br>
>> @@ -1031,7 +1033,7 @@ static int nv_common_hw_init(void *handle)<br>
>>        * for the purpose of expose those registers<br>
>>        * to process space<br>
>>        */<br>
>> -    if (adev->nbio.funcs->remap_hdp_registers)<br>
>> +    if (adev->nbio.funcs->remap_hdp_registers &&<br>
>> !amdgpu_sriov_vf(adev))<br>
>>           adev->nbio.funcs->remap_hdp_registers(adev);<br>
>>       /* enable the doorbell aperture */<br>
>>       nv_enable_doorbell_aperture(adev, true);<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c<br>
>> b/drivers/gpu/drm/amd/amdgpu/soc15.c<br>
>> index 0c316a2d42ed..de9b55383e9f 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/soc15.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c<br>
>> @@ -971,8 +971,10 @@ static int soc15_common_early_init(void *handle)<br>
>>   #define MMIO_REG_HOLE_OFFSET (0x80000 - PAGE_SIZE)<br>
>>       struct amdgpu_device *adev = (struct amdgpu_device *)handle;<br>
>>   -    adev->rmmio_remap.reg_offset = MMIO_REG_HOLE_OFFSET;<br>
>> -    adev->rmmio_remap.bus_addr = adev->rmmio_base +<br>
>> MMIO_REG_HOLE_OFFSET;<br>
>> +    if (!amdgpu_sriov_vf(adev)) {<br>
>> +        adev->rmmio_remap.reg_offset = MMIO_REG_HOLE_OFFSET;<br>
>> +        adev->rmmio_remap.bus_addr = adev->rmmio_base +<br>
>> MMIO_REG_HOLE_OFFSET;<br>
>> +    }<br>
>>       adev->smc_rreg = NULL;<br>
>>       adev->smc_wreg = NULL;<br>
>>       adev->pcie_rreg = &soc15_pcie_rreg;<br>
>> @@ -1285,7 +1287,7 @@ static int soc15_common_hw_init(void *handle)<br>
>>        * for the purpose of expose those registers<br>
>>        * to process space<br>
>>        */<br>
>> -    if (adev->nbio.funcs->remap_hdp_registers)<br>
>> +    if (adev->nbio.funcs->remap_hdp_registers &&<br>
>> !amdgpu_sriov_vf(adev))<br>
>>           adev->nbio.funcs->remap_hdp_registers(adev);<br>
>>         /* enable the doorbell aperture */<br>
>><br>
</div>
</span></font></div>
</div>
</body>
</html>