Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: prefer resource_size_t for everything stolen

Keeps things consistent now that we make use of struct resource. This
should keep us covered in case we ever get huge amounts of stolen
memory.

v2: bunch of missing conversions (Chris)

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171211151822.20953-10-matthew.auld@intel.com

authored by

Matthew Auld and committed by
Joonas Lahtinen
b7128ef1 b1ace601

+46 -45
+6 -6
drivers/char/agp/intel-gtt.c
··· 80 80 unsigned int needs_dmar : 1; 81 81 phys_addr_t gma_bus_addr; 82 82 /* Size of memory reserved for graphics by the BIOS */ 83 - unsigned int stolen_size; 83 + resource_size_t stolen_size; 84 84 /* Total number of gtt entries. */ 85 85 unsigned int gtt_total_entries; 86 86 /* Part of the gtt that is mappable by the cpu, for those chips where ··· 333 333 writel_relaxed(addr | pte_flags, intel_private.gtt + entry); 334 334 } 335 335 336 - static unsigned int intel_gtt_stolen_size(void) 336 + static resource_size_t intel_gtt_stolen_size(void) 337 337 { 338 338 u16 gmch_ctrl; 339 339 u8 rdct; 340 340 int local = 0; 341 341 static const int ddt[4] = { 0, 16, 32, 64 }; 342 - unsigned int stolen_size = 0; 342 + resource_size_t stolen_size = 0; 343 343 344 344 if (INTEL_GTT_GEN == 1) 345 345 return 0; /* no stolen mem on i81x */ ··· 417 417 } 418 418 419 419 if (stolen_size > 0) { 420 - dev_info(&intel_private.bridge_dev->dev, "detected %dK %s memory\n", 421 - stolen_size / KB(1), local ? "local" : "stolen"); 420 + dev_info(&intel_private.bridge_dev->dev, "detected %lluK %s memory\n", 421 + (u64)stolen_size / KB(1), local ? "local" : "stolen"); 422 422 } else { 423 423 dev_info(&intel_private.bridge_dev->dev, 424 424 "no pre-allocated video memory detected\n"); ··· 1425 1425 1426 1426 void intel_gtt_get(u64 *gtt_total, 1427 1427 phys_addr_t *mappable_base, 1428 - u64 *mappable_end) 1428 + resource_size_t *mappable_end) 1429 1429 { 1430 1430 *gtt_total = intel_private.gtt_total_entries << PAGE_SHIFT; 1431 1431 *mappable_base = intel_private.gma_bus_addr;
+2 -2
drivers/gpu/drm/i915/i915_debugfs.c
··· 522 522 seq_printf(m, "%u display objects (globally pinned), %llu bytes\n", 523 523 dpy_count, dpy_size); 524 524 525 - seq_printf(m, "%llu [%llu] gtt total\n", 526 - ggtt->base.total, ggtt->mappable_end); 525 + seq_printf(m, "%llu [%pa] gtt total\n", 526 + ggtt->base.total, &ggtt->mappable_end); 527 527 seq_printf(m, "Supported page sizes: %s\n", 528 528 stringify_page_sizes(INTEL_INFO(dev_priv)->page_sizes, 529 529 buf, sizeof(buf)));
+6 -5
drivers/gpu/drm/i915/i915_drv.h
··· 2273 2273 * avoid the first page! The upper end of stolen memory is reserved for 2274 2274 * hardware functions and similarly removed from the accessible range. 2275 2275 */ 2276 - u32 stolen_usable_size; /* Total size minus reserved ranges */ 2276 + resource_size_t stolen_usable_size; /* Total size minus reserved ranges */ 2277 2277 2278 2278 void __iomem *regs; 2279 2279 ··· 3932 3932 int i915_gem_init_stolen(struct drm_i915_private *dev_priv); 3933 3933 void i915_gem_cleanup_stolen(struct drm_device *dev); 3934 3934 struct drm_i915_gem_object * 3935 - i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, u32 size); 3935 + i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, 3936 + resource_size_t size); 3936 3937 struct drm_i915_gem_object * 3937 3938 i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv, 3938 - u32 stolen_offset, 3939 - u32 gtt_offset, 3940 - u32 size); 3939 + resource_size_t stolen_offset, 3940 + resource_size_t gtt_offset, 3941 + resource_size_t size); 3941 3942 3942 3943 /* i915_gem_internal.c */ 3943 3944 struct drm_i915_gem_object *
+5 -5
drivers/gpu/drm/i915/i915_gem_gtt.c
··· 3354 3354 * a coarse sanity check. 3355 3355 */ 3356 3356 if (ggtt->mappable_end < (64<<20) || ggtt->mappable_end > (512<<20)) { 3357 - DRM_ERROR("Unknown GMADR size (%llx)\n", ggtt->mappable_end); 3357 + DRM_ERROR("Unknown GMADR size (%pa)\n", &ggtt->mappable_end); 3358 3358 return -ENXIO; 3359 3359 } 3360 3360 ··· 3464 3464 */ 3465 3465 if (USES_GUC(dev_priv)) { 3466 3466 ggtt->base.total = min_t(u64, ggtt->base.total, GUC_GGTT_TOP); 3467 - ggtt->mappable_end = min(ggtt->mappable_end, ggtt->base.total); 3467 + ggtt->mappable_end = min_t(u64, ggtt->mappable_end, ggtt->base.total); 3468 3468 } 3469 3469 3470 3470 if ((ggtt->base.total - 1) >> 32) { ··· 3472 3472 " of address space! Found %lldM!\n", 3473 3473 ggtt->base.total >> 20); 3474 3474 ggtt->base.total = 1ULL << 32; 3475 - ggtt->mappable_end = min(ggtt->mappable_end, ggtt->base.total); 3475 + ggtt->mappable_end = min_t(u64, ggtt->mappable_end, ggtt->base.total); 3476 3476 } 3477 3477 3478 3478 if (ggtt->mappable_end > ggtt->base.total) { 3479 3479 DRM_ERROR("mappable aperture extends past end of GGTT," 3480 - " aperture=%llx, total=%llx\n", 3481 - ggtt->mappable_end, ggtt->base.total); 3480 + " aperture=%pa, total=%llx\n", 3481 + &ggtt->mappable_end, ggtt->base.total); 3482 3482 ggtt->mappable_end = ggtt->base.total; 3483 3483 } 3484 3484
+1 -1
drivers/gpu/drm/i915/i915_gem_gtt.h
··· 371 371 372 372 struct io_mapping iomap; /* Mapping to our CPU mappable region */ 373 373 struct resource gmadr; /* GMADR resource */ 374 - u64 mappable_end; /* End offset that we can CPU map */ 374 + resource_size_t mappable_end; /* End offset that we can CPU map */ 375 375 376 376 /** "Graphics Stolen Memory" holds the global PTEs */ 377 377 void __iomem *gsm;
+20 -20
drivers/gpu/drm/i915/i915_gem_stolen.c
··· 95 95 !IS_G33(dev_priv) && !IS_PINEVIEW(dev_priv) && !IS_G4X(dev_priv)) { 96 96 struct resource stolen[2] = {*dsm, *dsm}; 97 97 struct resource ggtt_res; 98 - u64 ggtt_start; 98 + resource_size_t ggtt_start; 99 99 100 100 ggtt_start = I915_READ(PGTBL_CTL); 101 101 if (IS_GEN4(dev_priv)) ··· 174 174 } 175 175 176 176 static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv, 177 - dma_addr_t *base, u32 *size) 177 + resource_size_t *base, resource_size_t *size) 178 178 { 179 179 uint32_t reg_val = I915_READ(IS_GM45(dev_priv) ? 180 180 CTG_STOLEN_RESERVED : 181 181 ELK_STOLEN_RESERVED); 182 - dma_addr_t stolen_top = dev_priv->dsm.end + 1; 182 + resource_size_t stolen_top = dev_priv->dsm.end + 1; 183 183 184 184 if ((reg_val & G4X_STOLEN_RESERVED_ENABLE) == 0) { 185 185 *base = 0; ··· 208 208 } 209 209 210 210 static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv, 211 - dma_addr_t *base, u32 *size) 211 + resource_size_t *base, resource_size_t *size) 212 212 { 213 213 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 214 214 ··· 240 240 } 241 241 242 242 static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv, 243 - dma_addr_t *base, u32 *size) 243 + resource_size_t *base, resource_size_t *size) 244 244 { 245 245 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 246 246 ··· 266 266 } 267 267 268 268 static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv, 269 - dma_addr_t *base, u32 *size) 269 + resource_size_t *base, resource_size_t *size) 270 270 { 271 271 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 272 272 ··· 298 298 } 299 299 300 300 static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv, 301 - dma_addr_t *base, u32 *size) 301 + resource_size_t *base, resource_size_t *size) 302 302 { 303 303 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 304 - dma_addr_t stolen_top; 304 + resource_size_t stolen_top; 305 305 306 306 if ((reg_val & GEN6_STOLEN_RESERVED_ENABLE) == 0) { 307 307 *base = 0; ··· 325 325 326 326 int i915_gem_init_stolen(struct drm_i915_private *dev_priv) 327 327 { 328 - dma_addr_t reserved_base, stolen_top; 329 - u32 reserved_total, reserved_size; 330 - u32 stolen_usable_start; 328 + resource_size_t reserved_base, stolen_top; 329 + resource_size_t reserved_total, reserved_size; 330 + resource_size_t stolen_usable_start; 331 331 332 332 mutex_init(&dev_priv->mm.stolen_lock); 333 333 ··· 427 427 428 428 static struct sg_table * 429 429 i915_pages_create_for_stolen(struct drm_device *dev, 430 - u32 offset, u32 size) 430 + resource_size_t offset, resource_size_t size) 431 431 { 432 432 struct drm_i915_private *dev_priv = to_i915(dev); 433 433 struct sg_table *st; 434 434 struct scatterlist *sg; 435 435 436 - GEM_BUG_ON(range_overflows_t(resource_size_t, offset, size, 437 - resource_size(&dev_priv->dsm))); 436 + GEM_BUG_ON(range_overflows(offset, size, resource_size(&dev_priv->dsm))); 438 437 439 438 /* We hide that we have no struct page backing our stolen object 440 439 * by wrapping the contiguous physical allocation with a fake ··· 531 532 } 532 533 533 534 struct drm_i915_gem_object * 534 - i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, u32 size) 535 + i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, 536 + resource_size_t size) 535 537 { 536 538 struct drm_i915_gem_object *obj; 537 539 struct drm_mm_node *stolen; ··· 565 565 566 566 struct drm_i915_gem_object * 567 567 i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv, 568 - u32 stolen_offset, 569 - u32 gtt_offset, 570 - u32 size) 568 + resource_size_t stolen_offset, 569 + resource_size_t gtt_offset, 570 + resource_size_t size) 571 571 { 572 572 struct i915_ggtt *ggtt = &dev_priv->ggtt; 573 573 struct drm_i915_gem_object *obj; ··· 580 580 581 581 lockdep_assert_held(&dev_priv->drm.struct_mutex); 582 582 583 - DRM_DEBUG_KMS("creating preallocated stolen object: stolen_offset=%x, gtt_offset=%x, size=%x\n", 584 - stolen_offset, gtt_offset, size); 583 + DRM_DEBUG_KMS("creating preallocated stolen object: stolen_offset=%pa, gtt_offset=%pa, size=%pa\n", 584 + &stolen_offset, &gtt_offset, &size); 585 585 586 586 /* KISS and expect everything to be page-aligned */ 587 587 if (WARN_ON(size == 0) ||
+5 -5
drivers/gpu/drm/i915/intel_pm.c
··· 7033 7033 7034 7034 static void cherryview_setup_pctx(struct drm_i915_private *dev_priv) 7035 7035 { 7036 - unsigned long pctx_paddr, paddr; 7036 + resource_size_t pctx_paddr, paddr; 7037 + resource_size_t pctx_size = 32*1024; 7037 7038 u32 pcbr; 7038 - int pctx_size = 32*1024; 7039 7039 7040 7040 pcbr = I915_READ(VLV_PCBR); 7041 7041 if ((pcbr >> VLV_PCBR_ADDR_SHIFT) == 0) { ··· 7053 7053 static void valleyview_setup_pctx(struct drm_i915_private *dev_priv) 7054 7054 { 7055 7055 struct drm_i915_gem_object *pctx; 7056 - unsigned long pctx_paddr; 7056 + resource_size_t pctx_paddr; 7057 + resource_size_t pctx_size = 24*1024; 7057 7058 u32 pcbr; 7058 - int pctx_size = 24*1024; 7059 7059 7060 7060 pcbr = I915_READ(VLV_PCBR); 7061 7061 if (pcbr) { 7062 7062 /* BIOS set it up already, grab the pre-alloc'd space */ 7063 - int pcbr_offset; 7063 + resource_size_t pcbr_offset; 7064 7064 7065 7065 pcbr_offset = (pcbr & (~4095)) - dev_priv->dsm.start; 7066 7066 pctx = i915_gem_object_create_stolen_for_preallocated(dev_priv,
+1 -1
include/drm/intel-gtt.h
··· 6 6 7 7 void intel_gtt_get(u64 *gtt_total, 8 8 phys_addr_t *mappable_base, 9 - u64 *mappable_end); 9 + resource_size_t *mappable_end); 10 10 11 11 int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev, 12 12 struct agp_bridge_data *bridge);