On Tue, Sep 17, 2019 at 7:56 AM Ben Skeggs <skeggsb@xxxxxxxxx> wrote: > > On Fri, 13 Sep 2019 at 05:00, Karol Herbst <kherbst@xxxxxxxxxx> wrote: > > > > taken from nvgpu > > > > Signed-off-by: Karol Herbst <kherbst@xxxxxxxxxx> > > --- > > 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@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/nouveau _______________________________________________ Nouveau mailing list Nouveau@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/nouveau