drm/nouveau/nvif: simplify and tidy library interfaces
A variety of tweaks to the NVIF library interfaces, mostly ripping out things that turned out to be not so useful. - Removed refcounting from nvif_object, callers are expected to not be stupid instead. - nvif_client is directly reachable from anything derived from nvif_object, removing the need for heuristics to locate it - _new() versions of interfaces, that allocate memory for the object they construct, have been removed. The vast majority of callers used the embedded _init() interfaces. - No longer storing constructor arguments (and the data returned from nvkm) inside nvif_object, it's more or less unused and just wastes memory. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
这个提交包含在:
@@ -52,9 +52,9 @@ READ_GET(struct nouveau_channel *chan, uint64_t *prev_get, int *timeout)
|
||||
{
|
||||
uint64_t val;
|
||||
|
||||
val = nvif_rd32(chan, chan->user_get);
|
||||
val = nvif_rd32(&chan->user, chan->user_get);
|
||||
if (chan->user_get_hi)
|
||||
val |= (uint64_t)nvif_rd32(chan, chan->user_get_hi) << 32;
|
||||
val |= (uint64_t)nvif_rd32(&chan->user, chan->user_get_hi) << 32;
|
||||
|
||||
/* reset counter as long as GET is still advancing, this is
|
||||
* to avoid misdetecting a GPU lockup if the GPU happens to
|
||||
@@ -82,7 +82,7 @@ void
|
||||
nv50_dma_push(struct nouveau_channel *chan, struct nouveau_bo *bo,
|
||||
int delta, int length)
|
||||
{
|
||||
struct nouveau_cli *cli = (void *)nvif_client(&chan->device->base);
|
||||
struct nouveau_cli *cli = (void *)chan->user.client;
|
||||
struct nouveau_bo *pb = chan->push.buffer;
|
||||
struct nvkm_vma *vma;
|
||||
int ip = (chan->dma.ib_put * 2) + chan->dma.ib_base;
|
||||
@@ -103,7 +103,7 @@ nv50_dma_push(struct nouveau_channel *chan, struct nouveau_bo *bo,
|
||||
/* Flush writes. */
|
||||
nouveau_bo_rd32(pb, 0);
|
||||
|
||||
nvif_wr32(chan, 0x8c, chan->dma.ib_put);
|
||||
nvif_wr32(&chan->user, 0x8c, chan->dma.ib_put);
|
||||
chan->dma.ib_free--;
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ nv50_dma_push_wait(struct nouveau_channel *chan, int count)
|
||||
uint32_t cnt = 0, prev_get = 0;
|
||||
|
||||
while (chan->dma.ib_free < count) {
|
||||
uint32_t get = nvif_rd32(chan, 0x88);
|
||||
uint32_t get = nvif_rd32(&chan->user, 0x88);
|
||||
if (get != prev_get) {
|
||||
prev_get = get;
|
||||
cnt = 0;
|
||||
|
在新工单中引用
屏蔽一个用户