Re: [PATCH v5] media: mtk-vpu: Ensure alignment of 8 for DTCM buffer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dafna, Houlong,

I am marking this patch as 'Obsoleted' in patchwork because there has been
no updates or comments and it is too old. If you believe this is still
needed, then please repost after rebasing it.

Regards,

	Hans

On 06/12/2021 02:21, houlong wei wrote:
> cc mtk-vpu expert irui.wang.
> 
> On Sat, 2021-12-04 at 22:47 +0800, Dafna Hirschfeld wrote:
>> From: Alexandre Courbot <acourbot@xxxxxxxxxxxx>
>>
>> When running memcpy_toio:
>> memcpy_toio(send_obj->share_buf, buf, len);
>> it was found that errors appear if len is not a multiple of 8:
>>
>> [58.350841] mtk-mdp 14001000.rdma: processing failed: -22
>>
>> This is because in ARM64, memcpy_toio does byte-size access
>> when the length is not a multiple of 8 while access to the
>> vpu iomem must be 4 aligned.
>>
>> This patch ensures the copy of a multiple of 8 size by calling
>> round_up(len, 8) when copying
>>
>> Fixes: e6599adfad30 ("media: mtk-vpu: avoid unaligned access to DTCM
>> buffer.")
>> Signed-off-by: Alexandre Courbot <acourbot@xxxxxxxxxxxx>
>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@xxxxxxxxxxxxx>
>> Reviewed-by: Houlong Wei <houlong.wei@xxxxxxxxxxxx>
>> ---
>> changes since v4:
>> 1. replace data[SHARE_BUF_SIZE]; with data[sizeof(send_obj-
>>> share_buf)]
>> 2. Add the explanation for the failure in commit log and inline doc
>>
>> changes since v3:
>> 1. multile -> multiple
>> 2. add inline doc
>>
>> changes since v2:
>> 1. do the extra copy only if len is not multiple of 8
>>
>> changes since v1:
>> 1. change sign-off-by tags
>> 2. change values to memset
>>
>>  drivers/media/platform/mtk-vpu/mtk_vpu.c | 17 ++++++++++++++++-
>>  1 file changed, 16 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c
>> b/drivers/media/platform/mtk-vpu/mtk_vpu.c
>> index 7f1647da0ade..2ef93db239b9 100644
>> --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c
>> +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c
>> @@ -349,7 +349,22 @@ int vpu_ipi_send(struct platform_device *pdev,
>>  		}
>>  	} while (vpu_cfg_readl(vpu, HOST_TO_VPU));
>>  
>> -	memcpy_toio(send_obj->share_buf, buf, len);
>> +	/*
>> +	 * On Arm64, the memcpy_toio does byte-size access as long as
>> address or length are
>> +	 * not 8 aligned. Access to the vpu iomem must be 4 aligned.
>> Byte-size access is
>> +	 * not allowed and cause processing to fail. Therefore make
>> sure the length
>> +	 * sent to memcpy_toio is a multiply of 8.
>> +	 */
>> +	if (len % 8 != 0) {
>> +		unsigned char data[sizeof(send_obj->share_buf)];
>> +
>> +		memset(data + len, 0, sizeof(data) - len);
>> +		memcpy(data, buf, len);
>> +		memcpy_toio(send_obj->share_buf, data, round_up(len,
>> 8));
>> +	} else {
>> +		memcpy_toio(send_obj->share_buf, buf, len);
>> +	}
>> +
>>  	writel(len, &send_obj->len);
>>  	writel(id, &send_obj->id);
>>  
>> -- 
>> 2.17.1
>>




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux