From b70f43f91f70cd6fcbaf98a3c6a9f0a9ce383ea3 Mon Sep 17 00:00:00 2001 From: hwg Date: Wed, 4 Mar 2015 10:37:27 +0800 Subject: [PATCH 01/10] solve make clean error causeed by wifi driver --- drivers/net/wireless/Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile index ce75498e6466..fb61bb0007c9 100755 --- a/drivers/net/wireless/Makefile +++ b/drivers/net/wireless/Makefile @@ -10,11 +10,6 @@ obj-$(CONFIG_RTL8723AU) += rockchip_wlan/rtl8723au/ obj-$(CONFIG_RTL8723BU) += rockchip_wlan/rtl8723bu/ obj-$(CONFIG_RTL8812AU) += rockchip_wlan/rtl8812au/ obj-$(CONFIG_RKWIFI) += rockchip_wlan/rkwifi/ -obj-$(CONFIG_RDA5990) += rockchip_wlan/rda5990/ -obj-$(CONFIG_MT5931) += rockchip_wlan/mt5931/ -obj-$(CONFIG_MT5931_MT6622) += rockchip_wlan/mt5931/ obj-$(CONFIG_RTL8723BS) += rockchip_wlan/rtl8723bs/ obj-$(CONFIG_RTL8723BS_VQ0) += rockchip_wlan/rtl8723bs-vq0/ -obj-$(CONFIG_MTK_COMBO_WIFI) += rockchip_wlan/combo_mt66xx/ -obj-$(CONFIG_MTK_MT5931) += rockchip_wlan/mt5931_kk/ obj-$(CONFIG_ESP8089) += rockchip_wlan/esp8089/ From 82f69029fca78b9cf94680b671e3bf46186bdcf0 Mon Sep 17 00:00:00 2001 From: CMY Date: Thu, 25 Dec 2014 11:39:38 +0800 Subject: [PATCH 02/10] ion: export ion_device for some kernel modules (cherry picked from commit c32433f1e0847cffdee4e0c04c6d8ee7d64392bc) Signed-off-by: CMY --- drivers/staging/android/ion/rockchip/rockchip_ion.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion.c b/drivers/staging/android/ion/rockchip/rockchip_ion.c index db9c0d951da4..360881b02ab7 100755 --- a/drivers/staging/android/ion/rockchip/rockchip_ion.c +++ b/drivers/staging/android/ion/rockchip/rockchip_ion.c @@ -31,7 +31,9 @@ #include #endif -static struct ion_device *idev; +struct ion_device *rockchip_ion_dev; +EXPORT_SYMBOL(rockchip_ion_dev); + static int num_heaps; static struct ion_heap **heaps; @@ -109,7 +111,7 @@ static int rockchip_ion_populate_heap(struct ion_platform_heap *heap) struct ion_client *rockchip_ion_client_create(const char *name) { - return ion_client_create(idev, name); + return ion_client_create(rockchip_ion_dev, name); } EXPORT_SYMBOL(rockchip_ion_client_create); @@ -152,6 +154,7 @@ static long rockchip_custom_ioctl (struct ion_client *client, unsigned int cmd, static int rockchip_ion_probe(struct platform_device *pdev) { struct ion_platform_data *pdata; + struct ion_device *idev; int err; int i; @@ -178,6 +181,7 @@ static int rockchip_ion_probe(struct platform_device *pdev) kfree(heaps); return PTR_ERR(idev); } + rockchip_ion_dev = idev; /* create the heaps as specified in the board file */ for (i = 0; i < num_heaps; i++) { struct ion_platform_heap *heap_data = &pdata->heaps[i]; From f5c3bef8c6c3934b413b883ba65a95660b676c71 Mon Sep 17 00:00:00 2001 From: CMY Date: Wed, 7 Jan 2015 15:42:54 +0800 Subject: [PATCH 03/10] ARM64: ion: ION_IOC_GET_PHYS compat 32bit userspace app. Signed-off-by: CMY (cherry picked from commit 92ad540611e8599b7fb386a28793c77b410c81c6) Signed-off-by: CMY --- .../android/ion/rockchip/rockchip_ion.c | 131 ++++++++++++++---- 1 file changed, 106 insertions(+), 25 deletions(-) diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion.c b/drivers/staging/android/ion/rockchip/rockchip_ion.c index 360881b02ab7..b067c4f7a394 100755 --- a/drivers/staging/android/ion/rockchip/rockchip_ion.c +++ b/drivers/staging/android/ion/rockchip/rockchip_ion.c @@ -31,6 +31,8 @@ #include #endif +#include + struct ion_device *rockchip_ion_dev; EXPORT_SYMBOL(rockchip_ion_dev); @@ -115,37 +117,116 @@ struct ion_client *rockchip_ion_client_create(const char *name) } EXPORT_SYMBOL(rockchip_ion_client_create); +struct compat_ion_phys_data { + compat_int_t handle; + compat_ulong_t phys; + compat_ulong_t size; +}; + +#define COMPAT_ION_IOC_GET_PHYS _IOWR(ION_IOC_ROCKCHIP_MAGIC, 0, \ + struct compat_ion_phys_data) + +static int compat_get_ion_phys_data( + struct compat_ion_phys_data __user *data32, + struct ion_phys_data __user *data) +{ + compat_ulong_t l; + compat_int_t i; + int err; + + err = get_user(i, &data32->handle); + err |= put_user(i, &data->handle); + err |= get_user(l, &data32->phys); + err |= put_user(l, &data->phys); + err |= get_user(l, &data32->size); + err |= put_user(l, &data->size); + + return err; +}; + +static int compat_put_ion_phys_data( + struct compat_ion_phys_data __user *data32, + struct ion_phys_data __user *data) +{ + compat_ulong_t l; + compat_int_t i; + int err; + + err = get_user(i, &data->handle); + err |= put_user(i, &data32->handle); + err |= get_user(l, &data->phys); + err |= put_user(l, &data32->phys); + err |= get_user(l, &data->size); + err |= put_user(l, &data32->size); + + return err; +}; + +static int rockchip_ion_get_phys(struct ion_client *client, unsigned long arg) +{ + struct ion_phys_data data; + struct ion_handle *handle; + int ret; + + if (copy_from_user(&data, (void __user *)arg, + sizeof(struct ion_phys_data))) + return -EFAULT; + + handle = ion_handle_get_by_id(client, data.handle); + if (IS_ERR(handle)) + return PTR_ERR(handle); + + ret = ion_phys(client, handle, &data.phys, (size_t *)&data.size); + pr_debug("ret=%d, phys=0x%lX\n", ret, data.phys); + ion_handle_put(handle); + if (ret < 0) + return ret; + if (copy_to_user((void __user *)arg, &data, + sizeof(struct ion_phys_data))) + return -EFAULT; + + return 0; +} + static long rockchip_custom_ioctl (struct ion_client *client, unsigned int cmd, unsigned long arg) { - pr_debug("[%s %d] cmd=%X\n", __func__, __LINE__, cmd); + long ret; - switch (cmd) { - case ION_IOC_GET_PHYS: - { - struct ion_phys_data data; - struct ion_handle *handle; - int ret; - - if (copy_from_user(&data, (void __user *)arg, - sizeof(struct ion_phys_data))) - return -EFAULT; + pr_debug("%s(%d): cmd=%x\n", __func__, __LINE__, cmd); - handle = ion_handle_get_by_id(client, data.handle); - if (IS_ERR(handle)) - return PTR_ERR(handle); + if (is_compat_task()) { + switch (cmd) { + case COMPAT_ION_IOC_GET_PHYS: { + struct compat_ion_phys_data __user *data32; + struct ion_phys_data __user *data; + int err; - ret = ion_phys(client, handle, &data.phys, (size_t *)&data.size); - pr_debug("ret=%d, phys=0x%lX\n", ret, data.phys); - ion_handle_put(handle); - if(ret < 0) - return ret; - if (copy_to_user((void __user *)arg, &data, sizeof(struct ion_phys_data))) - return -EFAULT; - break; - } - default: - return -ENOTTY; + data32 = compat_ptr(arg); + data = compat_alloc_user_space(sizeof(*data)); + if (data == NULL) + return -EFAULT; + + err = compat_get_ion_phys_data(data32, data); + if (err) + return err; + + ret = rockchip_ion_get_phys(client, + (unsigned long)data); + + err = compat_put_ion_phys_data(data32, data); + return ret ? ret : err; + } + default: + return -ENOTTY; + } + } else { + switch (cmd) { + case ION_IOC_GET_PHYS: + return rockchip_ion_get_phys(client, arg); + default: + return -ENOTTY; + } } return 0; From dcd1c0a410d8246d290102f078493a77ad06cf2e Mon Sep 17 00:00:00 2001 From: CMY Date: Sat, 14 Feb 2015 18:05:01 +0800 Subject: [PATCH 04/10] rk: ion: assign sg's dma_length in ion allocation if CONFIG_NEED_SG_DMA_LENGTH is set (cherry picked from commit c85ce1ade533fe0d02b7539dbe85d55b69386125) Signed-off-by: CMY --- drivers/staging/android/ion/ion.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index c808d9fe51e8..3a97ad0367bb 100755 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -265,8 +265,12 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap, allocation via dma_map_sg. The implicit contract here is that memory comming from the heaps is ready for dma, ie if it has a cached mapping that mapping has been invalidated */ - for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->nents, i) + for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->nents, i) { sg_dma_address(sg) = sg_phys(sg); +#ifdef CONFIG_NEED_SG_DMA_LENGTH + sg_dma_len(sg) = sg->length; +#endif + } mutex_lock(&dev->buffer_lock); ion_buffer_add(dev, buffer); mutex_unlock(&dev->buffer_lock); From 824538301d6e0a077d93b0ec5fe4c759f77cf6b5 Mon Sep 17 00:00:00 2001 From: CMY Date: Fri, 27 Feb 2015 17:59:00 +0800 Subject: [PATCH 05/10] rk: ion: allow the cacheable buffer to map iommu Signed-off-by: CMY (cherry picked from commit db95a55ffa214b0bab8643454875a42d655a8ad7) Signed-off-by: CMY --- drivers/staging/android/ion/ion.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index 3a97ad0367bb..0271c19ced2c 100755 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -811,12 +811,6 @@ int ion_map_iommu(struct device *iommu_dev, struct ion_client *client, mutex_lock(&buffer->lock); - if (ion_buffer_cached(buffer)) { - pr_err("%s: Cannot map iommu as cached.\n", __func__); - ret = -EINVAL; - goto out; - } - if (!handle->buffer->heap->ops->map_iommu) { pr_err("%s: map_iommu is not implemented by this heap.\n", __func__); From 8d7aa53d056701c018c519004919861b2f776044 Mon Sep 17 00:00:00 2001 From: CMY Date: Mon, 2 Mar 2015 11:33:35 +0800 Subject: [PATCH 06/10] rk: uboot_mem_reserve: fix print format Signed-off-by: CMY (cherry picked from commit c9bbb3032c50e9b9ecaca58a4aa06ef4192bdbba) Signed-off-by: CMY --- arch/arm/mach-rockchip/common.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/arch/arm/mach-rockchip/common.c b/arch/arm/mach-rockchip/common.c index e2fa463f8c56..fab771454b22 100755 --- a/arch/arm/mach-rockchip/common.c +++ b/arch/arm/mach-rockchip/common.c @@ -302,15 +302,16 @@ phys_addr_t uboot_logo_offset=0; void __init rockchip_uboot_mem_reserve(void) { - if (uboot_logo_size) { - if (!memblock_is_region_reserved(uboot_logo_base, uboot_logo_size) - && !memblock_reserve(uboot_logo_base, uboot_logo_size)){ - pr_info("%s: reserve %zx@%zx for uboot logo\n", __func__, - uboot_logo_size, uboot_logo_base); - } else { - pr_err("%s: reserve of %zx@%zx failed\n", __func__, - uboot_logo_size, uboot_logo_base); - } + if (uboot_logo_size=0) + return; + + if (!memblock_is_region_reserved(uboot_logo_base, uboot_logo_size) + && !memblock_reserve(uboot_logo_base, uboot_logo_size)){ + pr_info("%s: reserve %pa@%pa for uboot logo\n", __func__, + &uboot_logo_size, &uboot_logo_base); + } else { + pr_err("%s: reserve of %pa@%pa failed\n", __func__, + &uboot_logo_size, &uboot_logo_base); } } @@ -326,8 +327,8 @@ static int __init rockchip_uboot_logo_setup(char *p) } } - pr_info("%s: mem: %zx@%zx, offset:%zx\n", __func__, - uboot_logo_size, uboot_logo_base, uboot_logo_offset); + pr_info("%s: mem: %pa@%pa, offset:%pa\n", __func__, + &uboot_logo_size, &uboot_logo_base, &uboot_logo_offset); return 0; } @@ -342,8 +343,8 @@ static int __init rockchip_uboot_mem_late_init(void) addr = PAGE_ALIGN(uboot_logo_base); end = (uboot_logo_base+uboot_logo_size)&PAGE_MASK; - pr_info("%s: Freeing uboot logo memory: %zx@%zx\n", __func__, - uboot_logo_size, uboot_logo_base); + pr_info("%s: Freeing uboot logo memory: %pa@%pa\n", __func__, + &uboot_logo_size, &uboot_logo_base); memblock_free(uboot_logo_base, uboot_logo_size); From 2e0f7d4d4904a5cf72af9785ceabed0dce402984 Mon Sep 17 00:00:00 2001 From: CMY Date: Mon, 2 Mar 2015 15:42:55 +0800 Subject: [PATCH 07/10] rk: uboot_mem_reserve: lost a '=' in 'if' statement (cherry picked from commit b9721d0365d9e88d0c16c3f0c2aff4b2c09c9dec) Signed-off-by: CMY --- arch/arm/mach-rockchip/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-rockchip/common.c b/arch/arm/mach-rockchip/common.c index fab771454b22..061e2b7240b7 100755 --- a/arch/arm/mach-rockchip/common.c +++ b/arch/arm/mach-rockchip/common.c @@ -302,7 +302,7 @@ phys_addr_t uboot_logo_offset=0; void __init rockchip_uboot_mem_reserve(void) { - if (uboot_logo_size=0) + if (uboot_logo_size==0) return; if (!memblock_is_region_reserved(uboot_logo_base, uboot_logo_size) From c4bc04acf050030d6288504f5b96b8e3d3622c6d Mon Sep 17 00:00:00 2001 From: CMY Date: Tue, 3 Mar 2015 13:56:52 +0800 Subject: [PATCH 08/10] rk: ion: fix compile warnning Signed-off-by: CMY (cherry picked from commit ee9707a058c52a0d0c27f5804db9e9e96075d363) Signed-off-by: CMY --- drivers/staging/android/ion/ion.c | 4 ++-- drivers/staging/android/trace/ion.h | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index 0271c19ced2c..44178ca69a75 100755 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -1360,7 +1360,7 @@ static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) pr_err("%s: failure mapping buffer to userspace\n", __func__); - trace_ion_buffer_mmap("", (unsigned int)buffer, buffer->size, + trace_ion_buffer_mmap("", (void*)buffer, buffer->size, vma->vm_start, vma->vm_end); return ret; @@ -1370,7 +1370,7 @@ int ion_munmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) { struct ion_buffer *buffer = dmabuf->priv; - trace_ion_buffer_munmap("", (unsigned int)buffer, buffer->size, + trace_ion_buffer_munmap("", (void*)buffer, buffer->size, vma->vm_start, vma->vm_end); return 0; diff --git a/drivers/staging/android/trace/ion.h b/drivers/staging/android/trace/ion.h index 67bf9d322d46..509d768da956 100644 --- a/drivers/staging/android/trace/ion.h +++ b/drivers/staging/android/trace/ion.h @@ -147,12 +147,12 @@ DEFINE_EVENT(ion_kmap_op, ion_kernel_map, TP_ARGS(client, buffer, size, kaddr)); DECLARE_EVENT_CLASS(ion_mmap_op, - TP_PROTO(const char* client, unsigned int buf, unsigned int size, + TP_PROTO(const char* client, void* buf, unsigned int size, unsigned long vm_start, unsigned long vm_end), TP_ARGS(client, buf, size, vm_start, vm_end), TP_STRUCT__entry( __string(client, client) - __field(unsigned int, buf) + __field(void*, buf) __field(unsigned int, size) __field(unsigned long, vm_start) __field(unsigned long, vm_end) @@ -164,18 +164,18 @@ DECLARE_EVENT_CLASS(ion_mmap_op, __entry->vm_start = vm_start; __entry->vm_end = vm_end; ), - TP_printk("client=%s,buffer=%08x:%d,vma[%08lx:%08lx]", + TP_printk("client=%s,buffer=%p:%d,vma[%08lx:%08lx]", __get_str(client), __entry->buf, __entry->size, __entry->vm_start, __entry->vm_end) ); DEFINE_EVENT(ion_mmap_op, ion_buffer_mmap, - TP_PROTO(const char* client, unsigned int buf, unsigned int size, + TP_PROTO(const char* client, void* buf, unsigned int size, unsigned long vm_start, unsigned long vm_end), TP_ARGS(client, buf, size, vm_start, vm_end)); DEFINE_EVENT(ion_mmap_op, ion_buffer_munmap, - TP_PROTO(const char* client, unsigned int buf, unsigned int size, + TP_PROTO(const char* client, void* buf, unsigned int size, unsigned long vm_start, unsigned long vm_end), TP_ARGS(client, buf, size, vm_start, vm_end)); From 65297ef11ca97275634b51b8c389e2d87657b842 Mon Sep 17 00:00:00 2001 From: "Huang, Tao" Date: Tue, 10 Feb 2015 16:48:02 +0800 Subject: [PATCH 09/10] rk: ion: fix compilation error without CONFIG_COMPAT Signed-off-by: Huang, Tao (cherry picked from commit 52315d4d540dd3ef6db618b6856ceee0b5af8d98) Signed-off-by: CMY --- drivers/staging/android/ion/rockchip/rockchip_ion.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion.c b/drivers/staging/android/ion/rockchip/rockchip_ion.c index b067c4f7a394..f75dc757f9b3 100755 --- a/drivers/staging/android/ion/rockchip/rockchip_ion.c +++ b/drivers/staging/android/ion/rockchip/rockchip_ion.c @@ -117,6 +117,7 @@ struct ion_client *rockchip_ion_client_create(const char *name) } EXPORT_SYMBOL(rockchip_ion_client_create); +#ifdef CONFIG_COMPAT struct compat_ion_phys_data { compat_int_t handle; compat_ulong_t phys; @@ -161,6 +162,7 @@ static int compat_put_ion_phys_data( return err; }; +#endif static int rockchip_ion_get_phys(struct ion_client *client, unsigned long arg) { @@ -196,6 +198,7 @@ static long rockchip_custom_ioctl (struct ion_client *client, unsigned int cmd, pr_debug("%s(%d): cmd=%x\n", __func__, __LINE__, cmd); if (is_compat_task()) { +#ifdef CONFIG_COMPAT switch (cmd) { case COMPAT_ION_IOC_GET_PHYS: { struct compat_ion_phys_data __user *data32; @@ -220,6 +223,7 @@ static long rockchip_custom_ioctl (struct ion_client *client, unsigned int cmd, default: return -ENOTTY; } +#endif } else { switch (cmd) { case ION_IOC_GET_PHYS: From 772873d13f9cf7599ab60099cd43e54826949021 Mon Sep 17 00:00:00 2001 From: CMY Date: Wed, 4 Mar 2015 09:27:51 +0800 Subject: [PATCH 10/10] rk: ion: fix compilation warning without CONFIG_COMPAT Signed-off-by: CMY --- drivers/staging/android/ion/rockchip/rockchip_ion.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion.c b/drivers/staging/android/ion/rockchip/rockchip_ion.c index f75dc757f9b3..ea7b7334a6e5 100755 --- a/drivers/staging/android/ion/rockchip/rockchip_ion.c +++ b/drivers/staging/android/ion/rockchip/rockchip_ion.c @@ -193,12 +193,11 @@ static int rockchip_ion_get_phys(struct ion_client *client, unsigned long arg) static long rockchip_custom_ioctl (struct ion_client *client, unsigned int cmd, unsigned long arg) { - long ret; - pr_debug("%s(%d): cmd=%x\n", __func__, __LINE__, cmd); if (is_compat_task()) { #ifdef CONFIG_COMPAT + long ret; switch (cmd) { case COMPAT_ION_IOC_GET_PHYS: { struct compat_ion_phys_data __user *data32;