Commit 6af5289e authored by Ben Skeggs's avatar Ben Skeggs

drm/nv50/kms: use sclass() instead of trial-and-error

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 036a12b6
...@@ -66,15 +66,29 @@ static int ...@@ -66,15 +66,29 @@ static int
nv50_chan_create(struct nvif_object *disp, const u32 *oclass, u8 head, nv50_chan_create(struct nvif_object *disp, const u32 *oclass, u8 head,
void *data, u32 size, struct nv50_chan *chan) void *data, u32 size, struct nv50_chan *chan)
{ {
const u32 handle = (oclass[0] << 16) | head;
u32 sclass[8];
int ret, i;
ret = nvif_object_sclass(disp, sclass, ARRAY_SIZE(sclass));
WARN_ON(ret > ARRAY_SIZE(sclass));
if (ret < 0)
return ret;
while (oclass[0]) { while (oclass[0]) {
int ret = nvif_object_init(disp, NULL, (oclass[0] << 16) | head, for (i = 0; i < ARRAY_SIZE(sclass); i++) {
oclass[0], data, size, if (sclass[i] == oclass[0]) {
&chan->user); ret = nvif_object_init(disp, NULL, handle,
if (oclass++, ret == 0) { oclass[0], data, size,
nvif_object_map(&chan->user); &chan->user);
return ret; if (ret == 0)
nvif_object_map(&chan->user);
return ret;
}
} }
oclass++;
} }
return -ENOSYS; return -ENOSYS;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment