Message ID | 20221215185211.1560736-2-macroalpha82@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/panel: Add Magnachip D53E6EA8966 Panel Controller | expand |
Hi Chris, Thank you for the patch! Yet something to improve: [auto build test ERROR on next-20221215] [also build test ERROR on linus/master v6.1] [cannot apply to drm-misc/drm-misc-next drm/drm-next drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-tip/drm-tip drm-exynos/exynos-drm-next v6.1 v6.1-rc8 v6.1-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Chris-Morgan/drm-panel-Add-Magnachip-D53E6EA8966-Panel-Controller/20221216-025402 patch link: https://lore.kernel.org/r/20221215185211.1560736-2-macroalpha82%40gmail.com patch subject: [PATCH V6 1/4] drm: of: Add drm_of_get_dsi_bus helper function config: hexagon-randconfig-r041-20221215 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 98b13979fb05f3ed288a900deb843e7b27589e58) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/344107cc66e8043fc936e9bc818c38edbe225f6b git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Chris-Morgan/drm-panel-Add-Magnachip-D53E6EA8966-Panel-Controller/20221216-025402 git checkout 344107cc66e8043fc936e9bc818c38edbe225f6b # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/etnaviv/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): In file included from drivers/gpu/drm/etnaviv/etnaviv_drv.c:7: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) ^ In file included from drivers/gpu/drm/etnaviv/etnaviv_drv.c:7: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) ^ In file included from drivers/gpu/drm/etnaviv/etnaviv_drv.c:7: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ In file included from drivers/gpu/drm/etnaviv/etnaviv_drv.c:16: >> include/drm/drm_of.h:138:1: error: expected identifier or '(' { ^ 6 warnings and 1 error generated. vim +138 include/drm/drm_of.h 126 127 static inline int 128 drm_of_get_data_lanes_count_ep(const struct device_node *port, 129 int port_reg, int reg, 130 const unsigned int min, 131 const unsigned int max) 132 { 133 return -EINVAL; 134 } 135 static int drm_of_get_dsi_bus(struct device *dev, 136 struct mipi_dsi_host **dsi_host, 137 struct mipi_dsi_device_info *info); > 138 { 139 return -EINVAL; 140 } 141 #endif 142
Hi Chris, Thank you for the patch! Yet something to improve: [auto build test ERROR on next-20221215] [also build test ERROR on linus/master v6.1] [cannot apply to drm-misc/drm-misc-next drm/drm-next drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-tip/drm-tip drm-exynos/exynos-drm-next v6.1 v6.1-rc8 v6.1-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Chris-Morgan/drm-panel-Add-Magnachip-D53E6EA8966-Panel-Controller/20221216-025402 patch link: https://lore.kernel.org/r/20221215185211.1560736-2-macroalpha82%40gmail.com patch subject: [PATCH V6 1/4] drm: of: Add drm_of_get_dsi_bus helper function config: parisc-randconfig-r015-20221215 compiler: hppa-linux-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/344107cc66e8043fc936e9bc818c38edbe225f6b git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Chris-Morgan/drm-panel-Add-Magnachip-D53E6EA8966-Panel-Controller/20221216-025402 git checkout 344107cc66e8043fc936e9bc818c38edbe225f6b # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc SHELL=/bin/bash drivers/gpu/drm/imx/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): In file included from drivers/gpu/drm/imx/imx-drm-core.c:23: >> include/drm/drm_of.h:138:1: error: expected identifier or '(' before '{' token 138 | { | ^ include/drm/drm_of.h:135:12: warning: 'drm_of_get_dsi_bus' declared 'static' but never defined [-Wunused-function] 135 | static int drm_of_get_dsi_bus(struct device *dev, | ^~~~~~~~~~~~~~~~~~ vim +138 include/drm/drm_of.h 126 127 static inline int 128 drm_of_get_data_lanes_count_ep(const struct device_node *port, 129 int port_reg, int reg, 130 const unsigned int min, 131 const unsigned int max) 132 { 133 return -EINVAL; 134 } 135 static int drm_of_get_dsi_bus(struct device *dev, 136 struct mipi_dsi_host **dsi_host, 137 struct mipi_dsi_device_info *info); > 138 { 139 return -EINVAL; 140 } 141 #endif 142
On Thu, Dec 15, 2022 at 7:52 PM Chris Morgan <macroalpha82@gmail.com> wrote: > From: Chris Morgan <macromorgan@hotmail.com> > > Add helper function to find DSI host for devices where DSI panel is not > a minor of a DSI bus (such as the Samsung AMS495QA01 panel or the > official Raspberry Pi touchscreen display). > > Signed-off-by: Chris Morgan <macromorgan@hotmail.com> > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> The kernel test robot is complaining because the stub isn't compiling, because of a copy-paste error (superfluous semicolon). If you fix this up and resend I think we are ready with the patches! Yours, Linus Walleij
diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 7bbcb999bb75..7d89ac164069 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -10,6 +10,7 @@ #include <drm/drm_crtc.h> #include <drm/drm_device.h> #include <drm/drm_encoder.h> +#include <drm/drm_mipi_dsi.h> #include <drm/drm_of.h> #include <drm/drm_panel.h> @@ -493,3 +494,64 @@ int drm_of_get_data_lanes_count_ep(const struct device_node *port, return ret; } EXPORT_SYMBOL_GPL(drm_of_get_data_lanes_count_ep); + +/** + * drm_of_get_dsi_bus - find the DSI bus for a given device + * @dev: parent device of display (SPI, I2C) + * @dsi_host: DSI host to be populated + * @info: DSI device info to be updated with correct DSI node + * + * Given a panel device parented to a non-DSI device, follow the + * devicetree to find the correct DSI host node and populate the + * dsi_host with the correct host and info with the correct node. + * Returns zero if successful, -EPROBE_DEFER if the DSI host is + * found but not available, or -ENODEV otherwise. + */ +int drm_of_get_dsi_bus(struct device *dev, + struct mipi_dsi_host **dsi_host, + struct mipi_dsi_device_info *info) +{ + struct device_node *endpoint, *dsi_host_node; + + /* + * Get first endpoint child from device. + */ + endpoint = of_graph_get_next_endpoint(dev->of_node, NULL); + if (!endpoint) + return -ENODEV; + + /* + * Follow the first endpoint to get the DSI host node. + */ + dsi_host_node = of_graph_get_remote_port_parent(endpoint); + if (!dsi_host_node) + goto error; + + /* + * Get the DSI host from the DSI host node. If we get an error + * or the return is null assume we're not ready to probe just + * yet. Release the DSI host node since we're done with it. + */ + *dsi_host = of_find_mipi_dsi_host_by_node(dsi_host_node); + of_node_put(dsi_host_node); + if (IS_ERR_OR_NULL(*dsi_host)) { + of_node_put(endpoint); + return -EPROBE_DEFER; + } + + /* + * Set the node of the mipi_dsi_device_info to the correct node + * and then release the endpoint node since we're done with it. + */ + info->node = of_graph_get_remote_port(endpoint); + if (IS_ERR_OR_NULL(info->node)) + goto error; + + of_node_put(endpoint); + return 0; + +error: + of_node_put(endpoint); + return -ENODEV; +} +EXPORT_SYMBOL_GPL(drm_of_get_dsi_bus); diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index 10ab58c40746..a694ce71c3b2 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -15,6 +15,8 @@ struct drm_encoder; struct drm_panel; struct drm_bridge; struct device_node; +struct mipi_dsi_device_info; +struct mipi_dsi_host; /** * enum drm_lvds_dual_link_pixels - Pixel order of an LVDS dual-link connection @@ -56,6 +58,9 @@ int drm_of_get_data_lanes_count_ep(const struct device_node *port, int port_reg, int reg, const unsigned int min, const unsigned int max); +int drm_of_get_dsi_bus(struct device *dev, + struct mipi_dsi_host **dsi_host, + struct mipi_dsi_device_info *info); #else static inline uint32_t drm_of_crtc_port_mask(struct drm_device *dev, struct device_node *port) @@ -127,6 +132,12 @@ drm_of_get_data_lanes_count_ep(const struct device_node *port, { return -EINVAL; } +static int drm_of_get_dsi_bus(struct device *dev, + struct mipi_dsi_host **dsi_host, + struct mipi_dsi_device_info *info); +{ + return -EINVAL; +} #endif /*