Lines Matching refs:hwsq

37 hwsq_cmd(struct nvkm_hwsq *hwsq, int size, u8 data[])  in hwsq_cmd()  argument
39 memcpy(&hwsq->c.data[hwsq->c.size], data, size * sizeof(data[0])); in hwsq_cmd()
40 hwsq->c.size += size; in hwsq_cmd()
46 struct nvkm_hwsq *hwsq; in nvkm_hwsq_init() local
48 hwsq = *phwsq = kmalloc(sizeof(*hwsq), GFP_KERNEL); in nvkm_hwsq_init()
49 if (hwsq) { in nvkm_hwsq_init()
50 hwsq->pbus = pbus; in nvkm_hwsq_init()
51 hwsq->addr = ~0; in nvkm_hwsq_init()
52 hwsq->data = ~0; in nvkm_hwsq_init()
53 memset(hwsq->c.data, 0x7f, sizeof(hwsq->c.data)); in nvkm_hwsq_init()
54 hwsq->c.size = 0; in nvkm_hwsq_init()
57 return hwsq ? 0 : -ENOMEM; in nvkm_hwsq_init()
63 struct nvkm_hwsq *hwsq = *phwsq; in nvkm_hwsq_fini() local
65 if (hwsq) { in nvkm_hwsq_fini()
66 struct nvkm_bus *pbus = hwsq->pbus; in nvkm_hwsq_fini()
67 hwsq->c.size = (hwsq->c.size + 4) / 4; in nvkm_hwsq_fini()
68 if (hwsq->c.size <= pbus->hwsq_size) { in nvkm_hwsq_fini()
70 ret = pbus->hwsq_exec(pbus, (u32 *)hwsq->c.data, in nvkm_hwsq_fini()
71 hwsq->c.size); in nvkm_hwsq_fini()
79 for (i = 0; ret && i < hwsq->c.size; i++) in nvkm_hwsq_fini()
80 nv_error(pbus, "\t0x%08x\n", ((u32 *)hwsq->c.data)[i]); in nvkm_hwsq_fini()
83 kfree(hwsq); in nvkm_hwsq_fini()
89 nvkm_hwsq_wr32(struct nvkm_hwsq *hwsq, u32 addr, u32 data) in nvkm_hwsq_wr32() argument
91 nv_debug(hwsq->pbus, "R[%06x] = 0x%08x\n", addr, data); in nvkm_hwsq_wr32()
93 if (hwsq->data != data) { in nvkm_hwsq_wr32()
94 if ((data & 0xffff0000) != (hwsq->data & 0xffff0000)) { in nvkm_hwsq_wr32()
95 hwsq_cmd(hwsq, 5, (u8[]){ 0xe2, data, data >> 8, in nvkm_hwsq_wr32()
98 hwsq_cmd(hwsq, 3, (u8[]){ 0x42, data, data >> 8 }); in nvkm_hwsq_wr32()
102 if ((addr & 0xffff0000) != (hwsq->addr & 0xffff0000)) { in nvkm_hwsq_wr32()
103 hwsq_cmd(hwsq, 5, (u8[]){ 0xe0, addr, addr >> 8, in nvkm_hwsq_wr32()
106 hwsq_cmd(hwsq, 3, (u8[]){ 0x40, addr, addr >> 8 }); in nvkm_hwsq_wr32()
109 hwsq->addr = addr; in nvkm_hwsq_wr32()
110 hwsq->data = data; in nvkm_hwsq_wr32()
114 nvkm_hwsq_setf(struct nvkm_hwsq *hwsq, u8 flag, int data) in nvkm_hwsq_setf() argument
116 nv_debug(hwsq->pbus, " FLAG[%02x] = %d\n", flag, data); in nvkm_hwsq_setf()
122 hwsq_cmd(hwsq, 1, (u8[]){ flag }); in nvkm_hwsq_setf()
126 nvkm_hwsq_wait(struct nvkm_hwsq *hwsq, u8 flag, u8 data) in nvkm_hwsq_wait() argument
128 nv_debug(hwsq->pbus, " WAIT[%02x] = %d\n", flag, data); in nvkm_hwsq_wait()
129 hwsq_cmd(hwsq, 3, (u8[]){ 0x5f, flag, data }); in nvkm_hwsq_wait()
133 nvkm_hwsq_nsec(struct nvkm_hwsq *hwsq, u32 nsec) in nvkm_hwsq_nsec() argument
141 nv_debug(hwsq->pbus, " DELAY = %d ns\n", nsec); in nvkm_hwsq_nsec()
142 hwsq_cmd(hwsq, 1, (u8[]){ 0x00 | (shift << 2) | usec }); in nvkm_hwsq_nsec()