]>
git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.h
1 #ifndef __NVKM_BUS_HWSQ_H__
2 #define __NVKM_BUS_HWSQ_H__
3 #include <subdev/bus.h>
6 struct nvkm_subdev
*subdev
;
7 struct nvkm_hwsq
*hwsq
;
15 u32 stride
; /* in bytes */
20 static inline struct hwsq_reg
21 hwsq_stride(u32 addr
, u32 stride
, u32 mask
)
23 return (struct hwsq_reg
) {
33 static inline struct hwsq_reg
34 hwsq_reg2(u32 addr1
, u32 addr2
)
36 return (struct hwsq_reg
) {
40 .stride
= addr2
- addr1
,
46 static inline struct hwsq_reg
49 return (struct hwsq_reg
) {
60 hwsq_init(struct hwsq
*ram
, struct nvkm_subdev
*subdev
)
62 struct nvkm_bus
*pbus
= nvkm_bus(subdev
);
65 ret
= nvkm_hwsq_init(pbus
, &ram
->hwsq
);
75 hwsq_exec(struct hwsq
*ram
, bool exec
)
79 ret
= nvkm_hwsq_fini(&ram
->hwsq
, exec
);
86 hwsq_rd32(struct hwsq
*ram
, struct hwsq_reg
*reg
)
88 if (reg
->sequence
!= ram
->sequence
)
89 reg
->data
= nv_rd32(ram
->subdev
, reg
->addr
);
94 hwsq_wr32(struct hwsq
*ram
, struct hwsq_reg
*reg
, u32 data
)
98 reg
->sequence
= ram
->sequence
;
101 for (mask
= reg
->mask
; mask
> 0; mask
= (mask
& ~1) >> 1) {
103 nvkm_hwsq_wr32(ram
->hwsq
, reg
->addr
+off
, reg
->data
);
110 hwsq_nuke(struct hwsq
*ram
, struct hwsq_reg
*reg
)
116 hwsq_mask(struct hwsq
*ram
, struct hwsq_reg
*reg
, u32 mask
, u32 data
)
118 u32 temp
= hwsq_rd32(ram
, reg
);
119 if (temp
!= ((temp
& ~mask
) | data
) || reg
->force
)
120 hwsq_wr32(ram
, reg
, (temp
& ~mask
) | data
);
125 hwsq_setf(struct hwsq
*ram
, u8 flag
, int data
)
127 nvkm_hwsq_setf(ram
->hwsq
, flag
, data
);
131 hwsq_wait(struct hwsq
*ram
, u8 flag
, u8 data
)
133 nvkm_hwsq_wait(ram
->hwsq
, flag
, data
);
137 hwsq_nsec(struct hwsq
*ram
, u32 nsec
)
139 nvkm_hwsq_nsec(ram
->hwsq
, nsec
);