From 3afbc01cb7f48c3ba9694ba2fcef1ff7d3a77719 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Tue, 23 May 2023 17:45:59 +0800 Subject: [PATCH 1/8] drm/bridge: maxim-max96745: include drm_edid.h drivers/gpu/drm/bridge/maxim-max96745.c:168:16: error: implicit declaration of function 'drm_add_modes_noedid' Signed-off-by: Tao Huang Change-Id: I6213205f51f125659da40fa8d04a3a9bb39c9d0c --- drivers/gpu/drm/bridge/maxim-max96745.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/bridge/maxim-max96745.c b/drivers/gpu/drm/bridge/maxim-max96745.c index 9755f129f519..2c757e2c2fff 100644 --- a/drivers/gpu/drm/bridge/maxim-max96745.c +++ b/drivers/gpu/drm/bridge/maxim-max96745.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include From cc44c1ba669b176e64d8cc49aba6650b5535a159 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Tue, 23 May 2023 17:47:44 +0800 Subject: [PATCH 2/8] drm/bridge: maxim-max96755: Add missing break in max96755f_link_parse drivers/gpu/drm/bridge/maxim-max96755f.c:469:2: error: unannotated fall-through between switch labels [-Werror,-Wimplicit-fallthrough] case 1: ^ Signed-off-by: Tao Huang Change-Id: I60ad30cc810080f0a0d62b1e805e37b1c532e9a6 --- drivers/gpu/drm/bridge/maxim-max96755f.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/bridge/maxim-max96755f.c b/drivers/gpu/drm/bridge/maxim-max96755f.c index bfabb61c166a..a61395b876f0 100644 --- a/drivers/gpu/drm/bridge/maxim-max96755f.c +++ b/drivers/gpu/drm/bridge/maxim-max96755f.c @@ -466,10 +466,12 @@ static int max96755f_link_parse(struct max96755f_bridge *ser) switch (nr) { case 2: ser->split_mode = true; + break; case 1: break; default: ret = -EINVAL; + break; } return ret; From 3fbf486ac5d371b75f16d1610413825589e233ae Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Tue, 23 May 2023 17:50:42 +0800 Subject: [PATCH 3/8] drm/rockchip: rk628: include media-bus-format.h Signed-off-by: Tao Huang Change-Id: I7608e943c666b047ad1ca6c3c33a699b6e8e534b --- drivers/gpu/drm/rockchip/rk628/rk628_gvi.c | 1 + drivers/gpu/drm/rockchip/rk628/rk628_lvds.c | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c b/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c index a3c92195e2dd..421f6530971a 100644 --- a/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c +++ b/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c b/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c index 61326b1477cc..57496ff9dec7 100644 --- a/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c +++ b/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include From 08a98cf5bfa9944d5a65ad04a938ed00e4fe29cc Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Tue, 23 May 2023 17:52:00 +0800 Subject: [PATCH 4/8] drm/rockchip: rk628: include drm/display/drm_dp_helper.h Signed-off-by: Tao Huang Change-Id: I57d428d9b0effb6819a709b208eb5a2597c577e7 --- drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c b/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c index 7b2cf22f5742..b74ea238dc00 100755 --- a/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c +++ b/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #define REG(x) ((x) + 0x30000) From a176f67f42fda36ddbec6e7fee3d09829a5dd8ab Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Tue, 23 May 2023 17:53:00 +0800 Subject: [PATCH 5/8] input: touchscreen: elan: Add missing break in elan_iap_ioctl drivers/input/touchscreen/elan/elan_ts.c:1471:2: error: unannotated fall-through between switch labels [-Werror,-Wimplicit-fallthrough] default: ^ Signed-off-by: Tao Huang Change-Id: I7b8d9d1d90d2fff2308ae0f9663447af6fd91569 --- drivers/input/touchscreen/elan/elan_ts.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/elan/elan_ts.c b/drivers/input/touchscreen/elan/elan_ts.c index 131e6fd55035..7fa1e6ec0f0d 100644 --- a/drivers/input/touchscreen/elan/elan_ts.c +++ b/drivers/input/touchscreen/elan/elan_ts.c @@ -1463,11 +1463,12 @@ static long elan_iap_ioctl( struct file *filp, unsigned int cmd, unsigned long a case IOCTL_I2C_INT: put_user(gpio_get_value(ts->hw_info.intr_gpio), ip); break; - case IOCTL_USER_HANDLE_IRQ: - ts->user_handle_irq = 1; - break; - case IOCTL_KERN_HANDLE_IRQ: - ts->user_handle_irq = 0; + case IOCTL_USER_HANDLE_IRQ: + ts->user_handle_irq = 1; + break; + case IOCTL_KERN_HANDLE_IRQ: + ts->user_handle_irq = 0; + break; default: break; } From 77a20bac7680d20c9d0e1f144a5e38805023851c Mon Sep 17 00:00:00 2001 From: Vijayanand Jitta Date: Thu, 25 Feb 2021 17:23:25 +0530 Subject: [PATCH 6/8] ANDROID: dma-buf: add dma_buf_get_each function Add and export dma_buf_get_each function which helps in traversing the db_list, this will be used by the minidump module to get dmabuf info. Bug: 267250898 Change-Id: Ie24788fcf9cf0a49316cb871dcb9191e8084ccde Signed-off-by: Vijayanand Jitta (cherry picked from commit 602e4e28d89ca9c8295a904b16f4f3caeda80b7e) [Yunfei: Change namespace get_each_dmabuf to dma_buf_get_each] Signed-off-by: Yunfei Wang Signed-off-by: Jaskaran Singh Signed-off-by: Simon Xue --- drivers/dma-buf/dma-buf.c | 33 +++++++++++++++++++++++++++++++++ include/linux/dma-buf.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index f740eeaede5d..c138ddd10a3a 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -43,6 +43,39 @@ struct dma_buf_list { static struct dma_buf_list db_list; +/** + * dma_buf_get_each - Helps in traversing the db_list and calls the + * callback function which can extract required info out of each + * dmabuf. + * The db_list needs to be locked to prevent the db_list from being + * dynamically updated during the traversal process. + * + * @callback: [in] Handle for each dmabuf buffer in db_list. + * @private: [in] User-defined, used to pass in when callback is + * called. + * + * Returns 0 on success, otherwise returns a non-zero value for + * mutex_lock_interruptible or callback. + */ +int dma_buf_get_each(int (*callback)(const struct dma_buf *dmabuf, + void *private), void *private) +{ + struct dma_buf *buf; + int ret = mutex_lock_interruptible(&db_list.lock); + + if (ret) + return ret; + + list_for_each_entry(buf, &db_list.head, list_node) { + ret = callback(buf, private); + if (ret) + break; + } + mutex_unlock(&db_list.lock); + return ret; +} +EXPORT_SYMBOL_NS_GPL(dma_buf_get_each, MINIDUMP); + #if IS_ENABLED(CONFIG_RK_DMABUF_DEBUG) static size_t db_total_size; static size_t db_peak_size; diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h index 747d539a7126..485b97f29697 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -620,6 +620,8 @@ dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach) return !!attach->importer_ops; } +int dma_buf_get_each(int (*callback)(const struct dma_buf *dmabuf, + void *private), void *private); struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, struct device *dev); struct dma_buf_attachment * From 0004c2dd16e29058b8693fe543dad6357756f34f Mon Sep 17 00:00:00 2001 From: Simon Xue Date: Tue, 23 May 2023 11:27:21 +0800 Subject: [PATCH 7/8] dma-buf: rk-debug: update namespace get_each_dmabuf to dma_buf_get_each Change-Id: I6daaf1b5dd661c8545acdd52d215cd3548fe848e Signed-off-by: Simon Xue --- drivers/dma-buf/rk_heaps/rk-dma-heap.c | 4 ++-- drivers/soc/rockchip/Kconfig | 2 +- drivers/soc/rockchip/rk_dmabuf_procfs.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/dma-buf/rk_heaps/rk-dma-heap.c b/drivers/dma-buf/rk_heaps/rk-dma-heap.c index d93d7cd3097d..bb217dfe91df 100644 --- a/drivers/dma-buf/rk_heaps/rk-dma-heap.c +++ b/drivers/dma-buf/rk_heaps/rk-dma-heap.c @@ -613,7 +613,7 @@ static int rk_dma_heap_debug_show(struct seq_file *s, void *unused) mutex_lock(&rk_heap_list_lock); list_for_each_entry(heap, &rk_heap_list, list) { heap->s = s; - get_each_dmabuf(rk_dma_heap_dump_dmabuf, heap); + dma_buf_get_each(rk_dma_heap_dump_dmabuf, heap); rk_dma_heap_dump_contig(heap); total += heap->total_size; } @@ -662,7 +662,7 @@ static int rk_dma_heap_proc_show(struct seq_file *s, void *unused) mutex_lock(&rk_heap_list_lock); list_for_each_entry(heap, &rk_heap_list, list) { heap->s = s; - get_each_dmabuf(rk_dma_heap_dump_dmabuf, heap); + dma_buf_get_each(rk_dma_heap_dump_dmabuf, heap); rk_dma_heap_dump_contig(heap); total += heap->total_size; } diff --git a/drivers/soc/rockchip/Kconfig b/drivers/soc/rockchip/Kconfig index 0a6a11ca9549..40289d854b9a 100644 --- a/drivers/soc/rockchip/Kconfig +++ b/drivers/soc/rockchip/Kconfig @@ -276,7 +276,7 @@ config RK_DMABUF_PROCFS depends on PROC_FS help Turns on this to create a procfs debug interface for dma-buf, support - get information from db_list by get_each_dmabuf. + get information from db_list by dma_buf_get_each. If unsure, say "N". diff --git a/drivers/soc/rockchip/rk_dmabuf_procfs.c b/drivers/soc/rockchip/rk_dmabuf_procfs.c index 943b196e2b9c..0ca0dbde0545 100644 --- a/drivers/soc/rockchip/rk_dmabuf_procfs.c +++ b/drivers/soc/rockchip/rk_dmabuf_procfs.c @@ -118,7 +118,7 @@ static int rk_dmabuf_sgt_show(struct seq_file *s, void *v) seq_printf(s, "%16s %-16s %-16s %14s %8s\n\n", "DMABUF", "NAME", "EXPORT", "SIZE:KiB", "SGLIST"); - return get_each_dmabuf(rk_dmabuf_cb, s); + return dma_buf_get_each(rk_dmabuf_cb, s); } static int rk_dmabuf_dev_show(struct seq_file *s, void *v) @@ -126,7 +126,7 @@ static int rk_dmabuf_dev_show(struct seq_file *s, void *v) seq_printf(s, "%16s %-16s %-16s %14s %8s\n\n", "DMABUF", "NAME", "EXPORT", "SIZE:KiB", "AttachedDevices"); - return get_each_dmabuf(rk_dmabuf_cb3, s); + return dma_buf_get_each(rk_dmabuf_cb3, s); } static int rk_dmabuf_size_show(struct seq_file *s, void *v) From 36b0a9a80e8793b5475dc7f05fd6d7468d391a8d Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Fri, 7 Apr 2023 11:14:43 +0800 Subject: [PATCH 8/8] drm/rockchp: dw-dp: move aux_register to bind Signed-off-by: Sandy Huang Change-Id: I1906419841eb69958da780382e424008e7422490 --- drivers/gpu/drm/rockchip/dw-dp.c | 36 ++++++++++++++------------------ 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 75c75c287543..90c8093fb476 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -3854,13 +3854,6 @@ static void dw_dp_unregister_audio_driver(void *data) } } -static void dw_dp_aux_unregister(void *data) -{ - struct dw_dp *dp = data; - - drm_dp_aux_unregister(&dp->aux); -} - static int dw_dp_bind(struct device *dev, struct device *master, void *data) { struct dw_dp *dp = dev_get_drvdata(dev); @@ -3869,6 +3862,14 @@ static int dw_dp_bind(struct device *dev, struct device *master, void *data) struct drm_bridge *bridge = &dp->bridge; int ret; + dp->aux.dev = dev; + dp->aux.drm_dev = drm_dev; + dp->aux.name = dev_name(dev); + dp->aux.transfer = dw_dp_aux_transfer; + ret = drm_dp_aux_register(&dp->aux); + if (ret) + return ret; + if (!dp->left) { drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS); drm_encoder_helper_add(encoder, &dw_dp_encoder_helper_funcs); @@ -3879,7 +3880,7 @@ static int dw_dp_bind(struct device *dev, struct device *master, void *data) ret = drm_bridge_attach(encoder, bridge, NULL, 0); if (ret) { dev_err(dev, "failed to attach bridge: %d\n", ret); - return ret; + goto error_unregister_aux; } } @@ -3892,7 +3893,7 @@ static int dw_dp_bind(struct device *dev, struct device *master, void *data) ret = drm_bridge_attach(encoder, &secondary->bridge, last_bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) - return ret; + goto error_unregister_aux; } pm_runtime_enable(dp->dev); @@ -3903,12 +3904,18 @@ static int dw_dp_bind(struct device *dev, struct device *master, void *data) enable_irq(dp->hpd_irq); return 0; + +error_unregister_aux: + drm_dp_aux_unregister(&dp->aux); + return ret; } static void dw_dp_unbind(struct device *dev, struct device *master, void *data) { struct dw_dp *dp = dev_get_drvdata(dev); + drm_dp_aux_unregister(&dp->aux); + if (dp->hpd_gpio) disable_irq(dp->hpd_irq); disable_irq(dp->irq); @@ -4127,17 +4134,6 @@ static int dw_dp_probe(struct platform_device *pdev) if (ret) return ret; - dp->aux.dev = dev; - dp->aux.name = dev_name(dev); - dp->aux.transfer = dw_dp_aux_transfer; - ret = drm_dp_aux_register(&dp->aux); - if (ret) - return ret; - - ret = devm_add_action_or_reset(dev, dw_dp_aux_unregister, dp); - if (ret) - return ret; - dp->bridge.of_node = dev->of_node; dp->bridge.funcs = &dw_dp_bridge_funcs; dp->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID |