<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Ok, <br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for your reviewing!</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Rico<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Christian König <ckoenig.leichtzumerken@gmail.com><br>
<b>Sent:</b> Wednesday, October 9, 2019 16:25<br>
<b>To:</b> Alex Deucher <alexdeucher@gmail.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Deucher, Alexander <Alexander.Deucher@amd.com>; Yin, Tianci (Rico) <Tianci.Yin@amd.com><br>
<b>Subject:</b> Re: [PATCH 2/8] drm/amdgpu: add a generic fb accessing helper function</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Am 08.10.19 um 21:29 schrieb Alex Deucher:<br>
> From: "Tianci.Yin" <tianci.yin@amd.com><br>
><br>
> add a generic helper function for accessing framebuffer via MMIO<br>
><br>
> Change-Id: I4baa0aa53c93a94c2eff98c6211a61f369239982<br>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com><br>
> Signed-off-by: Tianci.Yin <tianci.yin@amd.com><br>
> ---<br>
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h           |  2 +<br>
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c    | 42 +++++++++++++++++++<br>
>   drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 13 +-----<br>
>   3 files changed, 45 insertions(+), 12 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> index 17ccb9015141..0d60c2e6c592 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
> @@ -985,6 +985,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,<br>
>   void amdgpu_device_fini(struct amdgpu_device *adev);<br>
>   int amdgpu_gpu_wait_for_idle(struct amdgpu_device *adev);<br>
>   <br>
> +int amdgpu_device_vram_access(struct amdgpu_device *adev, loff_t pos,<br>
> +                    uint32_t *buf, size_t size, bool write);<br>
>   uint32_t amdgpu_mm_rreg(struct amdgpu_device *adev, uint32_t reg,<br>
>                        uint32_t acc_flags);<br>
>   void amdgpu_mm_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v,<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
> index f25275abf408..53ce227f759c 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
> @@ -153,6 +153,48 @@ bool amdgpu_device_is_px(struct drm_device *dev)<br>
>        return false;<br>
>   }<br>
>   <br>
> +/**<br>
> + * VRAM access helper functions.<br>
> + *<br>
> + * amdgpu_device_vram_access - read/write a buffer in vram<br>
> + *<br>
> + * @adev: amdgpu_device pointer<br>
> + * @pos: offset of the buffer in vram<br>
> + * @buf: virtual address of the buffer in system memory<br>
> + * @size: read/write size, sizeof(@buf) must > @size<br>
> + * @write: true - write to vram, otherwise - read from vram<br>
> + *<br>
> + * Returns 0 on success or an -error on failure.<br>
> + */<br>
> +int amdgpu_device_vram_access(struct amdgpu_device *adev, loff_t pos,<br>
> +                    uint32_t *buf, size_t size, bool write)<br>
<br>
Indentation seems to be incorrect here.<br>
<br>
> +{<br>
> +     uint64_t end = pos + size;<br>
> +     unsigned long flags;<br>
> +<br>
> +     if (IS_ERR_OR_NULL(buf) ||<br>
> +         (adev->gmc.mc_vram_size > 0 &&<br>
> +          end > adev->gmc.mc_vram_size)) {<br>
> +             DRM_ERROR("parameter error! pos:%llx, buf:%llx, size:%zx.\n",<br>
> +                       pos, (u64)buf, size);<br>
> +             return -EINVAL;<br>
> +     }<br>
<br>
Please drop that, this is a purely internal functions and parameter <br>
checking like this doesn't really make sense.<br>
<br>
Regards,<br>
Christian.<br>
<br>
> +<br>
> +     while (pos < end) {<br>
> +             spin_lock_irqsave(&adev->mmio_idx_lock, flags);<br>
> +             WREG32_NO_KIQ(mmMM_INDEX, ((uint32_t)pos) | 0x80000000);<br>
> +             WREG32_NO_KIQ(mmMM_INDEX_HI, pos >> 31);<br>
> +             if (write)<br>
> +                     WREG32_NO_KIQ(mmMM_DATA, *buf++);<br>
> +             else<br>
> +                     *buf++ = RREG32_NO_KIQ(mmMM_DATA);<br>
> +             spin_unlock_irqrestore(&adev->mmio_idx_lock, flags);<br>
> +             pos += 4;<br>
> +     }<br>
> +<br>
> +     return 0;<br>
> +}<br>
> +<br>
>   /*<br>
>    * MMIO register access helper functions.<br>
>    */<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c<br>
> index db2dab3a6dff..324c2d605f54 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c<br>
> @@ -134,21 +134,10 @@ static int hw_id_map[MAX_HWIP] = {<br>
>   <br>
>   static int amdgpu_discovery_read_binary(struct amdgpu_device *adev, uint8_t *binary)<br>
>   {<br>
> -     uint32_t *p = (uint32_t *)binary;<br>
>        uint64_t vram_size = (uint64_t)RREG32(mmRCC_CONFIG_MEMSIZE) << 20;<br>
>        uint64_t pos = vram_size - BINARY_MAX_SIZE;<br>
> -     unsigned long flags;<br>
> -<br>
> -     while (pos < vram_size) {<br>
> -             spin_lock_irqsave(&adev->mmio_idx_lock, flags);<br>
> -             WREG32_NO_KIQ(mmMM_INDEX, ((uint32_t)pos) | 0x80000000);<br>
> -             WREG32_NO_KIQ(mmMM_INDEX_HI, pos >> 31);<br>
> -             *p++ = RREG32_NO_KIQ(mmMM_DATA);<br>
> -             spin_unlock_irqrestore(&adev->mmio_idx_lock, flags);<br>
> -             pos += 4;<br>
> -     }<br>
>   <br>
> -     return 0;<br>
> +     return amdgpu_device_vram_access(adev, pos, (uint32_t *)binary, BINARY_MAX_SIZE, false);<br>
>   }<br>
>   <br>
>   static uint16_t amdgpu_discovery_calculate_checksum(uint8_t *data, uint32_t size)<br>
<br>
</div>
</span></font></div>
</body>
</html>