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

Commit 1f150b3e authored by Marcin Slusarz's avatar Marcin Slusarz Committed by Ben Skeggs
Browse files

drm/nv40: allocate ctxprog with kmalloc



Some archs defconfigs have CONFIG_FRAME_WARN set to 1024, which lead to this
warning:
drivers/gpu/drm/nouveau/core/engine/graph/ctxnv40.c: warning: the frame size
of 1184 bytes is larger than 1024 bytes

Reported-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarMarcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 4113014f
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -669,21 +669,27 @@ nv40_grctx_fill(struct nouveau_device *device, struct nouveau_gpuobj *mem)
			   });
}

void
int
nv40_grctx_init(struct nouveau_device *device, u32 *size)
{
	u32 ctxprog[256], i;
	u32 *ctxprog = kmalloc(256 * 4, GFP_KERNEL), i;
	struct nouveau_grctx ctx = {
		.device = device,
		.mode = NOUVEAU_GRCTX_PROG,
		.data = ctxprog,
		.ctxprog_max = ARRAY_SIZE(ctxprog)
		.ctxprog_max = 256,
	};

	if (!ctxprog)
		return -ENOMEM;

	nv40_grctx_generate(&ctx);

	nv_wr32(device, 0x400324, 0);
	for (i = 0; i < ctx.ctxprog_len; i++)
		nv_wr32(device, 0x400328, ctxprog[i]);
	*size = ctx.ctxvals_pos * 4;

	kfree(ctxprog);
	return 0;
}
+3 −1
Original line number Diff line number Diff line
@@ -346,7 +346,9 @@ nv40_graph_init(struct nouveau_object *object)
		return ret;

	/* generate and upload context program */
	nv40_grctx_init(nv_device(priv), &priv->size);
	ret = nv40_grctx_init(nv_device(priv), &priv->size);
	if (ret)
		return ret;

	/* No context present currently */
	nv_wr32(priv, NV40_PGRAPH_CTXCTL_CUR, 0x00000000);
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ nv44_graph_class(void *priv)
	return !(0x0baf & (1 << (device->chipset & 0x0f)));
}

void nv40_grctx_init(struct nouveau_device *, u32 *size);
int  nv40_grctx_init(struct nouveau_device *, u32 *size);
void nv40_grctx_fill(struct nouveau_device *, struct nouveau_gpuobj *);

#endif