This source file includes following definitions.
- nv36_fb_tile_comp
- nv36_fb_new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include "priv.h"
27 #include "ram.h"
28
29 static void
30 nv36_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags,
31 struct nvkm_fb_tile *tile)
32 {
33 u32 tiles = DIV_ROUND_UP(size, 0x40);
34 u32 tags = round_up(tiles / fb->ram->parts, 0x40);
35 if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) {
36 if (flags & 2) tile->zcomp |= 0x10000000;
37 else tile->zcomp |= 0x20000000;
38 tile->zcomp |= ((tile->tag->offset ) >> 6);
39 tile->zcomp |= ((tile->tag->offset + tags - 1) >> 6) << 14;
40 #ifdef __BIG_ENDIAN
41 tile->zcomp |= 0x80000000;
42 #endif
43 }
44 }
45
46 static const struct nvkm_fb_func
47 nv36_fb = {
48 .tags = nv20_fb_tags,
49 .init = nv30_fb_init,
50 .tile.regions = 8,
51 .tile.init = nv30_fb_tile_init,
52 .tile.comp = nv36_fb_tile_comp,
53 .tile.fini = nv20_fb_tile_fini,
54 .tile.prog = nv20_fb_tile_prog,
55 .ram_new = nv20_ram_new,
56 };
57
58 int
59 nv36_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb)
60 {
61 return nvkm_fb_new_(&nv36_fb, device, index, pfb);
62 }