drm/radeon: force the UVD DPB into VRAM as well

Seems to be mandatory for WMV playback.

Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=100510

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Christian König 2017-04-11 19:20:20 +02:00 committed by Alex Deucher
parent 203eb0cb0e
commit 8f12bbe6d9
2 changed files with 7 additions and 5 deletions

View file

@ -117,11 +117,13 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
priority = (r->flags & RADEON_RELOC_PRIO_MASK) * 2 priority = (r->flags & RADEON_RELOC_PRIO_MASK) * 2
+ !!r->write_domain; + !!r->write_domain;
/* the first reloc of an UVD job is the msg and that must be in /* The first reloc of an UVD job is the msg and that must be in
VRAM, also but everything into VRAM on AGP cards and older * VRAM, the second reloc is the DPB and for WMV that must be in
IGP chips to avoid image corruptions */ * VRAM as well. Also put everything into VRAM on AGP cards and older
* IGP chips to avoid image corruptions
*/
if (p->ring == R600_RING_TYPE_UVD_INDEX && if (p->ring == R600_RING_TYPE_UVD_INDEX &&
(i == 0 || pci_find_capability(p->rdev->ddev->pdev, (i <= 0 || pci_find_capability(p->rdev->ddev->pdev,
PCI_CAP_ID_AGP) || PCI_CAP_ID_AGP) ||
p->rdev->family == CHIP_RS780 || p->rdev->family == CHIP_RS780 ||
p->rdev->family == CHIP_RS880)) { p->rdev->family == CHIP_RS880)) {

View file

@ -621,7 +621,7 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p,
} }
/* TODO: is this still necessary on NI+ ? */ /* TODO: is this still necessary on NI+ ? */
if ((cmd == 0 || cmd == 0x3) && if ((cmd == 0 || cmd == 1 || cmd == 0x3) &&
(start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) { (start >> 28) != (p->rdev->uvd.gpu_addr >> 28)) {
DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n", DRM_ERROR("msg/fb buffer %LX-%LX out of 256MB segment!\n",
start, end); start, end);