<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<p style="font-family:Arial;font-size:10pt;color:#0000FF;margin:5pt;" align="Left">
[AMD Official Use Only - General]<br>
</p>
<br>
<div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
I am not sure if ASPM settings can be generalized by PCIE core. Performance vs Power savings when ASPM is enabled will require some additional tuning and that will be device specific.</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
<br>
</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
In some of the other ASICs, this programming is done in VBIOS/SBIOS firmware. Having it in driver provides the advantage of additional tuning without forcing a VBIOS upgrade.</div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
<span style="font-size: 12pt;"><br>
</span></div>
<div style="color: rgb(33, 33, 33); background-color: rgb(255, 255, 255);" dir="auto">
<span style="font-size: 12pt;">Thanks,</span></div>
<div id="ms-outlook-mobile-signature" dir="auto">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> Alex Deucher <alexdeucher@gmail.com><br>
<b>Sent:</b> Thursday, September 8, 2022 9:55:41 PM<br>
<b>To:</b> Bjorn Helgaas <helgaas@kernel.org><br>
<b>Cc:</b> Lazar, Lijo <Lijo.Lazar@amd.com>; stable@vger.kernel.org <stable@vger.kernel.org>; wielkiegie@gmail.com <wielkiegie@gmail.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; Deucher, Alexander <Alexander.Deucher@amd.com>; Quan, Evan
 <Evan.Quan@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com><br>
<b>Subject:</b> Re: [PATCH] drm/amdgpu: Don't enable LTR if not supported</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">On Thu, Sep 8, 2022 at 12:12 PM Bjorn Helgaas <helgaas@kernel.org> wrote:<br>
><br>
> [+cc Evan, author of 62f8f5c3bfc2 ("drm/amdgpu: enable ASPM support<br>
> for PCIE 7.4.0/7.6.0")]<br>
><br>
> On Thu, Sep 08, 2022 at 08:53:44AM +0530, Lijo Lazar wrote:<br>
> > As per PCIE Base Spec r4.0 Section 6.18<br>
> > 'Software must not enable LTR in an Endpoint unless the Root Complex<br>
> > and all intermediate Switches indicate support for LTR.'<br>
> ><br>
> > This fixes the Unsupported Request error reported through AER during<br>
> > ASPM enablement.<br>
> ><br>
> > Link: <a href="https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.kernel.org%2Fshow_bug.cgi%3Fid%3D216455&amp;data=05%7C01%7Clijo.lazar%40amd.com%7C1b7a9338c69d494ff04508da91b6cd07%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637982511562535915%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=Vmk44BHDQGoZTq%2FGez8Kh7rrp%2Boz%2BQYEHGRaHMSyUOU%3D&amp;reserved=0">
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.kernel.org%2Fshow_bug.cgi%3Fid%3D216455&amp;data=05%7C01%7Clijo.lazar%40amd.com%7C1b7a9338c69d494ff04508da91b6cd07%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637982511562535915%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=Vmk44BHDQGoZTq%2FGez8Kh7rrp%2Boz%2BQYEHGRaHMSyUOU%3D&amp;reserved=0</a><br>
> ><br>
> > The error was unnoticed before and got visible because of the commit<br>
> > referenced below. This doesn't fix anything in the commit below, rather<br>
> > fixes the issue in amdgpu exposed by the commit. The reference is only<br>
> > to associate this commit with below one so that both go together.<br>
> ><br>
> > Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")<br>
> ><br>
> > Reported-by: Gustaw Smolarczyk <wielkiegie@gmail.com><br>
> > Signed-off-by: Lijo Lazar <lijo.lazar@amd.com><br>
> > Cc: stable@vger.kernel.org<br>
> > ---<br>
> >  drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 9 ++++++++-<br>
> >  drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c | 9 ++++++++-<br>
> >  drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 9 ++++++++-<br>
><br>
> nbio_v4_3_program_ltr() checks pdev->ltr_path itself instead of doing<br>
> it in *_program_aspm().  It'd be nice to use the same approach for all<br>
> versions.<br>
><br>
> I really don't like the fact that amdgpu does all this ASPM fiddling<br>
> in the driver in the first place.  ASPM should be configured by the<br>
> PCI core, not by each individual driver.  ASPM has all sorts of<br>
> requirements that relate to upstream devices, which I think amdgpu<br>
> ignores, but the core pays attention to.<br>
><br>
> Do you know why the driver configures ASPM itself?  If the PCI core is<br>
> doing something wrong (and I'm sure it is, ASPM support is kind of a<br>
> mess), I'd much prefer to fix up the core where *all* drivers can<br>
> benefit from it.<br>
<br>
This is the programming sequence we get from our hardware team and it<br>
is used on both windows and Linux.  As far as I understand it windows<br>
doesn't handle this in the core, it's up to the individual drivers to<br>
enable it.  I'm not familiar with how this should be enabled<br>
generically, but at least for our hardware, it seems to have some<br>
variation compared to what is done in the PCI core due to stability,<br>
etc. It seems to me that this may need asic specific implementations<br>
for a lot of hardware depending on the required programming sequences.<br>
E.g., various asics may need hardware workaround for bugs or platform<br>
issues, etc.  I can ask for more details from our hardware team.<br>
<br>
Alex<br>
<br>
><br>
> > diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
> > index b465baa26762..aa761ff3a5fa 100644<br>
> > --- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
> > +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c<br>
> > @@ -380,6 +380,7 @@ static void nbio_v2_3_enable_aspm(struct amdgpu_device *adev,<br>
> >               WREG32_PCIE(smnPCIE_LC_CNTL, data);<br>
> >  }<br>
> ><br>
> > +#ifdef CONFIG_PCIEASPM<br>
> >  static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)<br>
> >  {<br>
> >       uint32_t def, data;<br>
> > @@ -401,9 +402,11 @@ static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)<br>
> >       if (def != data)<br>
> >               WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);<br>
> >  }<br>
> > +#endif<br>
> ><br>
> >  static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)<br>
> >  {<br>
> > +#ifdef CONFIG_PCIEASPM<br>
> >       uint32_t def, data;<br>
> ><br>
> >       def = data = RREG32_PCIE(smnPCIE_LC_CNTL);<br>
> > @@ -459,7 +462,10 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)<br>
> >       if (def != data)<br>
> >               WREG32_PCIE(smnPCIE_LC_CNTL6, data);<br>
> ><br>
> > -     nbio_v2_3_program_ltr(adev);<br>
> > +     /* Don't bother about LTR if LTR is not enabled<br>
> > +      * in the path */<br>
> > +     if (adev->pdev->ltr_path)<br>
> > +             nbio_v2_3_program_ltr(adev);<br>
> ><br>
> >       def = data = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP3);<br>
> >       data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;<br>
> > @@ -483,6 +489,7 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)<br>
> >       data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;<br>
> >       if (def != data)<br>
> >               WREG32_PCIE(smnPCIE_LC_CNTL3, data);<br>
> > +#endif<br>
> >  }<br>
</div>
</span></font></div>
</div>
</body>
</html>