diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2020-06-12 12:30:11 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2020-06-12 12:30:11 +0000 |
commit | db490af9c8b26165051067dedf5fd468b04dcce9 (patch) | |
tree | 3d6b815147047e66389dadb8e2eeb98efa9b88e5 /sys/dev | |
parent | 8f1f9ddee2a994bd53f8f1ce1565ffd64cdbd743 (diff) |
Silence amdgpu_device_resize_fb_bar; supporting resizing of PCI BARs is
tricky and using the pre-programmed BAR size should always work.
Using bigger BARs might improve performance but it we probably need
other changes (such as making the driver mpsafe) to benefit from that.
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c | 26 |
1 files changed, 2 insertions, 24 deletions
diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c b/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c index 71ef4d4537e..3509e8b3815 100644 --- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c +++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c @@ -886,6 +886,7 @@ void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb) */ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) { +#ifdef __linux__ u64 space_needed = roundup_pow_of_two(adev->gmc.real_vram_size); u32 rbar_size = order_base_2(((space_needed >> 20) | 1)) - 1; struct pci_bus *root; @@ -893,16 +894,10 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) unsigned i; u16 cmd; int r; - pcireg_t type; - - /* XXX not right yet */ - STUB(); - return 0; /* Bypass for VF */ if (amdgpu_sriov_vf(adev)) return 0; -#ifdef notyet /* Check if the root BUS has 64bit memory resources */ root = adev->pdev->bus; @@ -918,7 +913,6 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) /* Trying to resize is pointless without a root hub window above 4GB */ if (!res) return 0; -#endif /* Disable memory decoding while we change the BAR addresses and size */ pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd); @@ -927,12 +921,10 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) /* Free the VRAM and doorbell BAR, we most likely need to move both. */ amdgpu_device_doorbell_fini(adev); -#ifdef __linux__ if (adev->asic_type >= CHIP_BONAIRE) pci_release_resource(adev->pdev, 2); pci_release_resource(adev->pdev, 0); -#endif r = pci_resize_resource(adev->pdev, 0, rbar_size); if (r == -ENOSPC) @@ -940,31 +932,17 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) else if (r && r != -ENOTSUPP) DRM_ERROR("Problem resizing BAR0 (%d).", r); -#ifdef __linux__ pci_assign_unassigned_bus_resources(adev->pdev->bus); -#else -#define AMDGPU_PCI_MEM 0x10 - type = pci_mapreg_type(adev->pc, adev->pa_tag, AMDGPU_PCI_MEM); - if (PCI_MAPREG_TYPE(type) != PCI_MAPREG_TYPE_MEM || - pci_mapreg_info(adev->pc, adev->pa_tag, AMDGPU_PCI_MEM, - type, NULL, &adev->fb_aper_size, NULL)) { - printf(": can't get frambuffer info\n"); - return -ENODEV; - } -#endif /* When the doorbell or fb BAR isn't available we have no chance of * using the device. */ r = amdgpu_device_doorbell_init(adev); -#ifdef notyet if (r || (pci_resource_flags(adev->pdev, 0) & IORESOURCE_UNSET)) -#else - if (r) -#endif return -ENODEV; pci_write_config_word(adev->pdev, PCI_COMMAND, cmd); +#endif /* __linux__ */ return 0; } |