diff options
Diffstat (limited to 'drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c')
-rw-r--r-- | drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c index a3855870321f..d49b2cfeba92 100644 --- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c +++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT /* - * Copyright © 2021-2022 Intel Corporation + * Copyright © 2021-2023 Intel Corporation * Copyright (C) 2021-2002 Red Hat */ @@ -51,27 +51,29 @@ bool xe_ttm_stolen_cpu_access_needs_ggtt(struct xe_device *xe) return GRAPHICS_VERx100(xe) < 1270 && !IS_DGFX(xe); } -static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr) +static s64 detect_bar2_dgfx(struct xe_gt *gt, struct xe_ttm_stolen_mgr *mgr) { - struct pci_dev *pdev = to_pci_dev(xe->drm.dev); - struct xe_gt *gt = to_gt(xe); - u64 vram_size, stolen_size; - int err; - - err = xe_mmio_total_vram_size(xe, &vram_size, NULL); - if (err) { - drm_info(&xe->drm, "Querying total vram size failed\n"); + struct pci_dev *pdev = to_pci_dev(gt->xe->drm.dev); + u64 stolen_size; + u64 tile_offset; + u64 tile_size; + u64 vram_size; + + if (xe_mmio_tile_vram_size(gt, &vram_size, &tile_size, &tile_offset)) { + drm_err(>->xe->drm, "Querying total vram size failed\n"); return 0; } /* Use DSM base address instead for stolen memory */ - mgr->stolen_base = xe_mmio_read64(gt, DSMBASE) & BDSM_MASK; - if (drm_WARN_ON(&xe->drm, vram_size < mgr->stolen_base)) + mgr->stolen_base = (xe_mmio_read64(gt, DSMBASE) & BDSM_MASK) - tile_offset; + if (drm_WARN_ON(>->xe->drm, tile_size < mgr->stolen_base)) return 0; - stolen_size = vram_size - mgr->stolen_base; - if (mgr->stolen_base + stolen_size <= pci_resource_len(pdev, 2)) - mgr->io_base = pci_resource_start(pdev, 2) + mgr->stolen_base; + stolen_size = tile_size - mgr->stolen_base; + + /* Verify usage fits in the actual resource available */ + if (mgr->stolen_base + stolen_size <= pci_resource_len(pdev, GEN12_LMEM_BAR)) + mgr->io_base = gt->mem.vram.io_start + mgr->stolen_base; /* * There may be few KB of platform dependent reserved memory at the end @@ -139,7 +141,7 @@ void xe_ttm_stolen_mgr_init(struct xe_device *xe) int err; if (IS_DGFX(xe)) - stolen_size = detect_bar2_dgfx(xe, mgr); + stolen_size = detect_bar2_dgfx(to_gt(xe), mgr); else if (GRAPHICS_VERx100(xe) >= 1270) stolen_size = detect_bar2_integrated(xe, mgr); else |