diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/disp/nv50.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/disp/nv50.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_display.c | 4 |
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 | ||
85 | int | ||
86 | nv50_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 | |||
85 | u32 | 95 | u32 |
86 | nv50_disp_chan_rd32(struct nouveau_object *object, u64 addr) | 96 | nv50_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 | ||
119 | int nv50_disp_chan_map(struct nouveau_object *, u64 *, u32 *); | ||
119 | u32 nv50_disp_chan_rd32(struct nouveau_object *, u64); | 120 | u32 nv50_disp_chan_rd32(struct nouveau_object *, u64); |
120 | void nv50_disp_chan_wr32(struct nouveau_object *, u64, u32); | 121 | void 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 | } |