drm/nouveau/imem: use object accessor function for suspend/resume
Very much not ideal, but this will be improved later. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
cfdc4c44b4
commit
95cf469cc3
|
@ -138,51 +138,4 @@ nv_call(void *obj, u32 mthd, u32 data)
|
||||||
{
|
{
|
||||||
return nv_exec(obj, mthd, &data, sizeof(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
|
#endif
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <core/subdev.h>
|
#include <core/subdev.h>
|
||||||
|
|
||||||
struct nvkm_instobj {
|
struct nvkm_instobj {
|
||||||
struct nvkm_object base;
|
struct nvkm_object object;
|
||||||
struct list_head head;
|
struct list_head head;
|
||||||
u32 *suspend;
|
u32 *suspend;
|
||||||
u64 addr;
|
u64 addr;
|
||||||
|
|
|
@ -39,7 +39,7 @@ _nvkm_instobj_dtor(struct nvkm_object *object)
|
||||||
list_del(&iobj->head);
|
list_del(&iobj->head);
|
||||||
mutex_unlock(&nv_subdev(imem)->mutex);
|
mutex_unlock(&nv_subdev(imem)->mutex);
|
||||||
|
|
||||||
return nvkm_object_destroy(&iobj->base);
|
return nvkm_object_destroy(&iobj->object);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -92,8 +92,10 @@ _nvkm_instmem_fini(struct nvkm_object *object, bool suspend)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < iobj->size; i += 4)
|
for (i = 0; i < iobj->size; i += 4) {
|
||||||
iobj->suspend[i / 4] = nv_ro32(iobj, i);
|
nvkm_object_rd32(&iobj->object, i, (u32 *)
|
||||||
|
&iobj->suspend[i/4]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mutex_unlock(&imem->subdev.mutex);
|
mutex_unlock(&imem->subdev.mutex);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -117,8 +119,10 @@ _nvkm_instmem_init(struct nvkm_object *object)
|
||||||
mutex_lock(&imem->subdev.mutex);
|
mutex_lock(&imem->subdev.mutex);
|
||||||
list_for_each_entry(iobj, &imem->list, head) {
|
list_for_each_entry(iobj, &imem->list, head) {
|
||||||
if (iobj->suspend) {
|
if (iobj->suspend) {
|
||||||
for (i = 0; i < iobj->size; i += 4)
|
for (i = 0; i < iobj->size; i += 4) {
|
||||||
nv_wo32(iobj, i, iobj->suspend[i / 4]);
|
nvkm_object_wr32(&iobj->object, i, *(u32 *)
|
||||||
|
&iobj->suspend[i/4]);
|
||||||
|
}
|
||||||
vfree(iobj->suspend);
|
vfree(iobj->suspend);
|
||||||
iobj->suspend = NULL;
|
iobj->suspend = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue