PCI core handles releasing device's resources and their rollback in
case of failure of a BAR resizing operation. Releasing resource prior
to calling pci_resize_resource() prevents PCI core from restoring the
BARs as they were.

Remove driver-side release of BARs from the amdgpu driver.

Also remove the driver initiated assignment as pci_resize_resource()
should try to assign as much as possible. If the driver side call
manages to get more required resources assigned in some scenario, such
a problem should be fixed inside pci_resize_resource() instead.

Signed-off-by: Ilpo Järvinen <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 4e241836ae68..f11a255786d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1729,12 +1729,8 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device 
*adev)
        pci_write_config_word(adev->pdev, PCI_COMMAND,
                              cmd & ~PCI_COMMAND_MEMORY);
 
-       /* Free the VRAM and doorbell BAR, we most likely need to move both. */
+       /* Tear down doorbell as resizing will release BARs */
        amdgpu_doorbell_fini(adev);
-       if (adev->asic_type >= CHIP_BONAIRE)
-               pci_release_resource(adev->pdev, 2);
-
-       pci_release_resource(adev->pdev, 0);
 
        r = pci_resize_resource(adev->pdev, 0, rbar_size, 1 << 5);
        if (r == -ENOSPC)
@@ -1743,8 +1739,6 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device 
*adev)
        else if (r && r != -ENOTSUPP)
                dev_err(adev->dev, "Problem resizing BAR0 (%d).", r);
 
-       pci_assign_unassigned_bus_resources(adev->pdev->bus);
-
        /* When the doorbell or fb BAR isn't available we have no chance of
         * using the device.
         */
-- 
2.39.5

Reply via email to