1 #ifndef __NVKM_FBRAM_FUC_H__
2 #define __NVKM_FBRAM_FUC_H__
4 #include <subdev/pmu.h>
7 struct nvkm_memx
*memx
;
16 u32 stride
; /* in bytes */
21 static inline struct ramfuc_reg
22 ramfuc_stride(u32 addr
, u32 stride
, u32 mask
)
24 return (struct ramfuc_reg
) {
33 static inline struct ramfuc_reg
34 ramfuc_reg2(u32 addr1
, u32 addr2
)
36 return (struct ramfuc_reg
) {
39 .stride
= addr2
- addr1
,
45 static noinline
struct ramfuc_reg
48 return (struct ramfuc_reg
) {
58 ramfuc_init(struct ramfuc
*ram
, struct nvkm_fb
*fb
)
60 struct nvkm_pmu
*pmu
= nvkm_pmu(fb
);
63 ret
= nvkm_memx_init(pmu
, &ram
->memx
);
73 ramfuc_exec(struct ramfuc
*ram
, bool exec
)
77 ret
= nvkm_memx_fini(&ram
->memx
, exec
);
84 ramfuc_rd32(struct ramfuc
*ram
, struct ramfuc_reg
*reg
)
86 struct nvkm_device
*device
= ram
->fb
->subdev
.device
;
87 if (reg
->sequence
!= ram
->sequence
)
88 reg
->data
= nvkm_rd32(device
, reg
->addr
);
93 ramfuc_wr32(struct ramfuc
*ram
, struct ramfuc_reg
*reg
, u32 data
)
95 unsigned int mask
, off
= 0;
97 reg
->sequence
= ram
->sequence
;
100 for (mask
= reg
->mask
; mask
> 0; mask
= (mask
& ~1) >> 1) {
102 nvkm_memx_wr32(ram
->memx
, reg
->addr
+off
, reg
->data
);
108 ramfuc_nuke(struct ramfuc
*ram
, struct ramfuc_reg
*reg
)
114 ramfuc_mask(struct ramfuc
*ram
, struct ramfuc_reg
*reg
, u32 mask
, u32 data
)
116 u32 temp
= ramfuc_rd32(ram
, reg
);
117 if (temp
!= ((temp
& ~mask
) | data
) || reg
->force
) {
118 ramfuc_wr32(ram
, reg
, (temp
& ~mask
) | data
);
125 ramfuc_wait(struct ramfuc
*ram
, u32 addr
, u32 mask
, u32 data
, u32 nsec
)
127 nvkm_memx_wait(ram
->memx
, addr
, mask
, data
, nsec
);
131 ramfuc_nsec(struct ramfuc
*ram
, u32 nsec
)
133 nvkm_memx_nsec(ram
->memx
, nsec
);
137 ramfuc_wait_vblank(struct ramfuc
*ram
)
139 nvkm_memx_wait_vblank(ram
->memx
);
143 ramfuc_train(struct ramfuc
*ram
)
145 nvkm_memx_train(ram
->memx
);
149 ramfuc_train_result(struct nvkm_fb
*fb
, u32
*result
, u32 rsize
)
151 struct nvkm_pmu
*pmu
= nvkm_pmu(fb
);
153 return nvkm_memx_train_result(pmu
, result
, rsize
);
157 ramfuc_block(struct ramfuc
*ram
)
159 nvkm_memx_block(ram
->memx
);
163 ramfuc_unblock(struct ramfuc
*ram
)
165 nvkm_memx_unblock(ram
->memx
);
168 #define ram_init(s,p) ramfuc_init(&(s)->base, (p))
169 #define ram_exec(s,e) ramfuc_exec(&(s)->base, (e))
170 #define ram_have(s,r) ((s)->r_##r.addr != 0x000000)
171 #define ram_rd32(s,r) ramfuc_rd32(&(s)->base, &(s)->r_##r)
172 #define ram_wr32(s,r,d) ramfuc_wr32(&(s)->base, &(s)->r_##r, (d))
173 #define ram_nuke(s,r) ramfuc_nuke(&(s)->base, &(s)->r_##r)
174 #define ram_mask(s,r,m,d) ramfuc_mask(&(s)->base, &(s)->r_##r, (m), (d))
175 #define ram_wait(s,r,m,d,n) ramfuc_wait(&(s)->base, (r), (m), (d), (n))
176 #define ram_nsec(s,n) ramfuc_nsec(&(s)->base, (n))
177 #define ram_wait_vblank(s) ramfuc_wait_vblank(&(s)->base)
178 #define ram_train(s) ramfuc_train(&(s)->base)
179 #define ram_train_result(s,r,l) ramfuc_train_result((s), (r), (l))
180 #define ram_block(s) ramfuc_block(&(s)->base)
181 #define ram_unblock(s) ramfuc_unblock(&(s)->base)
This page took 0.034365 seconds and 6 git commands to generate.