| .. | .. |
|---|
| 23 | 23 | * written by Arthur Huillet. |
|---|
| 24 | 24 | */ |
|---|
| 25 | 25 | |
|---|
| 26 | | -#include <drm/drmP.h> |
|---|
| 27 | 26 | #include <drm/drm_crtc.h> |
|---|
| 28 | 27 | #include <drm/drm_fourcc.h> |
|---|
| 29 | 28 | |
|---|
| .. | .. |
|---|
| 32 | 31 | #include "nouveau_bo.h" |
|---|
| 33 | 32 | #include "nouveau_connector.h" |
|---|
| 34 | 33 | #include "nouveau_display.h" |
|---|
| 34 | +#include "nouveau_gem.h" |
|---|
| 35 | 35 | #include "nvreg.h" |
|---|
| 36 | 36 | #include "disp.h" |
|---|
| 37 | 37 | |
|---|
| .. | .. |
|---|
| 121 | 121 | struct nvif_object *dev = &drm->client.device.object; |
|---|
| 122 | 122 | struct nouveau_plane *nv_plane = |
|---|
| 123 | 123 | container_of(plane, struct nouveau_plane, base); |
|---|
| 124 | | - struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); |
|---|
| 125 | 124 | struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); |
|---|
| 126 | 125 | struct nouveau_bo *cur = nv_plane->cur; |
|---|
| 126 | + struct nouveau_bo *nvbo; |
|---|
| 127 | 127 | bool flip = nv_plane->flip; |
|---|
| 128 | 128 | int soff = NV_PCRTC0_SIZE * nv_crtc->index; |
|---|
| 129 | 129 | int soff2 = NV_PCRTC0_SIZE * !nv_crtc->index; |
|---|
| .. | .. |
|---|
| 141 | 141 | if (ret) |
|---|
| 142 | 142 | return ret; |
|---|
| 143 | 143 | |
|---|
| 144 | | - ret = nouveau_bo_pin(nv_fb->nvbo, TTM_PL_FLAG_VRAM, false); |
|---|
| 144 | + nvbo = nouveau_gem_object(fb->obj[0]); |
|---|
| 145 | + ret = nouveau_bo_pin(nvbo, NOUVEAU_GEM_DOMAIN_VRAM, false); |
|---|
| 145 | 146 | if (ret) |
|---|
| 146 | 147 | return ret; |
|---|
| 147 | 148 | |
|---|
| 148 | | - nv_plane->cur = nv_fb->nvbo; |
|---|
| 149 | + nv_plane->cur = nvbo; |
|---|
| 149 | 150 | |
|---|
| 150 | 151 | nvif_mask(dev, NV_PCRTC_ENGINE_CTRL + soff, NV_CRTC_FSEL_OVERLAY, NV_CRTC_FSEL_OVERLAY); |
|---|
| 151 | 152 | nvif_mask(dev, NV_PCRTC_ENGINE_CTRL + soff2, NV_CRTC_FSEL_OVERLAY, 0); |
|---|
| 152 | 153 | |
|---|
| 153 | 154 | nvif_wr32(dev, NV_PVIDEO_BASE(flip), 0); |
|---|
| 154 | | - nvif_wr32(dev, NV_PVIDEO_OFFSET_BUFF(flip), nv_fb->nvbo->bo.offset); |
|---|
| 155 | + nvif_wr32(dev, NV_PVIDEO_OFFSET_BUFF(flip), nvbo->offset); |
|---|
| 155 | 156 | nvif_wr32(dev, NV_PVIDEO_SIZE_IN(flip), src_h << 16 | src_w); |
|---|
| 156 | 157 | nvif_wr32(dev, NV_PVIDEO_POINT_IN(flip), src_y << 16 | src_x); |
|---|
| 157 | 158 | nvif_wr32(dev, NV_PVIDEO_DS_DX(flip), (src_w << 20) / crtc_w); |
|---|
| .. | .. |
|---|
| 173 | 174 | if (format & NV_PVIDEO_FORMAT_PLANAR) { |
|---|
| 174 | 175 | nvif_wr32(dev, NV_PVIDEO_UVPLANE_BASE(flip), 0); |
|---|
| 175 | 176 | nvif_wr32(dev, NV_PVIDEO_UVPLANE_OFFSET_BUFF(flip), |
|---|
| 176 | | - nv_fb->nvbo->bo.offset + fb->offsets[1]); |
|---|
| 177 | + nvbo->offset + fb->offsets[1]); |
|---|
| 177 | 178 | } |
|---|
| 178 | 179 | nvif_wr32(dev, NV_PVIDEO_FORMAT(flip), format | fb->pitches[0]); |
|---|
| 179 | 180 | nvif_wr32(dev, NV_PVIDEO_STOP, 0); |
|---|
| .. | .. |
|---|
| 369 | 370 | struct nvif_object *dev = &nouveau_drm(plane->dev)->client.device.object; |
|---|
| 370 | 371 | struct nouveau_plane *nv_plane = |
|---|
| 371 | 372 | container_of(plane, struct nouveau_plane, base); |
|---|
| 372 | | - struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); |
|---|
| 373 | 373 | struct nouveau_bo *cur = nv_plane->cur; |
|---|
| 374 | + struct nouveau_bo *nvbo; |
|---|
| 374 | 375 | uint32_t overlay = 1; |
|---|
| 375 | 376 | int brightness = (nv_plane->brightness - 512) * 62 / 512; |
|---|
| 376 | 377 | int ret, i; |
|---|
| .. | .. |
|---|
| 385 | 386 | if (ret) |
|---|
| 386 | 387 | return ret; |
|---|
| 387 | 388 | |
|---|
| 388 | | - ret = nouveau_bo_pin(nv_fb->nvbo, TTM_PL_FLAG_VRAM, false); |
|---|
| 389 | + nvbo = nouveau_gem_object(fb->obj[0]); |
|---|
| 390 | + ret = nouveau_bo_pin(nvbo, NOUVEAU_GEM_DOMAIN_VRAM, false); |
|---|
| 389 | 391 | if (ret) |
|---|
| 390 | 392 | return ret; |
|---|
| 391 | 393 | |
|---|
| 392 | | - nv_plane->cur = nv_fb->nvbo; |
|---|
| 394 | + nv_plane->cur = nvbo; |
|---|
| 393 | 395 | |
|---|
| 394 | 396 | nvif_wr32(dev, NV_PVIDEO_OE_STATE, 0); |
|---|
| 395 | 397 | nvif_wr32(dev, NV_PVIDEO_SU_STATE, 0); |
|---|
| .. | .. |
|---|
| 397 | 399 | |
|---|
| 398 | 400 | for (i = 0; i < 2; i++) { |
|---|
| 399 | 401 | nvif_wr32(dev, NV_PVIDEO_BUFF0_START_ADDRESS + 4 * i, |
|---|
| 400 | | - nv_fb->nvbo->bo.offset); |
|---|
| 402 | + nvbo->offset); |
|---|
| 401 | 403 | nvif_wr32(dev, NV_PVIDEO_BUFF0_PITCH_LENGTH + 4 * i, |
|---|
| 402 | 404 | fb->pitches[0]); |
|---|
| 403 | 405 | nvif_wr32(dev, NV_PVIDEO_BUFF0_OFFSET + 4 * i, 0); |
|---|