drm/nouveau/kms/nv50-: fix case where notifier buffer is at offset 0
[ Upstream commit caeb6ab899
]
VRAM offset 0 is a valid address, triggered on GA102.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
5.4-rM2-2.2.x-imx-squashed
parent
af91a2e7fb
commit
73a2291199
|
@ -132,7 +132,7 @@ nv50_dmac_destroy(struct nv50_dmac *dmac)
|
||||||
|
|
||||||
int
|
int
|
||||||
nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
||||||
const s32 *oclass, u8 head, void *data, u32 size, u64 syncbuf,
|
const s32 *oclass, u8 head, void *data, u32 size, s64 syncbuf,
|
||||||
struct nv50_dmac *dmac)
|
struct nv50_dmac *dmac)
|
||||||
{
|
{
|
||||||
struct nouveau_cli *cli = (void *)device->object.client;
|
struct nouveau_cli *cli = (void *)device->object.client;
|
||||||
|
@ -167,7 +167,7 @@ nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!syncbuf)
|
if (syncbuf < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = nvif_object_init(&dmac->base.user, 0xf0000000, NV_DMA_IN_MEMORY,
|
ret = nvif_object_init(&dmac->base.user, 0xf0000000, NV_DMA_IN_MEMORY,
|
||||||
|
|
|
@ -70,7 +70,7 @@ struct nv50_dmac {
|
||||||
|
|
||||||
int nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
int nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
||||||
const s32 *oclass, u8 head, void *data, u32 size,
|
const s32 *oclass, u8 head, void *data, u32 size,
|
||||||
u64 syncbuf, struct nv50_dmac *dmac);
|
s64 syncbuf, struct nv50_dmac *dmac);
|
||||||
void nv50_dmac_destroy(struct nv50_dmac *);
|
void nv50_dmac_destroy(struct nv50_dmac *);
|
||||||
|
|
||||||
u32 *evo_wait(struct nv50_dmac *, int nr);
|
u32 *evo_wait(struct nv50_dmac *, int nr);
|
||||||
|
|
|
@ -68,7 +68,7 @@ wimmc37b_init_(const struct nv50_wimm_func *func, struct nouveau_drm *drm,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = nv50_dmac_create(&drm->client.device, &disp->disp->object,
|
ret = nv50_dmac_create(&drm->client.device, &disp->disp->object,
|
||||||
&oclass, 0, &args, sizeof(args), 0,
|
&oclass, 0, &args, sizeof(args), -1,
|
||||||
&wndw->wimm);
|
&wndw->wimm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
NV_ERROR(drm, "wimm%04x allocation failed: %d\n", oclass, ret);
|
NV_ERROR(drm, "wimm%04x allocation failed: %d\n", oclass, ret);
|
||||||
|
|
Loading…
Reference in New Issue