Lines Matching refs:ram

73 nv50_ram_timing_calc(struct nv50_ram *ram, u32 *timing)  in nv50_ram_timing_calc()  argument
75 struct nvbios_ramcfg *cfg = &ram->base.target.bios; in nv50_ram_timing_calc()
76 struct nvkm_subdev *subdev = &ram->base.fb->subdev; in nv50_ram_timing_calc()
86 switch ((!T(CWL)) * ram->base.type) { in nv50_ram_timing_calc()
97 unkt3b = 0x19 + ram->base.next->bios.rammap_00_16_40; in nv50_ram_timing_calc()
99 ram->base.next->bios.rammap_00_16_40) << 16 | in nv50_ram_timing_calc()
133 if (ram->base.type == NVKM_RAM_TYPE_DDR2) { in nv50_ram_timing_calc()
137 if (ram->base.type == NVKM_RAM_TYPE_GDDR3) { in nv50_ram_timing_calc()
151 nv50_ram_timing_read(struct nv50_ram *ram, u32 *timing) in nv50_ram_timing_read() argument
154 struct nvbios_ramcfg *cfg = &ram->base.target.bios; in nv50_ram_timing_read()
155 struct nvkm_subdev *subdev = &ram->base.fb->subdev; in nv50_ram_timing_read()
165 switch (ram->base.type) { in nv50_ram_timing_read()
221 struct nv50_ram *ram = nv50_ram(base); in nv50_ram_calc() local
222 struct nv50_ramseq *hwsq = &ram->hwsq; in nv50_ram_calc()
223 struct nvkm_subdev *subdev = &ram->base.fb->subdev; in nv50_ram_calc()
235 next = &ram->base.target; in nv50_ram_calc()
237 ram->base.next = next; in nv50_ram_calc()
277 nv50_ram_timing_calc(ram, timing); in nv50_ram_calc()
279 nv50_ram_timing_read(ram, timing); in nv50_ram_calc()
287 ram->base.mr[0] = ram_rd32(hwsq, mr[0]); in nv50_ram_calc()
288 ram->base.mr[1] = ram_rd32(hwsq, mr[1]); in nv50_ram_calc()
289 ram->base.mr[2] = ram_rd32(hwsq, mr[2]); in nv50_ram_calc()
291 switch (ram->base.type) { in nv50_ram_calc()
293 ret = nvkm_gddr3_calc(&ram->base); in nv50_ram_calc()
375 switch (ram->base.type) { in nv50_ram_calc()
382 ram_wr32(hwsq, mr[1], ram->base.mr[1]); in nv50_ram_calc()
384 ram_wr32(hwsq, mr[0], ram->base.mr[0]); in nv50_ram_calc()
454 ram_mask(hwsq, mr[1], 0xffffffff, ram->base.mr[1]); in nv50_ram_calc()
483 struct nv50_ram *ram = nv50_ram(base); in nv50_ram_prog() local
484 struct nvkm_device *device = ram->base.fb->subdev.device; in nv50_ram_prog()
485 ram_exec(&ram->hwsq, nvkm_boolopt(device->cfgopt, "NvMemExec", true)); in nv50_ram_prog()
492 struct nv50_ram *ram = nv50_ram(base); in nv50_ram_tidy() local
493 ram_exec(&ram->hwsq, false); in nv50_ram_tidy()
497 __nv50_ram_put(struct nvkm_ram *ram, struct nvkm_mem *mem) in __nv50_ram_put() argument
505 nvkm_mm_free(&ram->vram, &this); in __nv50_ram_put()
508 nvkm_mm_free(&ram->tags, &mem->tag); in __nv50_ram_put()
512 nv50_ram_put(struct nvkm_ram *ram, struct nvkm_mem **pmem) in nv50_ram_put() argument
520 mutex_lock(&ram->fb->subdev.mutex); in nv50_ram_put()
521 __nv50_ram_put(ram, mem); in nv50_ram_put()
522 mutex_unlock(&ram->fb->subdev.mutex); in nv50_ram_put()
528 nv50_ram_get(struct nvkm_ram *ram, u64 size, u32 align, u32 ncmin, in nv50_ram_get() argument
531 struct nvkm_mm *heap = &ram->vram; in nv50_ram_get()
532 struct nvkm_mm *tags = &ram->tags; in nv50_ram_get()
548 mutex_lock(&ram->fb->subdev.mutex); in nv50_ram_get()
573 mutex_unlock(&ram->fb->subdev.mutex); in nv50_ram_get()
574 ram->func->put(ram, &mem); in nv50_ram_get()
581 mutex_unlock(&ram->fb->subdev.mutex); in nv50_ram_get()
599 nv50_fb_vram_rblock(struct nvkm_ram *ram) in nv50_fb_vram_rblock() argument
601 struct nvkm_subdev *subdev = &ram->fb->subdev; in nv50_fb_vram_rblock()
618 rowsize = ram->parts * banks * (1 << colbits) * 8; in nv50_fb_vram_rblock()
623 if (predicted != ram->size) { in nv50_fb_vram_rblock()
625 (u32)(ram->size >> 20)); in nv50_fb_vram_rblock()
638 struct nvkm_fb *fb, struct nvkm_ram *ram) in nv50_ram_ctor() argument
666 ret = nvkm_ram_ctor(func, fb, type, size, tags, ram); in nv50_ram_ctor()
670 ram->part_mask = (nvkm_rd32(device, 0x001540) & 0x00ff0000) >> 16; in nv50_ram_ctor()
671 ram->parts = hweight8(ram->part_mask); in nv50_ram_ctor()
672 ram->ranks = (nvkm_rd32(device, 0x100200) & 0x4) ? 2 : 1; in nv50_ram_ctor()
673 nvkm_mm_fini(&ram->vram); in nv50_ram_ctor()
675 return nvkm_mm_init(&ram->vram, rsvd_head >> NVKM_RAM_MM_SHIFT, in nv50_ram_ctor()
677 nv50_fb_vram_rblock(ram) >> NVKM_RAM_MM_SHIFT); in nv50_ram_ctor()
683 struct nv50_ram *ram; in nv50_ram_new() local
686 if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL))) in nv50_ram_new()
688 *pram = &ram->base; in nv50_ram_new()
690 ret = nv50_ram_ctor(&nv50_ram_func, fb, &ram->base); in nv50_ram_new()
694 ram->hwsq.r_0x002504 = hwsq_reg(0x002504); in nv50_ram_new()
695 ram->hwsq.r_0x00c040 = hwsq_reg(0x00c040); in nv50_ram_new()
696 ram->hwsq.r_0x004008 = hwsq_reg(0x004008); in nv50_ram_new()
697 ram->hwsq.r_0x00400c = hwsq_reg(0x00400c); in nv50_ram_new()
698 ram->hwsq.r_0x100200 = hwsq_reg(0x100200); in nv50_ram_new()
699 ram->hwsq.r_0x100210 = hwsq_reg(0x100210); in nv50_ram_new()
700 ram->hwsq.r_0x10021c = hwsq_reg(0x10021c); in nv50_ram_new()
701 ram->hwsq.r_0x1002d0 = hwsq_reg(0x1002d0); in nv50_ram_new()
702 ram->hwsq.r_0x1002d4 = hwsq_reg(0x1002d4); in nv50_ram_new()
703 ram->hwsq.r_0x1002dc = hwsq_reg(0x1002dc); in nv50_ram_new()
704 ram->hwsq.r_0x10053c = hwsq_reg(0x10053c); in nv50_ram_new()
705 ram->hwsq.r_0x1005a0 = hwsq_reg(0x1005a0); in nv50_ram_new()
706 ram->hwsq.r_0x1005a4 = hwsq_reg(0x1005a4); in nv50_ram_new()
707 ram->hwsq.r_0x100710 = hwsq_reg(0x100710); in nv50_ram_new()
708 ram->hwsq.r_0x100714 = hwsq_reg(0x100714); in nv50_ram_new()
709 ram->hwsq.r_0x100718 = hwsq_reg(0x100718); in nv50_ram_new()
710 ram->hwsq.r_0x10071c = hwsq_reg(0x10071c); in nv50_ram_new()
711 ram->hwsq.r_0x100da0 = hwsq_stride(0x100da0, 4, ram->base.part_mask); in nv50_ram_new()
712 ram->hwsq.r_0x100e20 = hwsq_reg(0x100e20); in nv50_ram_new()
713 ram->hwsq.r_0x100e24 = hwsq_reg(0x100e24); in nv50_ram_new()
714 ram->hwsq.r_0x611200 = hwsq_reg(0x611200); in nv50_ram_new()
717 ram->hwsq.r_timing[i] = hwsq_reg(0x100220 + (i * 0x04)); in nv50_ram_new()
719 if (ram->base.ranks > 1) { in nv50_ram_new()
720 ram->hwsq.r_mr[0] = hwsq_reg2(0x1002c0, 0x1002c8); in nv50_ram_new()
721 ram->hwsq.r_mr[1] = hwsq_reg2(0x1002c4, 0x1002cc); in nv50_ram_new()
722 ram->hwsq.r_mr[2] = hwsq_reg2(0x1002e0, 0x1002e8); in nv50_ram_new()
723 ram->hwsq.r_mr[3] = hwsq_reg2(0x1002e4, 0x1002ec); in nv50_ram_new()
725 ram->hwsq.r_mr[0] = hwsq_reg(0x1002c0); in nv50_ram_new()
726 ram->hwsq.r_mr[1] = hwsq_reg(0x1002c4); in nv50_ram_new()
727 ram->hwsq.r_mr[2] = hwsq_reg(0x1002e0); in nv50_ram_new()
728 ram->hwsq.r_mr[3] = hwsq_reg(0x1002e4); in nv50_ram_new()
731 ram->hwsq.r_gpio[0] = hwsq_reg(0x00e104); in nv50_ram_new()
732 ram->hwsq.r_gpio[1] = hwsq_reg(0x00e108); in nv50_ram_new()
733 ram->hwsq.r_gpio[2] = hwsq_reg(0x00e120); in nv50_ram_new()
734 ram->hwsq.r_gpio[3] = hwsq_reg(0x00e124); in nv50_ram_new()