|
@@ -24,7 +24,7 @@
|
|
#include <subdev/bus.h>
|
|
#include <subdev/bus.h>
|
|
|
|
|
|
struct nvkm_hwsq {
|
|
struct nvkm_hwsq {
|
|
- struct nvkm_bus *pbus;
|
|
|
|
|
|
+ struct nvkm_bus *bus;
|
|
u32 addr;
|
|
u32 addr;
|
|
u32 data;
|
|
u32 data;
|
|
struct {
|
|
struct {
|
|
@@ -41,13 +41,13 @@ hwsq_cmd(struct nvkm_hwsq *hwsq, int size, u8 data[])
|
|
}
|
|
}
|
|
|
|
|
|
int
|
|
int
|
|
-nvkm_hwsq_init(struct nvkm_bus *pbus, struct nvkm_hwsq **phwsq)
|
|
|
|
|
|
+nvkm_hwsq_init(struct nvkm_bus *bus, struct nvkm_hwsq **phwsq)
|
|
{
|
|
{
|
|
struct nvkm_hwsq *hwsq;
|
|
struct nvkm_hwsq *hwsq;
|
|
|
|
|
|
hwsq = *phwsq = kmalloc(sizeof(*hwsq), GFP_KERNEL);
|
|
hwsq = *phwsq = kmalloc(sizeof(*hwsq), GFP_KERNEL);
|
|
if (hwsq) {
|
|
if (hwsq) {
|
|
- hwsq->pbus = pbus;
|
|
|
|
|
|
+ hwsq->bus = bus;
|
|
hwsq->addr = ~0;
|
|
hwsq->addr = ~0;
|
|
hwsq->data = ~0;
|
|
hwsq->data = ~0;
|
|
memset(hwsq->c.data, 0x7f, sizeof(hwsq->c.data));
|
|
memset(hwsq->c.data, 0x7f, sizeof(hwsq->c.data));
|
|
@@ -63,21 +63,21 @@ nvkm_hwsq_fini(struct nvkm_hwsq **phwsq, bool exec)
|
|
struct nvkm_hwsq *hwsq = *phwsq;
|
|
struct nvkm_hwsq *hwsq = *phwsq;
|
|
int ret = 0, i;
|
|
int ret = 0, i;
|
|
if (hwsq) {
|
|
if (hwsq) {
|
|
- struct nvkm_bus *pbus = hwsq->pbus;
|
|
|
|
|
|
+ struct nvkm_bus *bus = hwsq->bus;
|
|
hwsq->c.size = (hwsq->c.size + 4) / 4;
|
|
hwsq->c.size = (hwsq->c.size + 4) / 4;
|
|
- if (hwsq->c.size <= pbus->hwsq_size) {
|
|
|
|
|
|
+ if (hwsq->c.size <= bus->hwsq_size) {
|
|
if (exec)
|
|
if (exec)
|
|
- ret = pbus->hwsq_exec(pbus, (u32 *)hwsq->c.data,
|
|
|
|
|
|
+ ret = bus->hwsq_exec(bus, (u32 *)hwsq->c.data,
|
|
hwsq->c.size);
|
|
hwsq->c.size);
|
|
if (ret)
|
|
if (ret)
|
|
- nv_error(pbus, "hwsq exec failed: %d\n", ret);
|
|
|
|
|
|
+ nv_error(bus, "hwsq exec failed: %d\n", ret);
|
|
} else {
|
|
} else {
|
|
- nv_error(pbus, "hwsq ucode too large\n");
|
|
|
|
|
|
+ nv_error(bus, "hwsq ucode too large\n");
|
|
ret = -ENOSPC;
|
|
ret = -ENOSPC;
|
|
}
|
|
}
|
|
|
|
|
|
for (i = 0; ret && i < hwsq->c.size; i++)
|
|
for (i = 0; ret && i < hwsq->c.size; i++)
|
|
- nv_error(pbus, "\t0x%08x\n", ((u32 *)hwsq->c.data)[i]);
|
|
|
|
|
|
+ nv_error(bus, "\t0x%08x\n", ((u32 *)hwsq->c.data)[i]);
|
|
|
|
|
|
*phwsq = NULL;
|
|
*phwsq = NULL;
|
|
kfree(hwsq);
|
|
kfree(hwsq);
|
|
@@ -88,7 +88,7 @@ nvkm_hwsq_fini(struct nvkm_hwsq **phwsq, bool exec)
|
|
void
|
|
void
|
|
nvkm_hwsq_wr32(struct nvkm_hwsq *hwsq, u32 addr, u32 data)
|
|
nvkm_hwsq_wr32(struct nvkm_hwsq *hwsq, u32 addr, u32 data)
|
|
{
|
|
{
|
|
- nv_debug(hwsq->pbus, "R[%06x] = 0x%08x\n", addr, data);
|
|
|
|
|
|
+ nv_debug(hwsq->bus, "R[%06x] = 0x%08x\n", addr, data);
|
|
|
|
|
|
if (hwsq->data != data) {
|
|
if (hwsq->data != data) {
|
|
if ((data & 0xffff0000) != (hwsq->data & 0xffff0000)) {
|
|
if ((data & 0xffff0000) != (hwsq->data & 0xffff0000)) {
|
|
@@ -113,7 +113,7 @@ nvkm_hwsq_wr32(struct nvkm_hwsq *hwsq, u32 addr, u32 data)
|
|
void
|
|
void
|
|
nvkm_hwsq_setf(struct nvkm_hwsq *hwsq, u8 flag, int data)
|
|
nvkm_hwsq_setf(struct nvkm_hwsq *hwsq, u8 flag, int data)
|
|
{
|
|
{
|
|
- nv_debug(hwsq->pbus, " FLAG[%02x] = %d\n", flag, data);
|
|
|
|
|
|
+ nv_debug(hwsq->bus, " FLAG[%02x] = %d\n", flag, data);
|
|
flag += 0x80;
|
|
flag += 0x80;
|
|
if (data >= 0)
|
|
if (data >= 0)
|
|
flag += 0x20;
|
|
flag += 0x20;
|
|
@@ -125,7 +125,7 @@ nvkm_hwsq_setf(struct nvkm_hwsq *hwsq, u8 flag, int data)
|
|
void
|
|
void
|
|
nvkm_hwsq_wait(struct nvkm_hwsq *hwsq, u8 flag, u8 data)
|
|
nvkm_hwsq_wait(struct nvkm_hwsq *hwsq, u8 flag, u8 data)
|
|
{
|
|
{
|
|
- nv_debug(hwsq->pbus, " WAIT[%02x] = %d\n", flag, data);
|
|
|
|
|
|
+ nv_debug(hwsq->bus, " WAIT[%02x] = %d\n", flag, data);
|
|
hwsq_cmd(hwsq, 3, (u8[]){ 0x5f, flag, data });
|
|
hwsq_cmd(hwsq, 3, (u8[]){ 0x5f, flag, data });
|
|
}
|
|
}
|
|
|
|
|
|
@@ -138,6 +138,6 @@ nvkm_hwsq_nsec(struct nvkm_hwsq *hwsq, u32 nsec)
|
|
shift++;
|
|
shift++;
|
|
}
|
|
}
|
|
|
|
|
|
- nv_debug(hwsq->pbus, " DELAY = %d ns\n", nsec);
|
|
|
|
|
|
+ nv_debug(hwsq->bus, " DELAY = %d ns\n", nsec);
|
|
hwsq_cmd(hwsq, 1, (u8[]){ 0x00 | (shift << 2) | usec });
|
|
hwsq_cmd(hwsq, 1, (u8[]){ 0x00 | (shift << 2) | usec });
|
|
}
|
|
}
|