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

Commit 95cf469c authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/imem: use object accessor function for suspend/resume



Very much not ideal, but this will be improved later.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent cfdc4c44
Loading
Loading
Loading
Loading
+0 −47
Original line number Diff line number Diff line
@@ -138,51 +138,4 @@ nv_call(void *obj, u32 mthd, u32 data)
{
	return nv_exec(obj, mthd, &data, sizeof(data));
}

static inline u8
nv_ro08(void *obj, u64 addr)
{
	u8 data = nv_ofuncs(obj)->rd08(obj, addr);
	return data;
}

static inline u16
nv_ro16(void *obj, u64 addr)
{
	u16 data = nv_ofuncs(obj)->rd16(obj, addr);
	return data;
}

static inline u32
nv_ro32(void *obj, u64 addr)
{
	u32 data = nv_ofuncs(obj)->rd32(obj, addr);
	return data;
}

static inline void
nv_wo08(void *obj, u64 addr, u8 data)
{
	nv_ofuncs(obj)->wr08(obj, addr, data);
}

static inline void
nv_wo16(void *obj, u64 addr, u16 data)
{
	nv_ofuncs(obj)->wr16(obj, addr, data);
}

static inline void
nv_wo32(void *obj, u64 addr, u32 data)
{
	nv_ofuncs(obj)->wr32(obj, addr, data);
}

static inline u32
nv_mo32(void *obj, u64 addr, u32 mask, u32 data)
{
	u32 temp = nv_ro32(obj, addr);
	nv_wo32(obj, addr, (temp & ~mask) | data);
	return temp;
}
#endif
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#include <core/subdev.h>

struct nvkm_instobj {
	struct nvkm_object base;
	struct nvkm_object object;
	struct list_head head;
	u32 *suspend;
	u64 addr;
+9 −5
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ _nvkm_instobj_dtor(struct nvkm_object *object)
	list_del(&iobj->head);
	mutex_unlock(&nv_subdev(imem)->mutex);

	return nvkm_object_destroy(&iobj->base);
	return nvkm_object_destroy(&iobj->object);
}

int
@@ -92,8 +92,10 @@ _nvkm_instmem_fini(struct nvkm_object *object, bool suspend)
				break;
			}

			for (i = 0; i < iobj->size; i += 4)
				iobj->suspend[i / 4] = nv_ro32(iobj, i);
			for (i = 0; i < iobj->size; i += 4) {
				nvkm_object_rd32(&iobj->object, i, (u32 *)
						 &iobj->suspend[i/4]);
			}
		}
		mutex_unlock(&imem->subdev.mutex);
		if (ret)
@@ -117,8 +119,10 @@ _nvkm_instmem_init(struct nvkm_object *object)
	mutex_lock(&imem->subdev.mutex);
	list_for_each_entry(iobj, &imem->list, head) {
		if (iobj->suspend) {
			for (i = 0; i < iobj->size; i += 4)
				nv_wo32(iobj, i, iobj->suspend[i / 4]);
			for (i = 0; i < iobj->size; i += 4) {
				nvkm_object_wr32(&iobj->object, i, *(u32 *)
						 &iobj->suspend[i/4]);
			}
			vfree(iobj->suspend);
			iobj->suspend = NULL;
		}