mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
57b2c0628b
This patch adds V4L2 HVA (Hardware Video Accelerator) video encoder driver for STMicroelectronics SoC. It uses the V4L2 mem2mem framework. This patch only contains the core parts of the driver: - the V4L2 interface with the userland (hva-v4l2.c) - the hardware services (hva-hw.c) - the memory management utilities (hva-mem.c) This patch doesn't include the support of specific codec (e.g. H.264) video encoding: this support is part of subsequent patches. Signed-off-by: Yannick Fertre <yannick.fertre@st.com> Signed-off-by: Jean-Christophe Trotin <jean-christophe.trotin@st.com> Acked-by: Peter Griffin <peter.griffin@linaro.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
/*
|
|
* Copyright (C) STMicroelectronics SA 2015
|
|
* Authors: Yannick Fertre <yannick.fertre@st.com>
|
|
* Hugues Fruchet <hugues.fruchet@st.com>
|
|
* License terms: GNU General Public License (GPL), version 2
|
|
*/
|
|
|
|
#include "hva.h"
|
|
#include "hva-mem.h"
|
|
|
|
int hva_mem_alloc(struct hva_ctx *ctx, u32 size, const char *name,
|
|
struct hva_buffer **buf)
|
|
{
|
|
struct device *dev = ctx_to_dev(ctx);
|
|
struct hva_buffer *b;
|
|
dma_addr_t paddr;
|
|
void *base;
|
|
|
|
b = devm_kzalloc(dev, sizeof(*b), GFP_KERNEL);
|
|
if (!b)
|
|
return -ENOMEM;
|
|
|
|
base = dma_alloc_attrs(dev, size, &paddr, GFP_KERNEL | GFP_DMA,
|
|
DMA_ATTR_WRITE_COMBINE);
|
|
if (!base) {
|
|
dev_err(dev, "%s %s : dma_alloc_attrs failed for %s (size=%d)\n",
|
|
ctx->name, __func__, name, size);
|
|
devm_kfree(dev, b);
|
|
return -ENOMEM;
|
|
}
|
|
|
|
b->size = size;
|
|
b->paddr = paddr;
|
|
b->vaddr = base;
|
|
b->name = name;
|
|
|
|
dev_dbg(dev,
|
|
"%s allocate %d bytes of HW memory @(virt=%p, phy=%pad): %s\n",
|
|
ctx->name, size, b->vaddr, &b->paddr, b->name);
|
|
|
|
/* return hva buffer to user */
|
|
*buf = b;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void hva_mem_free(struct hva_ctx *ctx, struct hva_buffer *buf)
|
|
{
|
|
struct device *dev = ctx_to_dev(ctx);
|
|
|
|
dev_dbg(dev,
|
|
"%s free %d bytes of HW memory @(virt=%p, phy=%pad): %s\n",
|
|
ctx->name, buf->size, buf->vaddr, &buf->paddr, buf->name);
|
|
|
|
dma_free_attrs(dev, buf->size, buf->vaddr, buf->paddr,
|
|
DMA_ATTR_WRITE_COMBINE);
|
|
|
|
devm_kfree(dev, buf);
|
|
}
|