fpga: dfl: fme: align PR buffer size per PR datawidth
Current driver checks if input bitstream file size is aligned or not per PR data width (default 32bits). It requires one additional step for end user when they generate the bitstream file, padding extra zeros to bitstream file to align its size per PR data width, but they don't have to as hardware will drop extra padding bytes automatically. In order to simplify the user steps, this patch aligns PR buffer size per PR data width in driver, to allow user to pass unaligned size bitstream files to driver. Signed-off-by: Xu Yilun <yilun.xu@intel.com> Signed-off-by: Wu Hao <hao.wu@intel.com> Acked-by: Alan Tull <atull@kernel.org> Acked-by: Moritz Fischer <mdf@kernel.org> Signed-off-by: Moritz Fischer <mdf@kernel.org> Link: https://lore.kernel.org/r/20190628004951.6202-4-mdf@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
49ec630cd5
Коммит
69416739ee
|
@ -74,6 +74,7 @@ static int fme_pr(struct platform_device *pdev, unsigned long arg)
|
|||
struct dfl_fme *fme;
|
||||
unsigned long minsz;
|
||||
void *buf = NULL;
|
||||
size_t length;
|
||||
int ret = 0;
|
||||
u64 v;
|
||||
|
||||
|
@ -85,9 +86,6 @@ static int fme_pr(struct platform_device *pdev, unsigned long arg)
|
|||
if (port_pr.argsz < minsz || port_pr.flags)
|
||||
return -EINVAL;
|
||||
|
||||
if (!IS_ALIGNED(port_pr.buffer_size, 4))
|
||||
return -EINVAL;
|
||||
|
||||
/* get fme header region */
|
||||
fme_hdr = dfl_get_feature_ioaddr_by_id(&pdev->dev,
|
||||
FME_FEATURE_ID_HEADER);
|
||||
|
@ -103,7 +101,13 @@ static int fme_pr(struct platform_device *pdev, unsigned long arg)
|
|||
port_pr.buffer_size))
|
||||
return -EFAULT;
|
||||
|
||||
buf = vmalloc(port_pr.buffer_size);
|
||||
/*
|
||||
* align PR buffer per PR bandwidth, as HW ignores the extra padding
|
||||
* data automatically.
|
||||
*/
|
||||
length = ALIGN(port_pr.buffer_size, 4);
|
||||
|
||||
buf = vmalloc(length);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -140,7 +144,7 @@ static int fme_pr(struct platform_device *pdev, unsigned long arg)
|
|||
fpga_image_info_free(region->info);
|
||||
|
||||
info->buf = buf;
|
||||
info->count = port_pr.buffer_size;
|
||||
info->count = length;
|
||||
info->region_id = port_pr.port_id;
|
||||
region->info = info;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче