[1/3] pci: force disable ASPM before changing the link speed

Submitted by Karol Herbst on Sept. 12, 2019, 7 p.m.

Details

Message ID 20190912190028.27977-2-kherbst@redhat.com
State New
Headers show
Series "PCIe link change improvements" ( rev: 1 ) in Nouveau

Not browsing as part of any series.

Commit Message

Karol Herbst Sept. 12, 2019, 7 p.m.
taken from nvgpu

Signed-off-by: Karol Herbst <kherbst@redhat.com>
---
 drm/nouveau/nvkm/subdev/pci/g84.c   |  9 +++++++++
 drm/nouveau/nvkm/subdev/pci/g92.c   |  1 +
 drm/nouveau/nvkm/subdev/pci/g94.c   |  1 +
 drm/nouveau/nvkm/subdev/pci/gf100.c |  1 +
 drm/nouveau/nvkm/subdev/pci/gf106.c |  1 +
 drm/nouveau/nvkm/subdev/pci/gk104.c |  1 +
 drm/nouveau/nvkm/subdev/pci/pcie.c  | 14 ++++++++++++++
 drm/nouveau/nvkm/subdev/pci/priv.h  |  2 ++
 8 files changed, 30 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drm/nouveau/nvkm/subdev/pci/g84.c b/drm/nouveau/nvkm/subdev/pci/g84.c
index 62438d892..353d70d7e 100644
--- a/drm/nouveau/nvkm/subdev/pci/g84.c
+++ b/drm/nouveau/nvkm/subdev/pci/g84.c
@@ -122,6 +122,14 @@  g84_pci_init(struct nvkm_pci *pci)
 		nvkm_pci_mask(pci, 0x041c, 0x00000060, 0x00000000);
 }
 
+void
+g84_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
+{
+	/* L0s and L1 */
+	u32 value = status ? 0x180 : 0x0;
+	nvkm_pci_mask(pci, 0x150, 0x180, value);
+}
+
 int
 g84_pcie_init(struct nvkm_pci *pci)
 {
@@ -147,6 +155,7 @@  g84_pci_func = {
 	.pcie.set_version = g84_pcie_set_version,
 	.pcie.version = g84_pcie_version,
 	.pcie.version_supported = g84_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/g92.c b/drm/nouveau/nvkm/subdev/pci/g92.c
index 48874359d..8c35cc89e 100644
--- a/drm/nouveau/nvkm/subdev/pci/g92.c
+++ b/drm/nouveau/nvkm/subdev/pci/g92.c
@@ -48,6 +48,7 @@  g92_pci_func = {
 	.pcie.set_version = g84_pcie_set_version,
 	.pcie.version = g84_pcie_version,
 	.pcie.version_supported = g92_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/g94.c b/drm/nouveau/nvkm/subdev/pci/g94.c
index 09adb37a5..aa152d798 100644
--- a/drm/nouveau/nvkm/subdev/pci/g94.c
+++ b/drm/nouveau/nvkm/subdev/pci/g94.c
@@ -40,6 +40,7 @@  g94_pci_func = {
 	.pcie.set_version = g84_pcie_set_version,
 	.pcie.version = g84_pcie_version,
 	.pcie.version_supported = g92_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/gf100.c b/drm/nouveau/nvkm/subdev/pci/gf100.c
index 00a5e7d3e..8676480c3 100644
--- a/drm/nouveau/nvkm/subdev/pci/gf100.c
+++ b/drm/nouveau/nvkm/subdev/pci/gf100.c
@@ -93,6 +93,7 @@  gf100_pci_func = {
 	.pcie.set_version = gf100_pcie_set_version,
 	.pcie.version = gf100_pcie_version,
 	.pcie.version_supported = g92_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/gf106.c b/drm/nouveau/nvkm/subdev/pci/gf106.c
index 11bf419af..8079ebdd4 100644
--- a/drm/nouveau/nvkm/subdev/pci/gf106.c
+++ b/drm/nouveau/nvkm/subdev/pci/gf106.c
@@ -40,6 +40,7 @@  gf106_pci_func = {
 	.pcie.set_version = gf100_pcie_set_version,
 	.pcie.version = gf100_pcie_version,
 	.pcie.version_supported = g92_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/gk104.c b/drm/nouveau/nvkm/subdev/pci/gk104.c
index e68030507..b73922c52 100644
--- a/drm/nouveau/nvkm/subdev/pci/gk104.c
+++ b/drm/nouveau/nvkm/subdev/pci/gk104.c
@@ -219,6 +219,7 @@  gk104_pci_func = {
 	.pcie.set_version = gf100_pcie_set_version,
 	.pcie.version = gf100_pcie_version,
 	.pcie.version_supported = gk104_pcie_version_supported,
+	.pcie.force_aspm_off = g84_pcie_force_aspm_off,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pci/pcie.c b/drm/nouveau/nvkm/subdev/pci/pcie.c
index d71e5db50..354ac4c85 100644
--- a/drm/nouveau/nvkm/subdev/pci/pcie.c
+++ b/drm/nouveau/nvkm/subdev/pci/pcie.c
@@ -111,6 +111,14 @@  nvkm_pcie_init(struct nvkm_pci *pci)
 	return 0;
 }
 
+void
+nvkm_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
+{
+	if (!pci->func->pcie.force_aspm_off)
+		return;
+	pci->func->pcie.force_aspm_off(pci, status);
+}
+
 int
 nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
 {
@@ -157,9 +165,15 @@  nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
 	nvkm_debug(subdev, "set link to %s x%i\n",
 		   nvkm_pcie_speeds[speed], width);
 
+	/* force disable ASPM */
+	nvkm_pcie_force_aspm_off(pci, true);
+
 	ret = pci->func->pcie.set_link(pci, speed, width);
 	if (ret < 0)
 		nvkm_error(subdev, "setting link failed: %i\n", ret);
 
+	/* lift force disable ASPM */
+	nvkm_pcie_force_aspm_off(pci, false);
+
 	return ret;
 }
diff --git a/drm/nouveau/nvkm/subdev/pci/priv.h b/drm/nouveau/nvkm/subdev/pci/priv.h
index 7009aad86..c6a9ef330 100644
--- a/drm/nouveau/nvkm/subdev/pci/priv.h
+++ b/drm/nouveau/nvkm/subdev/pci/priv.h
@@ -24,6 +24,7 @@  struct nvkm_pci_func {
 		void (*set_version)(struct nvkm_pci *, u8);
 		int (*version)(struct nvkm_pci *);
 		int (*version_supported)(struct nvkm_pci *);
+		void (*force_aspm_off)(struct nvkm_pci *, bool);
 	} pcie;
 };
 
@@ -42,6 +43,7 @@  int g84_pcie_version(struct nvkm_pci *);
 void g84_pcie_set_link_speed(struct nvkm_pci *, enum nvkm_pcie_speed);
 enum nvkm_pcie_speed g84_pcie_cur_speed(struct nvkm_pci *);
 enum nvkm_pcie_speed g84_pcie_max_speed(struct nvkm_pci *);
+void g84_pcie_force_aspm_off(struct nvkm_pci *, bool status);
 int g84_pcie_init(struct nvkm_pci *);
 int g84_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8);
 

Comments

On Fri, 13 Sep 2019 at 05:00, Karol Herbst <kherbst@redhat.com> wrote:
>
> taken from nvgpu
>
> Signed-off-by: Karol Herbst <kherbst@redhat.com>
> ---
>  drm/nouveau/nvkm/subdev/pci/g84.c   |  9 +++++++++
>  drm/nouveau/nvkm/subdev/pci/g92.c   |  1 +
>  drm/nouveau/nvkm/subdev/pci/g94.c   |  1 +
>  drm/nouveau/nvkm/subdev/pci/gf100.c |  1 +
>  drm/nouveau/nvkm/subdev/pci/gf106.c |  1 +
>  drm/nouveau/nvkm/subdev/pci/gk104.c |  1 +
>  drm/nouveau/nvkm/subdev/pci/pcie.c  | 14 ++++++++++++++
>  drm/nouveau/nvkm/subdev/pci/priv.h  |  2 ++
>  8 files changed, 30 insertions(+)
>
> diff --git a/drm/nouveau/nvkm/subdev/pci/g84.c b/drm/nouveau/nvkm/subdev/pci/g84.c
> index 62438d892..353d70d7e 100644
> --- a/drm/nouveau/nvkm/subdev/pci/g84.c
> +++ b/drm/nouveau/nvkm/subdev/pci/g84.c
> @@ -122,6 +122,14 @@ g84_pci_init(struct nvkm_pci *pci)
>                 nvkm_pci_mask(pci, 0x041c, 0x00000060, 0x00000000);
>  }
>
> +void
> +g84_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
> +{
> +       /* L0s and L1 */
> +       u32 value = status ? 0x180 : 0x0;
> +       nvkm_pci_mask(pci, 0x150, 0x180, value);
> +}
> +
>  int
>  g84_pcie_init(struct nvkm_pci *pci)
>  {
> @@ -147,6 +155,7 @@ g84_pci_func = {
>         .pcie.set_version = g84_pcie_set_version,
>         .pcie.version = g84_pcie_version,
>         .pcie.version_supported = g84_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/g92.c b/drm/nouveau/nvkm/subdev/pci/g92.c
> index 48874359d..8c35cc89e 100644
> --- a/drm/nouveau/nvkm/subdev/pci/g92.c
> +++ b/drm/nouveau/nvkm/subdev/pci/g92.c
> @@ -48,6 +48,7 @@ g92_pci_func = {
>         .pcie.set_version = g84_pcie_set_version,
>         .pcie.version = g84_pcie_version,
>         .pcie.version_supported = g92_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/g94.c b/drm/nouveau/nvkm/subdev/pci/g94.c
> index 09adb37a5..aa152d798 100644
> --- a/drm/nouveau/nvkm/subdev/pci/g94.c
> +++ b/drm/nouveau/nvkm/subdev/pci/g94.c
> @@ -40,6 +40,7 @@ g94_pci_func = {
>         .pcie.set_version = g84_pcie_set_version,
>         .pcie.version = g84_pcie_version,
>         .pcie.version_supported = g92_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/gf100.c b/drm/nouveau/nvkm/subdev/pci/gf100.c
> index 00a5e7d3e..8676480c3 100644
> --- a/drm/nouveau/nvkm/subdev/pci/gf100.c
> +++ b/drm/nouveau/nvkm/subdev/pci/gf100.c
> @@ -93,6 +93,7 @@ gf100_pci_func = {
>         .pcie.set_version = gf100_pcie_set_version,
>         .pcie.version = gf100_pcie_version,
>         .pcie.version_supported = g92_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/gf106.c b/drm/nouveau/nvkm/subdev/pci/gf106.c
> index 11bf419af..8079ebdd4 100644
> --- a/drm/nouveau/nvkm/subdev/pci/gf106.c
> +++ b/drm/nouveau/nvkm/subdev/pci/gf106.c
> @@ -40,6 +40,7 @@ gf106_pci_func = {
>         .pcie.set_version = gf100_pcie_set_version,
>         .pcie.version = gf100_pcie_version,
>         .pcie.version_supported = g92_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/gk104.c b/drm/nouveau/nvkm/subdev/pci/gk104.c
> index e68030507..b73922c52 100644
> --- a/drm/nouveau/nvkm/subdev/pci/gk104.c
> +++ b/drm/nouveau/nvkm/subdev/pci/gk104.c
> @@ -219,6 +219,7 @@ gk104_pci_func = {
>         .pcie.set_version = gf100_pcie_set_version,
>         .pcie.version = gf100_pcie_version,
>         .pcie.version_supported = gk104_pcie_version_supported,
> +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
>  };
>
>  int
> diff --git a/drm/nouveau/nvkm/subdev/pci/pcie.c b/drm/nouveau/nvkm/subdev/pci/pcie.c
> index d71e5db50..354ac4c85 100644
> --- a/drm/nouveau/nvkm/subdev/pci/pcie.c
> +++ b/drm/nouveau/nvkm/subdev/pci/pcie.c
> @@ -111,6 +111,14 @@ nvkm_pcie_init(struct nvkm_pci *pci)
>         return 0;
>  }
>
> +void
> +nvkm_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
> +{
> +       if (!pci->func->pcie.force_aspm_off)
> +               return;
> +       pci->func->pcie.force_aspm_off(pci, status);
> +}
> +
>  int
>  nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
>  {
> @@ -157,9 +165,15 @@ nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
>         nvkm_debug(subdev, "set link to %s x%i\n",
>                    nvkm_pcie_speeds[speed], width);
>
> +       /* force disable ASPM */
> +       nvkm_pcie_force_aspm_off(pci, true);
> +
>         ret = pci->func->pcie.set_link(pci, speed, width);
>         if (ret < 0)
>                 nvkm_error(subdev, "setting link failed: %i\n", ret);
>
> +       /* lift force disable ASPM */
> +       nvkm_pcie_force_aspm_off(pci, false);
This doesn't do what is says on the box.  It's forcibly disabling
ASPM, then forcibly enabling it.  You should instead restore the
settings from before forcing it off, which is what NVGPU actually does
too.

Ben.

> +
>         return ret;
>  }
> diff --git a/drm/nouveau/nvkm/subdev/pci/priv.h b/drm/nouveau/nvkm/subdev/pci/priv.h
> index 7009aad86..c6a9ef330 100644
> --- a/drm/nouveau/nvkm/subdev/pci/priv.h
> +++ b/drm/nouveau/nvkm/subdev/pci/priv.h
> @@ -24,6 +24,7 @@ struct nvkm_pci_func {
>                 void (*set_version)(struct nvkm_pci *, u8);
>                 int (*version)(struct nvkm_pci *);
>                 int (*version_supported)(struct nvkm_pci *);
> +               void (*force_aspm_off)(struct nvkm_pci *, bool);
>         } pcie;
>  };
>
> @@ -42,6 +43,7 @@ int g84_pcie_version(struct nvkm_pci *);
>  void g84_pcie_set_link_speed(struct nvkm_pci *, enum nvkm_pcie_speed);
>  enum nvkm_pcie_speed g84_pcie_cur_speed(struct nvkm_pci *);
>  enum nvkm_pcie_speed g84_pcie_max_speed(struct nvkm_pci *);
> +void g84_pcie_force_aspm_off(struct nvkm_pci *, bool status);
>  int g84_pcie_init(struct nvkm_pci *);
>  int g84_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8);
>
> --
> 2.21.0
>
> _______________________________________________
> Nouveau mailing list
> Nouveau@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/nouveau
On Tue, Sep 17, 2019 at 7:56 AM Ben Skeggs <skeggsb@gmail.com> wrote:
>
> On Fri, 13 Sep 2019 at 05:00, Karol Herbst <kherbst@redhat.com> wrote:
> >
> > taken from nvgpu
> >
> > Signed-off-by: Karol Herbst <kherbst@redhat.com>
> > ---
> >  drm/nouveau/nvkm/subdev/pci/g84.c   |  9 +++++++++
> >  drm/nouveau/nvkm/subdev/pci/g92.c   |  1 +
> >  drm/nouveau/nvkm/subdev/pci/g94.c   |  1 +
> >  drm/nouveau/nvkm/subdev/pci/gf100.c |  1 +
> >  drm/nouveau/nvkm/subdev/pci/gf106.c |  1 +
> >  drm/nouveau/nvkm/subdev/pci/gk104.c |  1 +
> >  drm/nouveau/nvkm/subdev/pci/pcie.c  | 14 ++++++++++++++
> >  drm/nouveau/nvkm/subdev/pci/priv.h  |  2 ++
> >  8 files changed, 30 insertions(+)
> >
> > diff --git a/drm/nouveau/nvkm/subdev/pci/g84.c b/drm/nouveau/nvkm/subdev/pci/g84.c
> > index 62438d892..353d70d7e 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/g84.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/g84.c
> > @@ -122,6 +122,14 @@ g84_pci_init(struct nvkm_pci *pci)
> >                 nvkm_pci_mask(pci, 0x041c, 0x00000060, 0x00000000);
> >  }
> >
> > +void
> > +g84_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
> > +{
> > +       /* L0s and L1 */
> > +       u32 value = status ? 0x180 : 0x0;
> > +       nvkm_pci_mask(pci, 0x150, 0x180, value);
> > +}
> > +
> >  int
> >  g84_pcie_init(struct nvkm_pci *pci)
> >  {
> > @@ -147,6 +155,7 @@ g84_pci_func = {
> >         .pcie.set_version = g84_pcie_set_version,
> >         .pcie.version = g84_pcie_version,
> >         .pcie.version_supported = g84_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/g92.c b/drm/nouveau/nvkm/subdev/pci/g92.c
> > index 48874359d..8c35cc89e 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/g92.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/g92.c
> > @@ -48,6 +48,7 @@ g92_pci_func = {
> >         .pcie.set_version = g84_pcie_set_version,
> >         .pcie.version = g84_pcie_version,
> >         .pcie.version_supported = g92_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/g94.c b/drm/nouveau/nvkm/subdev/pci/g94.c
> > index 09adb37a5..aa152d798 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/g94.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/g94.c
> > @@ -40,6 +40,7 @@ g94_pci_func = {
> >         .pcie.set_version = g84_pcie_set_version,
> >         .pcie.version = g84_pcie_version,
> >         .pcie.version_supported = g92_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/gf100.c b/drm/nouveau/nvkm/subdev/pci/gf100.c
> > index 00a5e7d3e..8676480c3 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/gf100.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/gf100.c
> > @@ -93,6 +93,7 @@ gf100_pci_func = {
> >         .pcie.set_version = gf100_pcie_set_version,
> >         .pcie.version = gf100_pcie_version,
> >         .pcie.version_supported = g92_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/gf106.c b/drm/nouveau/nvkm/subdev/pci/gf106.c
> > index 11bf419af..8079ebdd4 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/gf106.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/gf106.c
> > @@ -40,6 +40,7 @@ gf106_pci_func = {
> >         .pcie.set_version = gf100_pcie_set_version,
> >         .pcie.version = gf100_pcie_version,
> >         .pcie.version_supported = g92_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/gk104.c b/drm/nouveau/nvkm/subdev/pci/gk104.c
> > index e68030507..b73922c52 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/gk104.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/gk104.c
> > @@ -219,6 +219,7 @@ gk104_pci_func = {
> >         .pcie.set_version = gf100_pcie_set_version,
> >         .pcie.version = gf100_pcie_version,
> >         .pcie.version_supported = gk104_pcie_version_supported,
> > +       .pcie.force_aspm_off = g84_pcie_force_aspm_off,
> >  };
> >
> >  int
> > diff --git a/drm/nouveau/nvkm/subdev/pci/pcie.c b/drm/nouveau/nvkm/subdev/pci/pcie.c
> > index d71e5db50..354ac4c85 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/pcie.c
> > +++ b/drm/nouveau/nvkm/subdev/pci/pcie.c
> > @@ -111,6 +111,14 @@ nvkm_pcie_init(struct nvkm_pci *pci)
> >         return 0;
> >  }
> >
> > +void
> > +nvkm_pcie_force_aspm_off(struct nvkm_pci *pci, bool status)
> > +{
> > +       if (!pci->func->pcie.force_aspm_off)
> > +               return;
> > +       pci->func->pcie.force_aspm_off(pci, status);
> > +}
> > +
> >  int
> >  nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
> >  {
> > @@ -157,9 +165,15 @@ nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width)
> >         nvkm_debug(subdev, "set link to %s x%i\n",
> >                    nvkm_pcie_speeds[speed], width);
> >
> > +       /* force disable ASPM */
> > +       nvkm_pcie_force_aspm_off(pci, true);
> > +
> >         ret = pci->func->pcie.set_link(pci, speed, width);
> >         if (ret < 0)
> >                 nvkm_error(subdev, "setting link failed: %i\n", ret);
> >
> > +       /* lift force disable ASPM */
> > +       nvkm_pcie_force_aspm_off(pci, false);
> This doesn't do what is says on the box.  It's forcibly disabling
> ASPM, then forcibly enabling it.  You should instead restore the
> settings from before forcing it off, which is what NVGPU actually does
> too.
>
> Ben.
>

ohh, somehow I missed that.

> > +
> >         return ret;
> >  }
> > diff --git a/drm/nouveau/nvkm/subdev/pci/priv.h b/drm/nouveau/nvkm/subdev/pci/priv.h
> > index 7009aad86..c6a9ef330 100644
> > --- a/drm/nouveau/nvkm/subdev/pci/priv.h
> > +++ b/drm/nouveau/nvkm/subdev/pci/priv.h
> > @@ -24,6 +24,7 @@ struct nvkm_pci_func {
> >                 void (*set_version)(struct nvkm_pci *, u8);
> >                 int (*version)(struct nvkm_pci *);
> >                 int (*version_supported)(struct nvkm_pci *);
> > +               void (*force_aspm_off)(struct nvkm_pci *, bool);
> >         } pcie;
> >  };
> >
> > @@ -42,6 +43,7 @@ int g84_pcie_version(struct nvkm_pci *);
> >  void g84_pcie_set_link_speed(struct nvkm_pci *, enum nvkm_pcie_speed);
> >  enum nvkm_pcie_speed g84_pcie_cur_speed(struct nvkm_pci *);
> >  enum nvkm_pcie_speed g84_pcie_max_speed(struct nvkm_pci *);
> > +void g84_pcie_force_aspm_off(struct nvkm_pci *, bool status);
> >  int g84_pcie_init(struct nvkm_pci *);
> >  int g84_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8);
> >
> > --
> > 2.21.0
> >
> > _______________________________________________
> > Nouveau mailing list
> > Nouveau@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/nouveau