<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Aptos;}
@font-face
{font-family:"\@DengXian";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#467886;
text-decoration:underline;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:"Arial",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<p style="font-family:Calibri;font-size:10pt;color:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - AMD Internal Distribution Only]<br>
</p>
<br>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Arial",sans-serif">+ <a id="OWAAMFF067A176F3C4977A82DFE15FE26587B" href="mailto:Owen.Zhang2@amd.com">
<span style="font-family:"Arial",sans-serif;text-decoration:none">@Zhang, Owen(SRDC)</span></a> (PM) for awareness
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">Monk Liu | Cloud GPU</span><span style="font-size:12.0pt;color:black">
</span><span style="font-size:12.0pt;color:black">&</span><span style="font-size:12.0pt;color:black">
</span><span style="font-size:12.0pt;color:black">Virtualization | </span><span style="font-size:12.0pt;color:#C82613">AMD</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:#C82613"><img border="0" width="80" height="80" style="width:.8333in;height:.8333in" id="Picture_x0020_1" src="cid:image001.png@01DBB45D.8D2D5C40"></span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org>
<b>On Behalf Of </b>Zhang, GuoQing (Sam)<br>
<b>Sent:</b> Tuesday, April 22, 2025 6:39 PM<br>
<b>To:</b> Christian König <ckoenig.leichtzumerken@gmail.com>; amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Zhao, Victor <Victor.Zhao@amd.com>; Chang, HaiJun <HaiJun.Chang@amd.com>; Deng, Emily <Emily.Deng@amd.com><br>
<b>Subject:</b> Re: [PATCH 4/6] drm/amdgpu: enable pdb0 for hibernation on SRIOV<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p style="margin:5.0pt"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif;color:blue">[AMD Official Use Only - AMD Internal Distribution Only]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<div>
<p style="margin:5.0pt"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif;color:blue">[AMD Official Use Only - AMD Internal Distribution Only]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Ping…<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Sam<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">Zhang, GuoQing (Sam) <<a href="mailto:GuoQing.Zhang@amd.com">GuoQing.Zhang@amd.com</a>><br>
<b>Date: </b>Friday, April 18, 2025 at 14:26<br>
<b>To: </b>Christian König <<a href="mailto:ckoenig.leichtzumerken@gmail.com">ckoenig.leichtzumerken@gmail.com</a>>,
<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a> <<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>><br>
<b>Cc: </b>Zhao, Victor <<a href="mailto:Victor.Zhao@amd.com">Victor.Zhao@amd.com</a>>, Chang, HaiJun <<a href="mailto:HaiJun.Chang@amd.com">HaiJun.Chang@amd.com</a>>, Deng, Emily <<a href="mailto:Emily.Deng@amd.com">Emily.Deng@amd.com</a>><br>
<b>Subject: </b>Re: [PATCH 4/6] drm/amdgpu: enable pdb0 for hibernation on SRIOV<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Thank you for the review and the feedback.
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> index d90e9daf5a50..83a3444c69d9 100644</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> @@ -287,8 +287,14 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> goto error_unpin;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> - if (gpu_addr)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + if (gpu_addr) {</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> *gpu_addr = amdgpu_bo_gpu_offset(*bo_ptr);</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + if (!adev->gmc.xgmi.connected_to_cpu && adev->gmc.enable_pdb0) {</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + if ((*bo_ptr)->tbo.resource->mem_type == TTM_PL_VRAM) {</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + *gpu_addr -= amdgpu_ttm_domain_start(adev, TTM_PL_VRAM);</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>> + }</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">>Please NAK to that approach here. The GPU offset should still point into the mapped VRAM.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">This change is to change to the default GPU address from FB aperture type to pdb0 type in this centralized place so that I don’t need to change every callsite of amdgpu_bo_create_reserved().</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Could you suggest a better approach if this approach is not acceptable?
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif">Sam</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">Christian König <<a href="mailto:ckoenig.leichtzumerken@gmail.com">ckoenig.leichtzumerken@gmail.com</a>><br>
<b>Date: </b>Wednesday, April 16, 2025 at 21:52<br>
<b>To: </b>Zhang, GuoQing (Sam) <<a href="mailto:GuoQing.Zhang@amd.com">GuoQing.Zhang@amd.com</a>>,
<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a> <<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>><br>
<b>Cc: </b>Zhao, Victor <<a href="mailto:Victor.Zhao@amd.com">Victor.Zhao@amd.com</a>>, Chang, HaiJun <<a href="mailto:HaiJun.Chang@amd.com">HaiJun.Chang@amd.com</a>>, Deng, Emily <<a href="mailto:Emily.Deng@amd.com">Emily.Deng@amd.com</a>><br>
<b>Subject: </b>Re: [PATCH 4/6] drm/amdgpu: enable pdb0 for hibernation on SRIOV</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Am 14.04.25 um 12:46 schrieb Samuel Zhang:<br>
> When switching to new GPU index after hibernation and then resume,<br>
> VRAM offset of each VRAM BO will be changed, and the cached gpu<br>
> addresses needed to updated.<br>
><br>
> This is to enable pdb0 and switch to use pdb0-based virtual gpu<br>
> address by default in amdgpu_bo_create_reserved(). since the virtual<br>
> addresses do not change, this can avoid the need to update all<br>
> cached gpu addresses all over the codebase.<br>
><br>
> Signed-off-by: Emily Deng <<a href="mailto:Emily.Deng@amd.com">Emily.Deng@amd.com</a>><br>
> Signed-off-by: Samuel Zhang <<a href="mailto:guoqing.zhang@amd.com">guoqing.zhang@amd.com</a>><br>
> Change-Id: I2b20b9b94f1e41820a013ce5d05bb3fa96859b21<br>
> ---<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 43 +++++++++++++++-------<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 1 +<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 8 +++-<br>
> drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c | 2 +-<br>
> drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 29 +++++++++------<br>
> drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c | 30 ++++++++++++---<br>
> 6 files changed, 82 insertions(+), 31 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c<br>
> index 5b60d714e089..e706afcb7e95 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c<br>
> @@ -248,18 +248,25 @@ void amdgpu_gmc_vram_location(struct amdgpu_device *adev, struct amdgpu_gmc *mc,<br>
> void amdgpu_gmc_sysvm_location(struct amdgpu_device *adev, struct amdgpu_gmc *mc)<br>
> {<br>
> u64 hive_vram_start = 0;<br>
> - u64 hive_vram_end = mc->xgmi.node_segment_size * mc->xgmi.num_physical_nodes - 1;<br>
> - mc->vram_start = mc->xgmi.node_segment_size * mc->xgmi.physical_node_id;<br>
> - mc->vram_end = mc->vram_start + mc->xgmi.node_segment_size - 1;<br>
> + u64 hive_vram_end = mc->xgmi.node_segment_size * mc->xgmi.num_physical_nodes;<br>
> +<br>
> + hive_vram_end = ALIGN(hive_vram_end, (1ULL<<adev->gmc.vmid0_page_table_block_size)<<21) - 1;<br>
> +<br>
> + if (!mc->vram_start) {<br>
> + mc->vram_start = mc->xgmi.node_segment_size * mc->xgmi.physical_node_id;<br>
> + mc->vram_end = mc->vram_start + mc->xgmi.node_segment_size - 1;<br>
> + dev_info(adev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n",<br>
> + mc->mc_vram_size >> 20, mc->vram_start,<br>
> + mc->vram_end, mc->real_vram_size >> 20);<br>
> + }<br>
> +<br>
> mc->gart_start = hive_vram_end + 1;<br>
> mc->gart_end = mc->gart_start + mc->gart_size - 1;<br>
> mc->fb_start = hive_vram_start;<br>
> mc->fb_end = hive_vram_end;<br>
> - dev_info(adev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n",<br>
> - mc->mc_vram_size >> 20, mc->vram_start,<br>
> - mc->vram_end, mc->real_vram_size >> 20);<br>
> - dev_info(adev->dev, "GART: %lluM 0x%016llX - 0x%016llX\n",<br>
> - mc->gart_size >> 20, mc->gart_start, mc->gart_end);<br>
> +<br>
> + dev_info(adev->dev, "FB 0x%016llX - 0x%016llX, GART: %lluM 0x%016llX - 0x%016llX\n",<br>
> + mc->fb_start, mc->fb_end, mc->gart_size >> 20, mc->gart_start, mc->gart_end);<br>
> }<br>
> <br>
> /**<br>
> @@ -677,8 +684,9 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid,<br>
> &job);<br>
> if (r)<br>
> goto error_alloc;<br>
> -<br>
> - job->vm_pd_addr = amdgpu_gmc_pd_addr(adev->gart.bo);<br>
> + job->vm_pd_addr = amdgpu_gmc_pd_addr(adev->gmc.pdb0_bo ?<br>
> + adev->gmc.pdb0_bo :<br>
> + adev->gart.bo);<br>
> job->vm_needs_flush = true;<br>
> job->ibs->ptr[job->ibs->length_dw++] = ring->funcs->nop;<br>
> amdgpu_ring_pad_ib(ring, &job->ibs[0]);<br>
> @@ -1041,8 +1049,9 @@ void amdgpu_gmc_init_pdb0(struct amdgpu_device *adev)<br>
> */<br>
> u64 vram_size = adev->gmc.xgmi.node_segment_size * adev->gmc.xgmi.num_physical_nodes;<br>
> u64 pde0_page_size = (1ULL<<adev->gmc.vmid0_page_table_block_size)<<21;<br>
> - u64 vram_addr = adev->vm_manager.vram_base_offset -<br>
> + u64 vram_addr_first = adev->vm_manager.vram_base_offset -<br>
> adev->gmc.xgmi.physical_node_id * adev->gmc.xgmi.node_segment_size;<br>
> + u64 vram_addr = adev->vm_manager.vram_base_offset;<br>
> u64 vram_end = vram_addr + vram_size;<br>
> u64 gart_ptb_gpu_pa = amdgpu_gmc_vram_pa(adev, adev->gart.bo);<br>
> int idx;<br>
> @@ -1056,11 +1065,19 @@ void amdgpu_gmc_init_pdb0(struct amdgpu_device *adev)<br>
> flags |= AMDGPU_PTE_FRAG((adev->gmc.vmid0_page_table_block_size + 9*1));<br>
> flags |= AMDGPU_PDE_PTE_FLAG(adev);<br>
> <br>
> + if (adev->gmc.xgmi.connected_to_cpu) {<br>
> + vram_addr = vram_addr_first;<br>
> + vram_end = vram_addr + vram_size;<br>
> + }<br>
> +<br>
> /* The first n PDE0 entries are used as PTE,<br>
> * pointing to vram<br>
> */<br>
> - for (i = 0; vram_addr < vram_end; i++, vram_addr += pde0_page_size)<br>
> - amdgpu_gmc_set_pte_pde(adev, adev->gmc.ptr_pdb0, i, vram_addr, flags);<br>
> + for (i = 0; vram_addr < vram_end; i++, vram_addr += pde0_page_size) {<br>
> + amdgpu_gmc_set_pte_pde(adev, adev->gmc.ptr_pdb0, i,<br>
> + (vram_addr >= vram_addr_first + vram_size) ? (vram_addr - vram_size) : vram_addr,<br>
> + flags);<br>
> + }<br>
> <br>
> /* The n+1'th PDE0 entry points to a huge<br>
> * PTB who has more than 512 entries each<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h<br>
> index bd7fc123b8f9..758b47240c6f 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h<br>
> @@ -307,6 +307,7 @@ struct amdgpu_gmc {<br>
> struct amdgpu_bo *pdb0_bo;<br>
> /* CPU kmapped address of pdb0*/<br>
> void *ptr_pdb0;<br>
> + bool enable_pdb0;<br>
> <br>
> /* MALL size */<br>
> u64 mall_size;<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c<br>
> index d90e9daf5a50..83a3444c69d9 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c<br>
> @@ -287,8 +287,14 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,<br>
> goto error_unpin;<br>
> }<br>
> <br>
> - if (gpu_addr)<br>
> + if (gpu_addr) {<br>
> *gpu_addr = amdgpu_bo_gpu_offset(*bo_ptr);<br>
> + if (!adev->gmc.xgmi.connected_to_cpu && adev->gmc.enable_pdb0) {<br>
> + if ((*bo_ptr)->tbo.resource->mem_type == TTM_PL_VRAM) {<br>
> + *gpu_addr -= amdgpu_ttm_domain_start(adev, TTM_PL_VRAM);<br>
> + }<br>
> + }<br>
> + }<br>
<br>
Please NAK to that approach here. The GPU offset should still point into the mapped VRAM.<br>
<br>
> <br>
> if (cpu_addr) {<br>
> r = amdgpu_bo_kmap(*bo_ptr, cpu_addr);<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c<br>
> index cb25f7f0dfc1..5ebb92ac9fd7 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c<br>
> @@ -180,7 +180,7 @@ gfxhub_v1_2_xcc_init_system_aperture_regs(struct amdgpu_device *adev,<br>
> /* In the case squeezing vram into GART aperture, we don't use<br>
> * FB aperture and AGP aperture. Disable them.<br>
> */<br>
> - if (adev->gmc.pdb0_bo) {<br>
> + if (adev->gmc.pdb0_bo && !amdgpu_sriov_vf(adev)) {<br>
> WREG32_SOC15(GC, GET_INST(GC, i), regMC_VM_FB_LOCATION_TOP, 0);<br>
> WREG32_SOC15(GC, GET_INST(GC, i), regMC_VM_FB_LOCATION_BASE, 0x00FFFFFF);<br>
> WREG32_SOC15(GC, GET_INST(GC, i), regMC_VM_AGP_TOP, 0);<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c<br>
> index 7c7a9fe6be6d..73ac05b9a1bf 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c<br>
> @@ -1677,6 +1677,10 @@ static int gmc_v9_0_early_init(struct amdgpu_ip_block *ip_block)<br>
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;<br>
> adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;<br>
> <br>
> + if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||<br>
> + amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||<br>
> + amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0))<br>
> + adev->gmc.enable_pdb0 = amdgpu_sriov_vf(adev);<br>
> return 0;<br>
> }<br>
> <br>
> @@ -1719,6 +1723,14 @@ static void gmc_v9_0_vram_gtt_location(struct amdgpu_device *adev,<br>
> {<br>
> u64 base = adev->mmhub.funcs->get_fb_location(adev);<br>
> <br>
> + if (adev->gmc.xgmi.connected_to_cpu || adev->gmc.enable_pdb0) {<br>
> + adev->gmc.vmid0_page_table_depth = 1;<br>
> + adev->gmc.vmid0_page_table_block_size = 12;<br>
> + } else {<br>
> + adev->gmc.vmid0_page_table_depth = 0;<br>
> + adev->gmc.vmid0_page_table_block_size = 0;<br>
> + }<br>
> +<br>
<br>
What is the justification to moving that stuff around?<br>
<br>
> amdgpu_gmc_set_agp_default(adev, mc);<br>
> <br>
> /* add the xgmi offset of the physical node */<br>
> @@ -1727,7 +1739,10 @@ static void gmc_v9_0_vram_gtt_location(struct amdgpu_device *adev,<br>
> amdgpu_gmc_sysvm_location(adev, mc);<br>
> } else {<br>
> amdgpu_gmc_vram_location(adev, mc, base);<br>
> - amdgpu_gmc_gart_location(adev, mc, AMDGPU_GART_PLACEMENT_BEST_FIT);<br>
> + if (!adev->gmc.enable_pdb0)<br>
> + amdgpu_gmc_gart_location(adev, mc, AMDGPU_GART_PLACEMENT_BEST_FIT);<br>
> + else<br>
> + amdgpu_gmc_sysvm_location(adev, mc);<br>
> if (!amdgpu_sriov_vf(adev) && (amdgpu_agp == 1))<br>
> amdgpu_gmc_agp_location(adev, mc);<br>
> }<br>
> @@ -1838,14 +1853,6 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)<br>
> return 0;<br>
> }<br>
> <br>
> - if (adev->gmc.xgmi.connected_to_cpu) {<br>
> - adev->gmc.vmid0_page_table_depth = 1;<br>
> - adev->gmc.vmid0_page_table_block_size = 12;<br>
> - } else {<br>
> - adev->gmc.vmid0_page_table_depth = 0;<br>
> - adev->gmc.vmid0_page_table_block_size = 0;<br>
> - }<br>
> -<br>
> /* Initialize common gart structure */<br>
> r = amdgpu_gart_init(adev);<br>
> if (r)<br>
> @@ -1864,7 +1871,7 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)<br>
> if (r)<br>
> return r;<br>
> <br>
> - if (adev->gmc.xgmi.connected_to_cpu)<br>
> + if (adev->gmc.xgmi.connected_to_cpu || adev->gmc.enable_pdb0)<br>
<br>
Drop the connected_to_cpu check here.<br>
<br>
> r = amdgpu_gmc_pdb0_alloc(adev);<br>
> }<br>
> <br>
> @@ -2361,7 +2368,7 @@ static int gmc_v9_0_gart_enable(struct amdgpu_device *adev)<br>
> {<br>
> int r;<br>
> <br>
> - if (adev->gmc.xgmi.connected_to_cpu)<br>
> + if (adev->gmc.xgmi.connected_to_cpu || adev->gmc.enable_pdb0)<br>
<br>
And here.<br>
<br>
> amdgpu_gmc_init_pdb0(adev);<br>
> <br>
> if (adev->gart.bo == NULL) {<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c<br>
> index fe0710b55c3a..13b229d07ac4 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c<br>
> @@ -74,27 +74,47 @@ static void mmhub_v9_4_setup_hubid_vm_pt_regs(struct amdgpu_device *adev, int hu<br>
> static void mmhub_v9_4_init_gart_aperture_regs(struct amdgpu_device *adev,<br>
> int hubid)<br>
> {<br>
> - uint64_t pt_base = amdgpu_gmc_pd_addr(adev->gart.bo);<br>
> + uint64_t pt_base = amdgpu_gmc_pd_addr(adev->gmc.pdb0_bo ? adev->gmc.pdb0_bo : adev->gart.bo);<br>
<br>
That can be written as adev->gmc.pdb0_bo ?: adev->gart.bo<br>
<br>
> <br>
> mmhub_v9_4_setup_hubid_vm_pt_regs(adev, hubid, 0, pt_base);<br>
> <br>
> - WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + if (adev->gmc.pdb0_bo) {<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,<br>
> + hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> + (u32)(adev->gmc.fb_start >> 12));<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32,<br>
> + hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> + (u32)(adev->gmc.fb_start >> 44));<br>
> +<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32,<br>
> + hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> + (u32)(adev->gmc.gart_end >> 12));<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32,<br>
> + hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> + (u32)(adev->gmc.gart_end >> 44));<br>
> + } else {<br>
> ++ WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,<br>
> hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> (u32)(adev->gmc.gart_start >> 12));<br>
> - WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32,<br>
> hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> (u32)(adev->gmc.gart_start >> 44));<br>
<br>
When you indent the WREG32_SOC15_OFFSET() you need to indent the following lines as well.<br>
<br>
> <br>
> - WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32,<br>
> hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> (u32)(adev->gmc.gart_end >> 12));<br>
> - WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> + WREG32_SOC15_OFFSET(MMHUB, 0,<br>
> mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32,<br>
> hubid * MMHUB_INSTANCE_REGISTER_OFFSET,<br>
> (u32)(adev->gmc.gart_end >> 44));<br>
> + }<br>
<br>
The programming of the end addr is still the same, you don't need to change anything here.<br>
<br>
Regards,<br>
Christian.<br>
<br>
> }<br>
> <br>
> static void mmhub_v9_4_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmid,<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>