Commit acc466ab authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/flcn/cmdq: explicitly create command queue(s) from subdevs



Code to interface with LS firmwares is being moved to the subdevs where it
belongs, rather than living in the common falcon code.

This is an incremental step towards that goal.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 8763955b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -33,4 +33,12 @@ int gp102_sec2_flcn_enable(struct nvkm_falcon *);
struct nvkm_falcon_qmgr;
int nvkm_falcon_qmgr_new(struct nvkm_falcon *, struct nvkm_falcon_qmgr **);
void nvkm_falcon_qmgr_del(struct nvkm_falcon_qmgr **);

struct nvkm_falcon_cmdq;
int nvkm_falcon_cmdq_new(struct nvkm_falcon_qmgr *, const char *name,
			 struct nvkm_falcon_cmdq **);
void nvkm_falcon_cmdq_del(struct nvkm_falcon_cmdq **);
void nvkm_falcon_cmdq_init(struct nvkm_falcon_cmdq *,
			   u32 index, u32 offset, u32 size);
void nvkm_falcon_cmdq_fini(struct nvkm_falcon_cmdq *);
#endif
+2 −0
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
#define __NVKM_SUBDEV_H__
#include <core/device.h>

#define nvkm_falcon_cmdq nvkm_msgqueue_queue

struct nvkm_subdev {
	const struct nvkm_subdev_func *func;
	struct nvkm_device *device;
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ struct nvkm_sec2 {
	struct nvkm_falcon falcon;

	struct nvkm_falcon_qmgr *qmgr;
	struct nvkm_falcon_cmdq *cmdq;
	struct nvkm_msgqueue *queue;
	struct work_struct work;
};
+2 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ struct nvkm_pmu {
	struct nvkm_falcon falcon;

	struct nvkm_falcon_qmgr *qmgr;
	struct nvkm_falcon_cmdq *hpq;
	struct nvkm_falcon_cmdq *lpq;
	struct nvkm_msgqueue *queue;

	struct {
+4 −1
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ nvkm_sec2_fini(struct nvkm_engine *engine, bool suspend)
{
	struct nvkm_sec2 *sec2 = nvkm_sec2(engine);
	flush_work(&sec2->work);
	nvkm_falcon_cmdq_fini(sec2->cmdq);
	return 0;
}

@@ -59,6 +60,7 @@ nvkm_sec2_dtor(struct nvkm_engine *engine)
{
	struct nvkm_sec2 *sec2 = nvkm_sec2(engine);
	nvkm_msgqueue_del(&sec2->queue);
	nvkm_falcon_cmdq_del(&sec2->cmdq);
	nvkm_falcon_qmgr_del(&sec2->qmgr);
	nvkm_falcon_dtor(&sec2->falcon);
	return sec2;
@@ -96,7 +98,8 @@ nvkm_sec2_new_(const struct nvkm_sec2_fwif *fwif, struct nvkm_device *device,
	if (ret)
		return ret;

	if ((ret = nvkm_falcon_qmgr_new(&sec2->falcon, &sec2->qmgr)))
	if ((ret = nvkm_falcon_qmgr_new(&sec2->falcon, &sec2->qmgr)) ||
	    (ret = nvkm_falcon_cmdq_new(sec2->qmgr, "cmdq", &sec2->cmdq)))
		return ret;

	INIT_WORK(&sec2->work, nvkm_sec2_recv);
Loading