Message ID | 20230331114027.2803100-1-stanislaw.gruszka@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | accel/ivpu: Remove D3hot delay for Meteorlake | expand |
On Fri, Mar 31, 2023 at 01:40:27PM +0200, Stanislaw Gruszka wrote: > From: Karol Wachowski <karol.wachowski@linux.intel.com> > > VPU on MTL has hardware optimizations and does not require 10ms > D0 - D3hot transition delay imposed by PCI specification. PCIe r6.0, sec 5.9. > The delay removal is traditionally done by adding PCI ID to > quirk_remove_dhot_delay() in drivers/pci/quirks.c . But since quirk_remove_d3hot_delay() > we do not need that optimization before driver probe and we > can better specify in the ivpu driver on what (future) hardware > use the optimization, we do not use quirk_remove_dhot_delay() Again. > for that. > > Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com> > Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> > --- > drivers/accel/ivpu/ivpu_drv.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c > index 3be4a5a2b07a..cf9925c0a8ad 100644 > --- a/drivers/accel/ivpu/ivpu_drv.c > +++ b/drivers/accel/ivpu/ivpu_drv.c > @@ -442,6 +442,10 @@ static int ivpu_pci_init(struct ivpu_device *vdev) > /* Clear any pending errors */ > pcie_capability_clear_word(pdev, PCI_EXP_DEVSTA, 0x3f); > > + /* VPU MTL does not require PCI spec 10m D3hot delay */ > + if (ivpu_is_mtl(vdev)) > + pdev->d3hot_delay = 0; d3hot_delay is used after a D0->D3hot transition, after a D3hot->D0 transition, and after the D0->D3hot and D3hot->D0 transitions in pci_pm_reset(). I assume this device can tolerate removing *all* of those delays, right? > ret = pcim_enable_device(pdev); > if (ret) { > ivpu_err(vdev, "Failed to enable PCI device: %d\n", ret); > -- > 2.25.1 >
On Fri, Mar 31, 2023 at 02:26:04PM -0500, Bjorn Helgaas wrote: > On Fri, Mar 31, 2023 at 01:40:27PM +0200, Stanislaw Gruszka wrote: > > From: Karol Wachowski <karol.wachowski@linux.intel.com> > > > > VPU on MTL has hardware optimizations and does not require 10ms > > D0 - D3hot transition delay imposed by PCI specification. > > PCIe r6.0, sec 5.9. > > > The delay removal is traditionally done by adding PCI ID to > > quirk_remove_dhot_delay() in drivers/pci/quirks.c . But since > > quirk_remove_d3hot_delay() > > > we do not need that optimization before driver probe and we > > can better specify in the ivpu driver on what (future) hardware > > use the optimization, we do not use quirk_remove_dhot_delay() > > Again. I Will fix the commit message in v2. > > for that. > > > > Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com> > > Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> > > --- > > drivers/accel/ivpu/ivpu_drv.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c > > index 3be4a5a2b07a..cf9925c0a8ad 100644 > > --- a/drivers/accel/ivpu/ivpu_drv.c > > +++ b/drivers/accel/ivpu/ivpu_drv.c > > @@ -442,6 +442,10 @@ static int ivpu_pci_init(struct ivpu_device *vdev) > > /* Clear any pending errors */ > > pcie_capability_clear_word(pdev, PCI_EXP_DEVSTA, 0x3f); > > > > + /* VPU MTL does not require PCI spec 10m D3hot delay */ > > + if (ivpu_is_mtl(vdev)) > > + pdev->d3hot_delay = 0; > > d3hot_delay is used after a D0->D3hot transition, after a D3hot->D0 > transition, and after the D0->D3hot and D3hot->D0 transitions in > pci_pm_reset(). > > I assume this device can tolerate removing *all* of those delays, > right? Yes. Regards Stanislaw
diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c index 3be4a5a2b07a..cf9925c0a8ad 100644 --- a/drivers/accel/ivpu/ivpu_drv.c +++ b/drivers/accel/ivpu/ivpu_drv.c @@ -442,6 +442,10 @@ static int ivpu_pci_init(struct ivpu_device *vdev) /* Clear any pending errors */ pcie_capability_clear_word(pdev, PCI_EXP_DEVSTA, 0x3f); + /* VPU MTL does not require PCI spec 10m D3hot delay */ + if (ivpu_is_mtl(vdev)) + pdev->d3hot_delay = 0; + ret = pcim_enable_device(pdev); if (ret) { ivpu_err(vdev, "Failed to enable PCI device: %d\n", ret);