mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: rockchip: isp: reserved memory using rdma_sg ops
Change-Id: Ia01770c3f54bfbb3d65a73c7db0e8ab8730ab29d Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -607,7 +607,7 @@ static void rkisp_buf_queue(struct vb2_buffer *vb)
|
||||
memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr));
|
||||
for (i = 0; i < isp_fmt->mplanes; i++) {
|
||||
vb2_plane_vaddr(vb, i);
|
||||
if (stream->ispdev->hw_dev->is_mmu) {
|
||||
if (stream->ispdev->hw_dev->is_dma_sg_ops) {
|
||||
sgt = vb2_dma_sg_plane_desc(vb, i);
|
||||
ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl);
|
||||
} else {
|
||||
|
||||
@@ -1671,7 +1671,7 @@ static void rkisp_buf_queue(struct vb2_buffer *vb)
|
||||
memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr));
|
||||
for (i = 0; i < isp_fmt->mplanes; i++) {
|
||||
vb2_plane_vaddr(vb, i);
|
||||
if (stream->ispdev->hw_dev->is_mmu) {
|
||||
if (stream->ispdev->hw_dev->is_dma_sg_ops) {
|
||||
sgt = vb2_dma_sg_plane_desc(vb, i);
|
||||
ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl);
|
||||
} else {
|
||||
|
||||
@@ -970,7 +970,7 @@ static void rkisp_buf_queue(struct vb2_buffer *vb)
|
||||
memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr));
|
||||
for (i = 0; i < isp_fmt->mplanes; i++) {
|
||||
vb2_plane_vaddr(vb, i);
|
||||
if (stream->ispdev->hw_dev->is_mmu) {
|
||||
if (stream->ispdev->hw_dev->is_dma_sg_ops) {
|
||||
sgt = vb2_dma_sg_plane_desc(vb, i);
|
||||
ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl);
|
||||
} else {
|
||||
|
||||
@@ -94,7 +94,7 @@ int rkisp_alloc_buffer(struct rkisp_device *dev,
|
||||
}
|
||||
|
||||
buf->mem_priv = mem_priv;
|
||||
if (dev->hw_dev->is_mmu) {
|
||||
if (dev->hw_dev->is_dma_sg_ops) {
|
||||
sg_tbl = (struct sg_table *)g_ops->cookie(mem_priv);
|
||||
buf->dma_addr = sg_dma_address(sg_tbl->sgl);
|
||||
} else {
|
||||
|
||||
@@ -493,7 +493,7 @@ static void rkisp_buf_queue(struct vb2_buffer *vb)
|
||||
|
||||
memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr));
|
||||
for (i = 0; i < isp_fmt->mplanes; i++) {
|
||||
if (stream->ispdev->hw_dev->is_mmu) {
|
||||
if (stream->ispdev->hw_dev->is_dma_sg_ops) {
|
||||
sgt = vb2_dma_sg_plane_desc(vb, i);
|
||||
ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl);
|
||||
} else {
|
||||
|
||||
@@ -647,6 +647,7 @@ static int rkisp_hw_probe(struct platform_device *pdev)
|
||||
struct rkisp_hw_dev *hw_dev;
|
||||
struct resource *res;
|
||||
int i, ret;
|
||||
bool is_mem_reserved = true;
|
||||
|
||||
match = of_match_node(rkisp_hw_of_match, node);
|
||||
if (IS_ERR(match))
|
||||
@@ -737,22 +738,29 @@ static int rkisp_hw_probe(struct platform_device *pdev)
|
||||
hw_dev->is_single = true;
|
||||
hw_dev->is_mi_update = false;
|
||||
hw_dev->is_dma_contig = true;
|
||||
hw_dev->is_dma_sg_ops = false;
|
||||
hw_dev->is_buf_init = false;
|
||||
hw_dev->is_shutdown = false;
|
||||
hw_dev->is_mmu = is_iommu_enable(dev);
|
||||
ret = of_reserved_mem_device_init(dev);
|
||||
if (ret) {
|
||||
is_mem_reserved = false;
|
||||
|
||||
if (!hw_dev->is_mmu)
|
||||
dev_warn(dev, "No reserved memory region. default cma area!\n");
|
||||
dev_info(dev, "No reserved memory region. default cma area!\n");
|
||||
else
|
||||
hw_dev->is_dma_contig = false;
|
||||
}
|
||||
if (!hw_dev->is_mmu)
|
||||
hw_dev->mem_ops = &vb2_dma_contig_memops;
|
||||
else if (!hw_dev->is_dma_contig)
|
||||
hw_dev->mem_ops = &vb2_dma_sg_memops;
|
||||
else
|
||||
if (is_mem_reserved) {
|
||||
/* reserved memory using rdma_sg */
|
||||
hw_dev->mem_ops = &vb2_rdma_sg_memops;
|
||||
hw_dev->is_dma_sg_ops = true;
|
||||
} else if (hw_dev->is_mmu) {
|
||||
hw_dev->mem_ops = &vb2_dma_sg_memops;
|
||||
hw_dev->is_dma_sg_ops = true;
|
||||
} else {
|
||||
hw_dev->mem_ops = &vb2_dma_contig_memops;
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ struct rkisp_hw_dev {
|
||||
int buf_init_cnt;
|
||||
bool is_feature_on;
|
||||
bool is_dma_contig;
|
||||
bool is_dma_sg_ops;
|
||||
bool is_mmu;
|
||||
bool is_idle;
|
||||
bool is_single;
|
||||
|
||||
Reference in New Issue
Block a user