Loading drivers/gpu/drm/nouveau/include/nvkm/core/mm.h +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ struct nvkm_mm { static inline bool nvkm_mm_initialised(struct nvkm_mm *mm) { return mm->block_size != 0; return mm->heap_nodes; } int nvkm_mm_init(struct nvkm_mm *, u32 offset, u32 length, u32 block); Loading @@ -37,4 +37,5 @@ int nvkm_mm_head(struct nvkm_mm *, u8 heap, u8 type, u32 size_max, int nvkm_mm_tail(struct nvkm_mm *, u8 heap, u8 type, u32 size_max, u32 size_min, u32 align, struct nvkm_mm_node **); void nvkm_mm_free(struct nvkm_mm *, struct nvkm_mm_node **); void nvkm_mm_dump(struct nvkm_mm *, const char *); #endif drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h +36 −27 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #define NV_MEM_TARGET_VM 3 #define NV_MEM_TARGET_GART 4 #define NV_MEM_TYPE_VM 0x7f #define NVKM_RAM_TYPE_VM 0x7f #define NV_MEM_COMP_VM 0x03 struct nvkm_mem { Loading Loading @@ -52,9 +52,6 @@ struct nvkm_fb { struct nvkm_ram *ram; struct nvkm_mm vram; struct nvkm_mm tags; struct { struct nvkm_fb_tile region[16]; int regions; Loading Loading @@ -112,36 +109,35 @@ struct nvkm_ram_data { u32 freq; }; enum nvkm_ram_type { NVKM_RAM_TYPE_UNKNOWN = 0, NVKM_RAM_TYPE_STOLEN, NVKM_RAM_TYPE_SGRAM, NVKM_RAM_TYPE_SDRAM, NVKM_RAM_TYPE_DDR1, NVKM_RAM_TYPE_DDR2, NVKM_RAM_TYPE_DDR3, NVKM_RAM_TYPE_GDDR2, NVKM_RAM_TYPE_GDDR3, NVKM_RAM_TYPE_GDDR4, NVKM_RAM_TYPE_GDDR5 }; struct nvkm_ram { struct nvkm_object base; enum { NV_MEM_TYPE_UNKNOWN = 0, NV_MEM_TYPE_STOLEN, NV_MEM_TYPE_SGRAM, NV_MEM_TYPE_SDRAM, NV_MEM_TYPE_DDR1, NV_MEM_TYPE_DDR2, NV_MEM_TYPE_DDR3, NV_MEM_TYPE_GDDR2, NV_MEM_TYPE_GDDR3, NV_MEM_TYPE_GDDR4, NV_MEM_TYPE_GDDR5 } type; u64 stolen; const struct nvkm_ram_func *func; struct nvkm_fb *fb; enum nvkm_ram_type type; u64 size; u32 tags; #define NVKM_RAM_MM_SHIFT 12 struct nvkm_mm vram; struct nvkm_mm tags; u64 stolen; int ranks; int parts; int part_mask; int (*get)(struct nvkm_fb *, u64 size, u32 align, u32 size_nc, u32 type, struct nvkm_mem **); void (*put)(struct nvkm_fb *, struct nvkm_mem **); int (*calc)(struct nvkm_fb *, u32 freq); int (*prog)(struct nvkm_fb *); void (*tidy)(struct nvkm_fb *); u32 freq; u32 mr[16]; u32 mr1_nuts; Loading @@ -151,4 +147,17 @@ struct nvkm_ram { struct nvkm_ram_data xition; struct nvkm_ram_data target; }; struct nvkm_ram_func { void *(*dtor)(struct nvkm_ram *); int (*init)(struct nvkm_ram *); int (*get)(struct nvkm_ram *, u64 size, u32 align, u32 size_nc, u32 type, struct nvkm_mem **); void (*put)(struct nvkm_ram *, struct nvkm_mem **); int (*calc)(struct nvkm_ram *, u32 freq); int (*prog)(struct nvkm_ram *); void (*tidy)(struct nvkm_ram *); }; #endif drivers/gpu/drm/nouveau/nouveau_ttm.c +6 −33 Original line number Diff line number Diff line Loading @@ -64,9 +64,9 @@ nouveau_vram_manager_del(struct ttm_mem_type_manager *man, struct ttm_mem_reg *mem) { struct nouveau_drm *drm = nouveau_bdev(man->bdev); struct nvkm_fb *fb = nvxx_fb(&drm->device); struct nvkm_ram *ram = nvxx_fb(&drm->device)->ram; nvkm_mem_node_cleanup(mem->mm_node); fb->ram->put(fb, (struct nvkm_mem **)&mem->mm_node); ram->func->put(ram, (struct nvkm_mem **)&mem->mm_node); } static int Loading @@ -76,7 +76,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, struct ttm_mem_reg *mem) { struct nouveau_drm *drm = nouveau_bdev(man->bdev); struct nvkm_fb *fb = nvxx_fb(&drm->device); struct nvkm_ram *ram = nvxx_fb(&drm->device)->ram; struct nouveau_bo *nvbo = nouveau_bo(bo); struct nvkm_mem *node; u32 size_nc = 0; Loading @@ -88,7 +88,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, if (nvbo->tile_flags & NOUVEAU_GEM_TILE_NONCONTIG) size_nc = 1 << nvbo->page_shift; ret = fb->ram->get(fb, mem->num_pages << PAGE_SHIFT, ret = ram->func->get(ram, mem->num_pages << PAGE_SHIFT, mem->page_alignment << PAGE_SHIFT, size_nc, (nvbo->tile_flags >> 8) & 0x3ff, &node); if (ret) { Loading @@ -103,38 +103,11 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, return 0; } static void nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) { struct nvkm_fb *fb = man->priv; struct nvkm_mm *mm = &fb->vram; struct nvkm_mm_node *r; u32 total = 0, free = 0; mutex_lock(&nv_subdev(fb)->mutex); list_for_each_entry(r, &mm->nodes, nl_entry) { printk(KERN_DEBUG "%s %d: 0x%010llx 0x%010llx\n", prefix, r->type, ((u64)r->offset << 12), (((u64)r->offset + r->length) << 12)); total += r->length; if (!r->type) free += r->length; } mutex_unlock(&nv_subdev(fb)->mutex); printk(KERN_DEBUG "%s total: 0x%010llx free: 0x%010llx\n", prefix, (u64)total << 12, (u64)free << 12); printk(KERN_DEBUG "%s block: 0x%08x\n", prefix, mm->block_size << 12); } const struct ttm_mem_type_manager_func nouveau_vram_manager = { nouveau_vram_manager_init, nouveau_vram_manager_fini, nouveau_vram_manager_new, nouveau_vram_manager_del, nouveau_vram_manager_debug }; static int Loading drivers/gpu/drm/nouveau/nvkm/core/mm.c +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #define node(root, dir) ((root)->nl_entry.dir == &mm->nodes) ? NULL : \ list_entry((root)->nl_entry.dir, struct nvkm_mm_node, nl_entry) static void void nvkm_mm_dump(struct nvkm_mm *mm, const char *header) { struct nvkm_mm_node *node; Loading drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv50.c +1 −1 Original line number Diff line number Diff line Loading @@ -569,7 +569,7 @@ nv50_gr_construct_mmio(struct nvkm_grctx *ctx) else if (device->chipset < 0xa0) gr_def(ctx, 0x407d08, 0x00390040); else { if (nvkm_fb(device)->ram->type != NV_MEM_TYPE_GDDR5) if (nvkm_fb(device)->ram->type != NVKM_RAM_TYPE_GDDR5) gr_def(ctx, 0x407d08, 0x003d0040); else gr_def(ctx, 0x407d08, 0x003c0040); Loading Loading
drivers/gpu/drm/nouveau/include/nvkm/core/mm.h +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ struct nvkm_mm { static inline bool nvkm_mm_initialised(struct nvkm_mm *mm) { return mm->block_size != 0; return mm->heap_nodes; } int nvkm_mm_init(struct nvkm_mm *, u32 offset, u32 length, u32 block); Loading @@ -37,4 +37,5 @@ int nvkm_mm_head(struct nvkm_mm *, u8 heap, u8 type, u32 size_max, int nvkm_mm_tail(struct nvkm_mm *, u8 heap, u8 type, u32 size_max, u32 size_min, u32 align, struct nvkm_mm_node **); void nvkm_mm_free(struct nvkm_mm *, struct nvkm_mm_node **); void nvkm_mm_dump(struct nvkm_mm *, const char *); #endif
drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h +36 −27 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #define NV_MEM_TARGET_VM 3 #define NV_MEM_TARGET_GART 4 #define NV_MEM_TYPE_VM 0x7f #define NVKM_RAM_TYPE_VM 0x7f #define NV_MEM_COMP_VM 0x03 struct nvkm_mem { Loading Loading @@ -52,9 +52,6 @@ struct nvkm_fb { struct nvkm_ram *ram; struct nvkm_mm vram; struct nvkm_mm tags; struct { struct nvkm_fb_tile region[16]; int regions; Loading Loading @@ -112,36 +109,35 @@ struct nvkm_ram_data { u32 freq; }; enum nvkm_ram_type { NVKM_RAM_TYPE_UNKNOWN = 0, NVKM_RAM_TYPE_STOLEN, NVKM_RAM_TYPE_SGRAM, NVKM_RAM_TYPE_SDRAM, NVKM_RAM_TYPE_DDR1, NVKM_RAM_TYPE_DDR2, NVKM_RAM_TYPE_DDR3, NVKM_RAM_TYPE_GDDR2, NVKM_RAM_TYPE_GDDR3, NVKM_RAM_TYPE_GDDR4, NVKM_RAM_TYPE_GDDR5 }; struct nvkm_ram { struct nvkm_object base; enum { NV_MEM_TYPE_UNKNOWN = 0, NV_MEM_TYPE_STOLEN, NV_MEM_TYPE_SGRAM, NV_MEM_TYPE_SDRAM, NV_MEM_TYPE_DDR1, NV_MEM_TYPE_DDR2, NV_MEM_TYPE_DDR3, NV_MEM_TYPE_GDDR2, NV_MEM_TYPE_GDDR3, NV_MEM_TYPE_GDDR4, NV_MEM_TYPE_GDDR5 } type; u64 stolen; const struct nvkm_ram_func *func; struct nvkm_fb *fb; enum nvkm_ram_type type; u64 size; u32 tags; #define NVKM_RAM_MM_SHIFT 12 struct nvkm_mm vram; struct nvkm_mm tags; u64 stolen; int ranks; int parts; int part_mask; int (*get)(struct nvkm_fb *, u64 size, u32 align, u32 size_nc, u32 type, struct nvkm_mem **); void (*put)(struct nvkm_fb *, struct nvkm_mem **); int (*calc)(struct nvkm_fb *, u32 freq); int (*prog)(struct nvkm_fb *); void (*tidy)(struct nvkm_fb *); u32 freq; u32 mr[16]; u32 mr1_nuts; Loading @@ -151,4 +147,17 @@ struct nvkm_ram { struct nvkm_ram_data xition; struct nvkm_ram_data target; }; struct nvkm_ram_func { void *(*dtor)(struct nvkm_ram *); int (*init)(struct nvkm_ram *); int (*get)(struct nvkm_ram *, u64 size, u32 align, u32 size_nc, u32 type, struct nvkm_mem **); void (*put)(struct nvkm_ram *, struct nvkm_mem **); int (*calc)(struct nvkm_ram *, u32 freq); int (*prog)(struct nvkm_ram *); void (*tidy)(struct nvkm_ram *); }; #endif
drivers/gpu/drm/nouveau/nouveau_ttm.c +6 −33 Original line number Diff line number Diff line Loading @@ -64,9 +64,9 @@ nouveau_vram_manager_del(struct ttm_mem_type_manager *man, struct ttm_mem_reg *mem) { struct nouveau_drm *drm = nouveau_bdev(man->bdev); struct nvkm_fb *fb = nvxx_fb(&drm->device); struct nvkm_ram *ram = nvxx_fb(&drm->device)->ram; nvkm_mem_node_cleanup(mem->mm_node); fb->ram->put(fb, (struct nvkm_mem **)&mem->mm_node); ram->func->put(ram, (struct nvkm_mem **)&mem->mm_node); } static int Loading @@ -76,7 +76,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, struct ttm_mem_reg *mem) { struct nouveau_drm *drm = nouveau_bdev(man->bdev); struct nvkm_fb *fb = nvxx_fb(&drm->device); struct nvkm_ram *ram = nvxx_fb(&drm->device)->ram; struct nouveau_bo *nvbo = nouveau_bo(bo); struct nvkm_mem *node; u32 size_nc = 0; Loading @@ -88,7 +88,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, if (nvbo->tile_flags & NOUVEAU_GEM_TILE_NONCONTIG) size_nc = 1 << nvbo->page_shift; ret = fb->ram->get(fb, mem->num_pages << PAGE_SHIFT, ret = ram->func->get(ram, mem->num_pages << PAGE_SHIFT, mem->page_alignment << PAGE_SHIFT, size_nc, (nvbo->tile_flags >> 8) & 0x3ff, &node); if (ret) { Loading @@ -103,38 +103,11 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, return 0; } static void nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) { struct nvkm_fb *fb = man->priv; struct nvkm_mm *mm = &fb->vram; struct nvkm_mm_node *r; u32 total = 0, free = 0; mutex_lock(&nv_subdev(fb)->mutex); list_for_each_entry(r, &mm->nodes, nl_entry) { printk(KERN_DEBUG "%s %d: 0x%010llx 0x%010llx\n", prefix, r->type, ((u64)r->offset << 12), (((u64)r->offset + r->length) << 12)); total += r->length; if (!r->type) free += r->length; } mutex_unlock(&nv_subdev(fb)->mutex); printk(KERN_DEBUG "%s total: 0x%010llx free: 0x%010llx\n", prefix, (u64)total << 12, (u64)free << 12); printk(KERN_DEBUG "%s block: 0x%08x\n", prefix, mm->block_size << 12); } const struct ttm_mem_type_manager_func nouveau_vram_manager = { nouveau_vram_manager_init, nouveau_vram_manager_fini, nouveau_vram_manager_new, nouveau_vram_manager_del, nouveau_vram_manager_debug }; static int Loading
drivers/gpu/drm/nouveau/nvkm/core/mm.c +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #define node(root, dir) ((root)->nl_entry.dir == &mm->nodes) ? NULL : \ list_entry((root)->nl_entry.dir, struct nvkm_mm_node, nl_entry) static void void nvkm_mm_dump(struct nvkm_mm *mm, const char *header) { struct nvkm_mm_node *node; Loading
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv50.c +1 −1 Original line number Diff line number Diff line Loading @@ -569,7 +569,7 @@ nv50_gr_construct_mmio(struct nvkm_grctx *ctx) else if (device->chipset < 0xa0) gr_def(ctx, 0x407d08, 0x00390040); else { if (nvkm_fb(device)->ram->type != NV_MEM_TYPE_GDDR5) if (nvkm_fb(device)->ram->type != NVKM_RAM_TYPE_GDDR5) gr_def(ctx, 0x407d08, 0x003d0040); else gr_def(ctx, 0x407d08, 0x003c0040); Loading