Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 036a12b6
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -66,15 +66,29 @@ static int
nv50_chan_create(struct nvif_object *disp, const u32 *oclass, u8 head,
		 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]) {
		int ret = nvif_object_init(disp, NULL, (oclass[0] << 16) | head,
		for (i = 0; i < ARRAY_SIZE(sclass); i++) {
			if (sclass[i] == oclass[0]) {
				ret = nvif_object_init(disp, NULL, handle,
						       oclass[0], data, size,
						       &chan->user);
		if (oclass++, ret == 0) {
				if (ret == 0)
					nvif_object_map(&chan->user);
				return ret;
			}
		}
		oclass++;
	}

	return -ENOSYS;
}