AI 服务暂时不可用,以下为来源正文,待恢复后补全翻译。
Notifications You must be signed in to change notification settings Fork 64k Star 244k File tree Expand file treeCollapse file tree Open diff view settings Filter options drivers/gpu/drm/xe xe_vram.c Expand file treeCollapse file tree Open diff view settings Original file line numberDiff line numberDiff line change @@ -89,12 +89,25 @@ static int get_flat_ccs_offset(struct xe_gt *gt, u64 tile_size, u64 *poffset) 8989 offset = offset_hi mmio, GSMBASE) - 96- ccs_size), 97- "Hole between CCS and GSM.\n"); 93+ /* 94+ * Everything below this offset is handed to the VRAM 95+ * allocator, so it has to be the *first* address the 96+ * compression hardware owns, rounded down. Rounding it up 97+ * publishes CCS storage as free memory. 98+ */ 99+ offset = round_down(offset, SZ_4K); 100+ 101+ /* 102+ * CCS storage must not run into GSM. The old check compared 103+ * the offset against GSMBASE - ccs_size for equality, which 104+ * could not fail: that value is 128K aligned, so it agreed 105+ * with the rounded-up offset even when the base was not 128K 106+ * aligned - exactly the case this fixes. 107+ */ 108+ xe_assert_msg(xe, offset + ccs_size mmio, GSMBASE), 110+ "CCS overlaps GSM.\n"); 98111 } else { 99112 reg = xe_gt_mcr_unicast_read_any(gt, XEHP_FLAT_CCS_BASE_ADDR); 100113 offset = (u64)REG_FIELD_GET(XEHP_FLAT_CCS_PTR, reg) * SZ_64K; 0 (0)