aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/disp/nv50.c15
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/disp/nv50.h1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c5
-rw-r--r--drivers/gpu/drm/nouveau/nv50_display.c4
4 files changed, 24 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
index 8dafd4106568..858386bdd4bd 100644
--- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
+++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
@@ -82,6 +82,16 @@ nv50_disp_chan_destroy(struct nv50_disp_chan *chan)
82 nouveau_namedb_destroy(&chan->base); 82 nouveau_namedb_destroy(&chan->base);
83} 83}
84 84
85int
86nv50_disp_chan_map(struct nouveau_object *object, u64 *addr, u32 *size)
87{
88 struct nv50_disp_chan *chan = (void *)object;
89 *addr = nv_device_resource_start(nv_device(object), 0) +
90 0x640000 + (chan->chid * 0x1000);
91 *size = 0x001000;
92 return 0;
93}
94
85u32 95u32
86nv50_disp_chan_rd32(struct nouveau_object *object, u64 addr) 96nv50_disp_chan_rd32(struct nouveau_object *object, u64 addr)
87{ 97{
@@ -496,6 +506,7 @@ nv50_disp_mast_ofuncs = {
496 .base.dtor = nv50_disp_dmac_dtor, 506 .base.dtor = nv50_disp_dmac_dtor,
497 .base.init = nv50_disp_mast_init, 507 .base.init = nv50_disp_mast_init,
498 .base.fini = nv50_disp_mast_fini, 508 .base.fini = nv50_disp_mast_fini,
509 .base.map = nv50_disp_chan_map,
499 .base.rd32 = nv50_disp_chan_rd32, 510 .base.rd32 = nv50_disp_chan_rd32,
500 .base.wr32 = nv50_disp_chan_wr32, 511 .base.wr32 = nv50_disp_chan_wr32,
501 .chid = 0, 512 .chid = 0,
@@ -596,6 +607,7 @@ nv50_disp_sync_ofuncs = {
596 .base.dtor = nv50_disp_dmac_dtor, 607 .base.dtor = nv50_disp_dmac_dtor,
597 .base.init = nv50_disp_dmac_init, 608 .base.init = nv50_disp_dmac_init,
598 .base.fini = nv50_disp_dmac_fini, 609 .base.fini = nv50_disp_dmac_fini,
610 .base.map = nv50_disp_chan_map,
599 .base.rd32 = nv50_disp_chan_rd32, 611 .base.rd32 = nv50_disp_chan_rd32,
600 .base.wr32 = nv50_disp_chan_wr32, 612 .base.wr32 = nv50_disp_chan_wr32,
601 .chid = 1, 613 .chid = 1,
@@ -684,6 +696,7 @@ nv50_disp_ovly_ofuncs = {
684 .base.dtor = nv50_disp_dmac_dtor, 696 .base.dtor = nv50_disp_dmac_dtor,
685 .base.init = nv50_disp_dmac_init, 697 .base.init = nv50_disp_dmac_init,
686 .base.fini = nv50_disp_dmac_fini, 698 .base.fini = nv50_disp_dmac_fini,
699 .base.map = nv50_disp_chan_map,
687 .base.rd32 = nv50_disp_chan_rd32, 700 .base.rd32 = nv50_disp_chan_rd32,
688 .base.wr32 = nv50_disp_chan_wr32, 701 .base.wr32 = nv50_disp_chan_wr32,
689 .chid = 3, 702 .chid = 3,
@@ -800,6 +813,7 @@ nv50_disp_oimm_ofuncs = {
800 .base.dtor = nv50_disp_pioc_dtor, 813 .base.dtor = nv50_disp_pioc_dtor,
801 .base.init = nv50_disp_pioc_init, 814 .base.init = nv50_disp_pioc_init,
802 .base.fini = nv50_disp_pioc_fini, 815 .base.fini = nv50_disp_pioc_fini,
816 .base.map = nv50_disp_chan_map,
803 .base.rd32 = nv50_disp_chan_rd32, 817 .base.rd32 = nv50_disp_chan_rd32,
804 .base.wr32 = nv50_disp_chan_wr32, 818 .base.wr32 = nv50_disp_chan_wr32,
805 .chid = 5, 819 .chid = 5,
@@ -846,6 +860,7 @@ nv50_disp_curs_ofuncs = {
846 .base.dtor = nv50_disp_pioc_dtor, 860 .base.dtor = nv50_disp_pioc_dtor,
847 .base.init = nv50_disp_pioc_init, 861 .base.init = nv50_disp_pioc_init,
848 .base.fini = nv50_disp_pioc_fini, 862 .base.fini = nv50_disp_pioc_fini,
863 .base.map = nv50_disp_chan_map,
849 .base.rd32 = nv50_disp_chan_rd32, 864 .base.rd32 = nv50_disp_chan_rd32,
850 .base.wr32 = nv50_disp_chan_wr32, 865 .base.wr32 = nv50_disp_chan_wr32,
851 .chid = 7, 866 .chid = 7,
diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.h b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.h
index 9be9b45e3c5e..8ab14461f70c 100644
--- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.h
+++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.h
@@ -116,6 +116,7 @@ struct nv50_disp_chan {
116 int chid; 116 int chid;
117}; 117};
118 118
119int nv50_disp_chan_map(struct nouveau_object *, u64 *, u32 *);
119u32 nv50_disp_chan_rd32(struct nouveau_object *, u64); 120u32 nv50_disp_chan_rd32(struct nouveau_object *, u64);
120void nv50_disp_chan_wr32(struct nouveau_object *, u64, u32); 121void nv50_disp_chan_wr32(struct nouveau_object *, u64, u32);
121 122
diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c b/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
index f64647b8b8d0..9c2ac1390ef6 100644
--- a/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
@@ -326,6 +326,7 @@ nvd0_disp_mast_ofuncs = {
326 .base.dtor = nv50_disp_dmac_dtor, 326 .base.dtor = nv50_disp_dmac_dtor,
327 .base.init = nvd0_disp_mast_init, 327 .base.init = nvd0_disp_mast_init,
328 .base.fini = nvd0_disp_mast_fini, 328 .base.fini = nvd0_disp_mast_fini,
329 .base.map = nv50_disp_chan_map,
329 .base.rd32 = nv50_disp_chan_rd32, 330 .base.rd32 = nv50_disp_chan_rd32,
330 .base.wr32 = nv50_disp_chan_wr32, 331 .base.wr32 = nv50_disp_chan_wr32,
331 .chid = 0, 332 .chid = 0,
@@ -418,6 +419,7 @@ nvd0_disp_sync_ofuncs = {
418 .base.dtor = nv50_disp_dmac_dtor, 419 .base.dtor = nv50_disp_dmac_dtor,
419 .base.init = nvd0_disp_dmac_init, 420 .base.init = nvd0_disp_dmac_init,
420 .base.fini = nvd0_disp_dmac_fini, 421 .base.fini = nvd0_disp_dmac_fini,
422 .base.map = nv50_disp_chan_map,
421 .base.rd32 = nv50_disp_chan_rd32, 423 .base.rd32 = nv50_disp_chan_rd32,
422 .base.wr32 = nv50_disp_chan_wr32, 424 .base.wr32 = nv50_disp_chan_wr32,
423 .chid = 1, 425 .chid = 1,
@@ -497,6 +499,7 @@ nvd0_disp_ovly_ofuncs = {
497 .base.dtor = nv50_disp_dmac_dtor, 499 .base.dtor = nv50_disp_dmac_dtor,
498 .base.init = nvd0_disp_dmac_init, 500 .base.init = nvd0_disp_dmac_init,
499 .base.fini = nvd0_disp_dmac_fini, 501 .base.fini = nvd0_disp_dmac_fini,
502 .base.map = nv50_disp_chan_map,
500 .base.rd32 = nv50_disp_chan_rd32, 503 .base.rd32 = nv50_disp_chan_rd32,
501 .base.wr32 = nv50_disp_chan_wr32, 504 .base.wr32 = nv50_disp_chan_wr32,
502 .chid = 5, 505 .chid = 5,
@@ -567,6 +570,7 @@ nvd0_disp_oimm_ofuncs = {
567 .base.dtor = nv50_disp_pioc_dtor, 570 .base.dtor = nv50_disp_pioc_dtor,
568 .base.init = nvd0_disp_pioc_init, 571 .base.init = nvd0_disp_pioc_init,
569 .base.fini = nvd0_disp_pioc_fini, 572 .base.fini = nvd0_disp_pioc_fini,
573 .base.map = nv50_disp_chan_map,
570 .base.rd32 = nv50_disp_chan_rd32, 574 .base.rd32 = nv50_disp_chan_rd32,
571 .base.wr32 = nv50_disp_chan_wr32, 575 .base.wr32 = nv50_disp_chan_wr32,
572 .chid = 9, 576 .chid = 9,
@@ -582,6 +586,7 @@ nvd0_disp_curs_ofuncs = {
582 .base.dtor = nv50_disp_pioc_dtor, 586 .base.dtor = nv50_disp_pioc_dtor,
583 .base.init = nvd0_disp_pioc_init, 587 .base.init = nvd0_disp_pioc_init,
584 .base.fini = nvd0_disp_pioc_fini, 588 .base.fini = nvd0_disp_pioc_fini,
589 .base.map = nv50_disp_chan_map,
585 .base.rd32 = nv50_disp_chan_rd32, 590 .base.rd32 = nv50_disp_chan_rd32,
586 .base.wr32 = nv50_disp_chan_wr32, 591 .base.wr32 = nv50_disp_chan_wr32,
587 .chid = 13, 592 .chid = 13,
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 82d6b4f6a5c2..9e9fa585b304 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -69,8 +69,10 @@ nv50_chan_create(struct nvif_object *disp, const u32 *oclass, u8 head,
69 int ret = nvif_object_init(disp, NULL, (oclass[0] << 16) | head, 69 int ret = nvif_object_init(disp, NULL, (oclass[0] << 16) | head,
70 oclass[0], data, size, 70 oclass[0], data, size,
71 &chan->user); 71 &chan->user);
72 if (oclass++, ret == 0) 72 if (oclass++, ret == 0) {
73 nvif_object_map(&chan->user);
73 return ret; 74 return ret;
75 }
74 } 76 }
75 return -ENOSYS; 77 return -ENOSYS;
76} 78}