<div dir="ltr"><div dir="ltr"><p>> Am 09.11.2017 um 11:53 schrieb Piotr Redlewski:<br>
> > On Thu, Nov 09, 2017 at 11:09:42AM +0100, Christian König wrote:<br>
> >> Am 09.11.2017 um 10:54 schrieb Piotr Redlewski:<br>
> >>> On Wed, Nov 08, 2017 at 06:54:18PM -0500, Alex Deucher wrote:<br>
> >>>> On Wed, Nov 8, 2017 at 5:38 PM, Piotr Redlewski <predlewski at <a href="http://gmail.com">gmail.com</a>> wrote:<br>
> >>>>> Hi,<br>
> >>>>><br>
> >>>>> Following series implements UVD support for SI in amdgpu driver. Code is based<br>
> >>>>> on CIK's UVD support in amdgpu and SI's UVD support in radeon drivers. To work,<br>
> >>>>> it requires tahiti uvd firmware with added header - I've created simple script<br>
> >>>>> to produce exactly this, so if anyone is interested it can be found here:<br>
> >>>>> <a href="https://gist.github.com/anonymous/6d974a970340f7f64b6fcc4f95267e43">https://gist.github.com/anonymous/6d974a970340f7f64b6fcc4f95267e43</a><br>
> >>>>><br>
> >>>>> Code is based on amd-staging-drm-next branch in Alex's tree. After applying<br>
> >>>>> these patches, uvd boots up and seems to work ok. I've tested it with vdpauinfo<br>
> >>>>> and mpv.<br>
> >>>>><br>
> >>>>> Some comments/issues for the patches:<br>
> >>>>> 1. To make uvd work, I had to bring back fb location programming. Using location<br>
> >>>>> programmed by vbios, vram location is not available for uvd mc (at least on my<br>
> >>>>> machine) due to too wide address. Starting address is 40-bit long for fb, but<br>
> >>>>> uvd mc supports only 32-bits (judging by comments in amdgpu code and actual code<br>
> >>>>> in radeon driver)<br>
> >>>> Something else must be going on.  The vram location is irrelevant with<br>
> >>>> respect to the limitations of UVD.  I think the limitations with UVD<br>
> >>>> are more to do with the location of the active buffers relative to<br>
> >>>> each other rather than the absolute location of some aperture in the<br>
> >>>> GPU's address space.  CI has the same limitation as I recall so there<br>
> >>>> is probably a bug somewhere.  Windows has used the fb location as set<br>
> >>>> by the vbios since evergreen, so it definitely should work.<br>
> >>>><br>
> >>> If this is the case, then there must be something missing in UVD mc controller<br>
> >>> programming. When using vbios, I get following location:<br>
> >>> amdgpu 0000:01:00.0: VRAM: 2048M 0x000000F400000000 - 0x000000F47FFFFFFF (2048M used)<br>
> >>><br>
> >>> When UVD bo is created, it starts at address 0xf400243000 and this value is used<br>
> >>> for programming UVD mc offsets. Programming is done in the following way:<br>
> >>> addr = (adev->uvd.gpu_addr + AMDGPU_UVD_FIRMWARE_OFFSET) >> 3;<br>
> >>> WREG32(mmUVD_VCPU_CACHE_OFFSET0, addr);<br>
> >>><br>
> >>> Because address of the bo is wider than 32-bit, this won't work. It would be the<br>
> >>> same if UVD bo would be created at the beginning of the VRAM.<br>
> >>><br>
> >>> Any ideas how to handle this?<br>
> >> Are you programming UVD_LMI_EXT40_ADDR?<br>
> >><br>
> >> But I'm not sure if we ever handled that correctly in the SI code.<br>
> > Yes, I do it exactly the same as it is done in radeon (and CIK in amdgpu):<br>
> >   /* bits 32-39 */<br>
> > addr = (adev->uvd.gpu_addr >> 32) & 0xFF;<br>
> > WREG32(mmUVD_LMI_EXT40_ADDR, addr | (0x9 << 16) | (0x1 << 31));<br>
><br>
> Ok, I've checked the firmware in the meantime and found that we never<br>
> released firmware which supports the full 40bit addressing.<br>
><br>
> That's why this will never work correctly. Going to check if we can get<br>
> updated firmware out of the door.</p><p>Hi Christian,<br></p><p>Did you manage to publish the updated firmware? I can't see it in the linux-firmware tree.<br></p><p>Thanks,<br>Federico</p><div><br></div><p>
> Regards,<br>
> Christian.<br>
><br>
> ><br>
> > Regards,<br>
> > Piotr<br>
  <br>
  <br>
</p></div></div>