mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 12:57:06 +09:00
vbi: use dma alloc instead reserved memory [1/1]
PD#SWPL-4510 Problem: do not use reserved memory Solution: use dma_alloc_coherent instead reserved memory Verify: x301 Change-Id: I6498772809c8f1f48a7d4dd24aa18433eff3e618 Signed-off-by: Nian Jing <nian.jing@amlogic.com>
This commit is contained in:
@@ -137,13 +137,6 @@
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
|
||||
/*di CMA pool */
|
||||
di_cma_reserved:linux,di_cma {
|
||||
compatible = "shared-dma-pool";
|
||||
@@ -586,10 +579,8 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
cvbsout {
|
||||
|
||||
@@ -145,13 +145,6 @@
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
|
||||
/*di CMA pool */
|
||||
di_cma_reserved:linux,di_cma {
|
||||
compatible = "shared-dma-pool";
|
||||
@@ -595,10 +588,8 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
cvbsout {
|
||||
|
||||
@@ -147,13 +147,6 @@
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
|
||||
/*di CMA pool */
|
||||
di_cma_reserved:linux,di_cma {
|
||||
compatible = "shared-dma-pool";
|
||||
@@ -597,10 +590,8 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
cvbsout {
|
||||
|
||||
@@ -162,12 +162,6 @@
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x1f800000 0x800000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* for external keypad */
|
||||
@@ -568,11 +562,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -153,12 +153,6 @@
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0 0x30000000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* for external keypad */
|
||||
@@ -611,11 +605,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -169,13 +169,6 @@
|
||||
alignment = <0x400000>;
|
||||
alloc-ranges = <0x0 0x30000000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -578,11 +571,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -166,13 +166,6 @@
|
||||
size = <0x01400000>;
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -575,11 +568,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -163,13 +163,6 @@
|
||||
size = <0x01400000>;
|
||||
alignment = <0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0 0x30000000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -571,11 +564,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -169,13 +169,6 @@
|
||||
alignment = <0x400000>;
|
||||
alloc-ranges = <0x0 0x30000000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x100000>;
|
||||
alloc-ranges = <0x0e000000 0x800000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -578,11 +571,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -144,12 +144,6 @@
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
|
||||
/*di CMA pool */
|
||||
di_cma_reserved:linux,di_cma {
|
||||
compatible = "shared-dma-pool";
|
||||
@@ -592,10 +586,8 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
cvbsout {
|
||||
|
||||
@@ -144,12 +144,6 @@
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
|
||||
/*di CMA pool */
|
||||
di_cma_reserved:linux,di_cma {
|
||||
compatible = "shared-dma-pool";
|
||||
@@ -592,10 +586,8 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
cvbsout {
|
||||
|
||||
@@ -161,12 +161,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* for external keypad */
|
||||
@@ -567,11 +561,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -152,12 +152,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* for external keypad */
|
||||
@@ -610,11 +604,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -164,12 +164,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -572,11 +566,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -164,12 +164,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -572,11 +566,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -164,12 +164,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -571,11 +565,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -165,12 +165,6 @@
|
||||
size = <0x0 0x01400000>;
|
||||
alignment = <0x0 0x400000>;
|
||||
};
|
||||
|
||||
/*vbi reserved mem*/
|
||||
vbi_reserved:linux,vbi {
|
||||
compatible = "amlogic, vbi-mem";
|
||||
size = <0x0 0x100000>;
|
||||
};
|
||||
};
|
||||
|
||||
amlogic_battery:dummy-battery {
|
||||
@@ -573,11 +567,9 @@
|
||||
|
||||
vbi {
|
||||
compatible = "amlogic, vbi";
|
||||
memory-region = <&vbi_reserved>;
|
||||
dev_name = "vbi";
|
||||
status = "okay";
|
||||
interrupts = <0 83 1>;
|
||||
reserve-iomap = "true";
|
||||
};
|
||||
|
||||
tvafe_avin_detect {
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/of_irq.h>
|
||||
|
||||
/* #include <linux/mutex.h> */
|
||||
@@ -1502,6 +1503,7 @@ static int vbi_probe(struct platform_device *pdev)
|
||||
int ret = 0;
|
||||
struct resource *res;
|
||||
struct vbi_dev_s *vbi_dev;
|
||||
dma_addr_t vbi_dma_addr;
|
||||
|
||||
/* allocate memory for the per-device structure */
|
||||
vbi_dev = kzalloc(sizeof(struct vbi_dev_s), GFP_KERNEL);
|
||||
@@ -1509,7 +1511,7 @@ static int vbi_probe(struct platform_device *pdev)
|
||||
ret = -ENOMEM;
|
||||
goto fail_kzalloc_mem;
|
||||
}
|
||||
memset(vbi_dev, 0, sizeof(struct vbi_dev_s));
|
||||
memset(vbi_dev, 0, sizeof(struct vbi_dev_s));
|
||||
vbi_mem_start = 0;
|
||||
|
||||
/* connect the file operations with cdev */
|
||||
@@ -1536,34 +1538,27 @@ static int vbi_probe(struct platform_device *pdev)
|
||||
goto fail_create_dbg_file;
|
||||
}
|
||||
|
||||
/* get device memory */
|
||||
res = &vbi_memobj;
|
||||
ret = of_reserved_mem_device_init(&pdev->dev);
|
||||
if (ret == 0)
|
||||
tvafe_pr_info("\n vbi memory resource done.\n");
|
||||
else
|
||||
tvafe_pr_info("vbi: can't get memory resource\n");
|
||||
vbi_dev->mem_start = res->start;
|
||||
vbi_dev->mem_size = res->end - res->start + 1;
|
||||
if (vbi_dev->mem_size > DECODER_VBI_SIZE)
|
||||
vbi_dev->mem_size = DECODER_VBI_SIZE;
|
||||
tvafe_pr_info(": start_addr is:0x%x, size is:0x%x\n",
|
||||
vbi_dev->mem_start, vbi_dev->mem_size);
|
||||
/*vbi memory alloc*/
|
||||
vbi_dev->mem_size = DECODER_VBI_SIZE;
|
||||
vbi_dev->pac_addr_start = dma_alloc_coherent(&pdev->dev,
|
||||
vbi_dev->mem_size, &vbi_dma_addr, GFP_KERNEL);
|
||||
vbi_dev->mem_start = (unsigned int)vbi_dma_addr;
|
||||
if (vbi_dev->pac_addr_start == NULL) {
|
||||
tvafe_pr_err(": dma_alloc_coherent failed!!!\n");
|
||||
goto fail_alloc_mem;
|
||||
}
|
||||
tvafe_pr_info("vbi: dma_alloc phy start_addr is:0x%x, size is:0x%x\n",
|
||||
vbi_dev->mem_start, vbi_dev->mem_size);
|
||||
|
||||
/* remap the package vbi hardware address for our conversion */
|
||||
vbi_dev->pac_addr_start = phys_to_virt(vbi_dev->mem_start);
|
||||
/*ioremap_nocache(vbi_dev->mem_start, vbi_dev->mem_size);*/
|
||||
memset(vbi_dev->pac_addr_start, 0, vbi_dev->mem_size);
|
||||
vbi_dev->mem_size = vbi_dev->mem_size/2;
|
||||
vbi_dev->mem_size >>= 4;
|
||||
vbi_dev->mem_size <<= 4;
|
||||
vbi_mem_start = vbi_dev->mem_start;
|
||||
vbi_dev->pac_addr_end = vbi_dev->pac_addr_start + vbi_dev->mem_size - 1;
|
||||
if (vbi_dev->pac_addr_start == NULL)
|
||||
tvafe_pr_err(": ioremap error!!!\n");
|
||||
else
|
||||
tvafe_pr_info(": vbi_dev->pac_addr_start=0x%p, end:0x%p, size:0x%x .......\n",
|
||||
vbi_dev->pac_addr_start, vbi_dev->pac_addr_end, vbi_dev->mem_size);
|
||||
tvafe_pr_info(": vbi_dev->pac_addr_start=0x%p, end:0x%p, size:0x%x\n",
|
||||
vbi_dev->pac_addr_start, vbi_dev->pac_addr_end,
|
||||
vbi_dev->mem_size);
|
||||
vbi_dev->pac_addr = vbi_dev->pac_addr_start;
|
||||
|
||||
mutex_init(&vbi_dev->mutex);
|
||||
@@ -1632,7 +1627,9 @@ static int vbi_remove(struct platform_device *pdev)
|
||||
mutex_destroy(&vbi_dev->mutex);
|
||||
tasklet_kill(&vbi_dev->tsklt_slicer);
|
||||
if (vbi_dev->pac_addr_start)
|
||||
iounmap(vbi_dev->pac_addr_start);
|
||||
dma_free_coherent(vbi_dev->dev, vbi_dev->mem_size,
|
||||
vbi_dev->pac_addr_start,
|
||||
(dma_addr_t)&vbi_dev->mem_start);
|
||||
vfree(vbi_dev->slicer);
|
||||
device_destroy(vbi_clsp, MKDEV(MAJOR(vbi_id), 0));
|
||||
cdev_del(&vbi_dev->cdev);
|
||||
|
||||
Reference in New Issue
Block a user