Message ID | 20230124094154.2282778-3-jani.nikula@intel.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | None | expand |
Hi Jani, I love your patch! Yet something to improve: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230124094154.2282778-3-jani.nikula%40intel.com patch subject: [Intel-gfx] [PATCH 3/3] drm/connector: move ELD and video/audio latencies to display info config: arm-defconfig (https://download.01.org/0day-ci/archive/20230124/202301242049.eKzx7RzZ-lkp@intel.com/config) compiler: arm-linux-gnueabi-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/1e92b5478cfc1b0df66153652111117e9548b0d5 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 git checkout 1e92b5478cfc1b0df66153652111117e9548b0d5 # 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=arm olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/gpu/ 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 >>): drivers/gpu/drm/tegra/hdmi.c: In function 'tegra_hdmi_write_eld': >> drivers/gpu/drm/tegra/hdmi.c:620:60: error: 'struct drm_connector' has no member named 'eld' 620 | size_t length = drm_eld_size(hdmi->output.connector.eld), i; | ^ drivers/gpu/drm/tegra/hdmi.c:624:72: error: 'struct drm_connector' has no member named 'eld' 624 | tegra_hdmi_writel(hdmi, i << 8 | hdmi->output.connector.eld[i], | ^ -- drivers/gpu/drm/tegra/sor.c: In function 'tegra_sor_write_eld': >> drivers/gpu/drm/tegra/sor.c:1951:59: error: 'struct drm_connector' has no member named 'eld' 1951 | size_t length = drm_eld_size(sor->output.connector.eld), i; | ^ drivers/gpu/drm/tegra/sor.c:1954:69: error: 'struct drm_connector' has no member named 'eld' 1954 | tegra_sor_writel(sor, i << 8 | sor->output.connector.eld[i], | ^ vim +620 drivers/gpu/drm/tegra/hdmi.c edec4af4c3d6d2 Thierry Reding 2012-11-15 617 5234549b93aa2a Thierry Reding 2015-08-07 618 static void tegra_hdmi_write_eld(struct tegra_hdmi *hdmi) 5234549b93aa2a Thierry Reding 2015-08-07 619 { 5234549b93aa2a Thierry Reding 2015-08-07 @620 size_t length = drm_eld_size(hdmi->output.connector.eld), i; 5234549b93aa2a Thierry Reding 2015-08-07 621 u32 value; edec4af4c3d6d2 Thierry Reding 2012-11-15 622 5234549b93aa2a Thierry Reding 2015-08-07 623 for (i = 0; i < length; i++) 5234549b93aa2a Thierry Reding 2015-08-07 624 tegra_hdmi_writel(hdmi, i << 8 | hdmi->output.connector.eld[i], 5234549b93aa2a Thierry Reding 2015-08-07 625 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); edec4af4c3d6d2 Thierry Reding 2012-11-15 626 5234549b93aa2a Thierry Reding 2015-08-07 627 /* 5234549b93aa2a Thierry Reding 2015-08-07 628 * The HDA codec will always report an ELD buffer size of 96 bytes and 5234549b93aa2a Thierry Reding 2015-08-07 629 * the HDA codec driver will check that each byte read from the buffer 5234549b93aa2a Thierry Reding 2015-08-07 630 * is valid. Therefore every byte must be written, even if no 96 bytes 5234549b93aa2a Thierry Reding 2015-08-07 631 * were parsed from EDID. 5234549b93aa2a Thierry Reding 2015-08-07 632 */ 5234549b93aa2a Thierry Reding 2015-08-07 633 for (i = length; i < HDMI_ELD_BUFFER_SIZE; i++) 5234549b93aa2a Thierry Reding 2015-08-07 634 tegra_hdmi_writel(hdmi, i << 8 | 0, 5234549b93aa2a Thierry Reding 2015-08-07 635 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); 5234549b93aa2a Thierry Reding 2015-08-07 636 5234549b93aa2a Thierry Reding 2015-08-07 637 value = SOR_AUDIO_HDA_PRESENSE_VALID | SOR_AUDIO_HDA_PRESENSE_PRESENT; 5234549b93aa2a Thierry Reding 2015-08-07 638 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE); edec4af4c3d6d2 Thierry Reding 2012-11-15 639 } edec4af4c3d6d2 Thierry Reding 2012-11-15 640
Hi Jani, I love your patch! Yet something to improve: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230124094154.2282778-3-jani.nikula%40intel.com patch subject: [Intel-gfx] [PATCH 3/3] drm/connector: move ELD and video/audio latencies to display info config: hexagon-randconfig-r045-20230123 (https://download.01.org/0day-ci/archive/20230124/202301242053.vCYJQIUE-lkp@intel.com/config) compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 4196ca3278f78c6e19246e54ab0ecb364e37d66a) 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/1e92b5478cfc1b0df66153652111117e9548b0d5 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 git checkout 1e92b5478cfc1b0df66153652111117e9548b0d5 # 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 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/bridge/ drivers/gpu/drm/i2c/ 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/bridge/sii902x.c:17: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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/bridge/sii902x.c:17: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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/bridge/sii902x.c:17: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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); ~~~~~~~~~~ ^ >> drivers/gpu/drm/bridge/sii902x.c:736:33: error: no member named 'eld' in 'struct drm_connector' memcpy(buf, sii902x->connector.eld, ~~~~~~~~~~~~~~~~~~ ^ drivers/gpu/drm/bridge/sii902x.c:737:39: error: no member named 'eld' in 'struct drm_connector' min(sizeof(sii902x->connector.eld), len)); ~~~~~~~~~~~~~~~~~~ ^ include/linux/minmax.h:67:33: note: expanded from macro 'min' #define min(x, y) __careful_cmp(x, y, <) ^ include/linux/minmax.h:36:35: note: expanded from macro '__careful_cmp' __builtin_choose_expr(__safe_cmp(x, y), \ ^ include/linux/minmax.h:26:16: note: expanded from macro '__safe_cmp' (__typecheck(x, y) && __no_side_effects(x, y)) ^ include/linux/minmax.h:20:21: note: expanded from macro '__typecheck' (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1))) ^ drivers/gpu/drm/bridge/sii902x.c:737:39: error: no member named 'eld' in 'struct drm_connector' min(sizeof(sii902x->connector.eld), len)); ~~~~~~~~~~~~~~~~~~ ^ include/linux/minmax.h:67:33: note: expanded from macro 'min' #define min(x, y) __careful_cmp(x, y, <) ^ include/linux/minmax.h:36:35: note: expanded from macro '__careful_cmp' __builtin_choose_expr(__safe_cmp(x, y), \ ^ include/linux/minmax.h:26:43: note: expanded from macro '__safe_cmp' (__typecheck(x, y) && __no_side_effects(x, y)) ^ include/linux/minmax.h:23:19: note: expanded from macro '__no_side_effects' (__is_constexpr(x) && __is_constexpr(y)) ^ include/linux/const.h:12:48: note: expanded from macro '__is_constexpr' (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) ^ 6 warnings and 3 errors generated. -- In file included from drivers/gpu/drm/i2c/tda998x_drv.c:10: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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/i2c/tda998x_drv.c:10: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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/i2c/tda998x_drv.c:10: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:13: In file included from include/linux/cgroup.h:26: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: 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); ~~~~~~~~~~ ^ >> drivers/gpu/drm/i2c/tda998x_drv.c:1156:30: error: no member named 'eld' in 'struct drm_connector' memcpy(buf, priv->connector.eld, ~~~~~~~~~~~~~~~ ^ drivers/gpu/drm/i2c/tda998x_drv.c:1157:36: error: no member named 'eld' in 'struct drm_connector' min(sizeof(priv->connector.eld), len)); ~~~~~~~~~~~~~~~ ^ include/linux/minmax.h:67:33: note: expanded from macro 'min' #define min(x, y) __careful_cmp(x, y, <) ^ include/linux/minmax.h:36:35: note: expanded from macro '__careful_cmp' __builtin_choose_expr(__safe_cmp(x, y), \ ^ include/linux/minmax.h:26:16: note: expanded from macro '__safe_cmp' (__typecheck(x, y) && __no_side_effects(x, y)) ^ include/linux/minmax.h:20:21: note: expanded from macro '__typecheck' (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1))) ^ drivers/gpu/drm/i2c/tda998x_drv.c:1157:36: error: no member named 'eld' in 'struct drm_connector' min(sizeof(priv->connector.eld), len)); ~~~~~~~~~~~~~~~ ^ include/linux/minmax.h:67:33: note: expanded from macro 'min' #define min(x, y) __careful_cmp(x, y, <) ^ include/linux/minmax.h:36:35: note: expanded from macro '__careful_cmp' __builtin_choose_expr(__safe_cmp(x, y), \ ^ include/linux/minmax.h:26:43: note: expanded from macro '__safe_cmp' (__typecheck(x, y) && __no_side_effects(x, y)) ^ include/linux/minmax.h:23:19: note: expanded from macro '__no_side_effects' (__is_constexpr(x) && __is_constexpr(y)) ^ include/linux/const.h:12:48: note: expanded from macro '__is_constexpr' (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) ^ 6 warnings and 3 errors generated. vim +736 drivers/gpu/drm/bridge/sii902x.c ff5781634c4116 Jyri Sarha 2019-05-27 728 ff5781634c4116 Jyri Sarha 2019-05-27 729 static int sii902x_audio_get_eld(struct device *dev, void *data, ff5781634c4116 Jyri Sarha 2019-05-27 730 uint8_t *buf, size_t len) ff5781634c4116 Jyri Sarha 2019-05-27 731 { ff5781634c4116 Jyri Sarha 2019-05-27 732 struct sii902x *sii902x = dev_get_drvdata(dev); ff5781634c4116 Jyri Sarha 2019-05-27 733 ff5781634c4116 Jyri Sarha 2019-05-27 734 mutex_lock(&sii902x->mutex); ff5781634c4116 Jyri Sarha 2019-05-27 735 ff5781634c4116 Jyri Sarha 2019-05-27 @736 memcpy(buf, sii902x->connector.eld, ff5781634c4116 Jyri Sarha 2019-05-27 737 min(sizeof(sii902x->connector.eld), len)); ff5781634c4116 Jyri Sarha 2019-05-27 738 ff5781634c4116 Jyri Sarha 2019-05-27 739 mutex_unlock(&sii902x->mutex); ff5781634c4116 Jyri Sarha 2019-05-27 740 ff5781634c4116 Jyri Sarha 2019-05-27 741 return 0; ff5781634c4116 Jyri Sarha 2019-05-27 742 } ff5781634c4116 Jyri Sarha 2019-05-27 743
Obviously, I need to still work on this. *looks for brown paper bag* On Tue, 24 Jan 2023, kernel test robot <lkp@intel.com> wrote: > Hi Jani, > > I love your patch! Yet something to improve: > > [auto build test ERROR on drm-tip/drm-tip] > > url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 > base: git://anongit.freedesktop.org/drm/drm-tip drm-tip > patch link: https://lore.kernel.org/r/20230124094154.2282778-3-jani.nikula%40intel.com > patch subject: [Intel-gfx] [PATCH 3/3] drm/connector: move ELD and video/audio latencies to display info > config: arm-defconfig (https://download.01.org/0day-ci/archive/20230124/202301242049.eKzx7RzZ-lkp@intel.com/config) > compiler: arm-linux-gnueabi-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/1e92b5478cfc1b0df66153652111117e9548b0d5 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Jani-Nikula/drm-connector-move-HDR-sink-metadata-to-display-info/20230124-174322 > git checkout 1e92b5478cfc1b0df66153652111117e9548b0d5 > # 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=arm olddefconfig > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/gpu/ > > 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 >>): > > drivers/gpu/drm/tegra/hdmi.c: In function 'tegra_hdmi_write_eld': >>> drivers/gpu/drm/tegra/hdmi.c:620:60: error: 'struct drm_connector' has no member named 'eld' > 620 | size_t length = drm_eld_size(hdmi->output.connector.eld), i; > | ^ > drivers/gpu/drm/tegra/hdmi.c:624:72: error: 'struct drm_connector' has no member named 'eld' > 624 | tegra_hdmi_writel(hdmi, i << 8 | hdmi->output.connector.eld[i], > | ^ > -- > drivers/gpu/drm/tegra/sor.c: In function 'tegra_sor_write_eld': >>> drivers/gpu/drm/tegra/sor.c:1951:59: error: 'struct drm_connector' has no member named 'eld' > 1951 | size_t length = drm_eld_size(sor->output.connector.eld), i; > | ^ > drivers/gpu/drm/tegra/sor.c:1954:69: error: 'struct drm_connector' has no member named 'eld' > 1954 | tegra_sor_writel(sor, i << 8 | sor->output.connector.eld[i], > | ^ > > > vim +620 drivers/gpu/drm/tegra/hdmi.c > > edec4af4c3d6d2 Thierry Reding 2012-11-15 617 > 5234549b93aa2a Thierry Reding 2015-08-07 618 static void tegra_hdmi_write_eld(struct tegra_hdmi *hdmi) > 5234549b93aa2a Thierry Reding 2015-08-07 619 { > 5234549b93aa2a Thierry Reding 2015-08-07 @620 size_t length = drm_eld_size(hdmi->output.connector.eld), i; > 5234549b93aa2a Thierry Reding 2015-08-07 621 u32 value; > edec4af4c3d6d2 Thierry Reding 2012-11-15 622 > 5234549b93aa2a Thierry Reding 2015-08-07 623 for (i = 0; i < length; i++) > 5234549b93aa2a Thierry Reding 2015-08-07 624 tegra_hdmi_writel(hdmi, i << 8 | hdmi->output.connector.eld[i], > 5234549b93aa2a Thierry Reding 2015-08-07 625 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); > edec4af4c3d6d2 Thierry Reding 2012-11-15 626 > 5234549b93aa2a Thierry Reding 2015-08-07 627 /* > 5234549b93aa2a Thierry Reding 2015-08-07 628 * The HDA codec will always report an ELD buffer size of 96 bytes and > 5234549b93aa2a Thierry Reding 2015-08-07 629 * the HDA codec driver will check that each byte read from the buffer > 5234549b93aa2a Thierry Reding 2015-08-07 630 * is valid. Therefore every byte must be written, even if no 96 bytes > 5234549b93aa2a Thierry Reding 2015-08-07 631 * were parsed from EDID. > 5234549b93aa2a Thierry Reding 2015-08-07 632 */ > 5234549b93aa2a Thierry Reding 2015-08-07 633 for (i = length; i < HDMI_ELD_BUFFER_SIZE; i++) > 5234549b93aa2a Thierry Reding 2015-08-07 634 tegra_hdmi_writel(hdmi, i << 8 | 0, > 5234549b93aa2a Thierry Reding 2015-08-07 635 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); > 5234549b93aa2a Thierry Reding 2015-08-07 636 > 5234549b93aa2a Thierry Reding 2015-08-07 637 value = SOR_AUDIO_HDA_PRESENSE_VALID | SOR_AUDIO_HDA_PRESENSE_PRESENT; > 5234549b93aa2a Thierry Reding 2015-08-07 638 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE); > edec4af4c3d6d2 Thierry Reding 2012-11-15 639 } > edec4af4c3d6d2 Thierry Reding 2012-11-15 640
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c index 9a24ed463abd..0c05838032c5 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c @@ -1257,11 +1257,11 @@ static void dce_v10_0_audio_write_latency_fields(struct drm_encoder *encoder, if (mode->flags & DRM_MODE_FLAG_INTERLACE) interlace = 1; - if (connector->latency_present[interlace]) { + if (connector->display_info.latency_present[interlace]) { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - VIDEO_LIPSYNC, connector->video_latency[interlace]); + VIDEO_LIPSYNC, connector->display_info.video_latency[interlace]); tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - AUDIO_LIPSYNC, connector->audio_latency[interlace]); + AUDIO_LIPSYNC, connector->display_info.audio_latency[interlace]); } else { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, VIDEO_LIPSYNC, 0); diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c index c14b70350a51..896f0416b69f 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c @@ -1283,11 +1283,11 @@ static void dce_v11_0_audio_write_latency_fields(struct drm_encoder *encoder, if (mode->flags & DRM_MODE_FLAG_INTERLACE) interlace = 1; - if (connector->latency_present[interlace]) { + if (connector->display_info.latency_present[interlace]) { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - VIDEO_LIPSYNC, connector->video_latency[interlace]); + VIDEO_LIPSYNC, connector->display_info.video_latency[interlace]); tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - AUDIO_LIPSYNC, connector->audio_latency[interlace]); + AUDIO_LIPSYNC, connector->display_info.audio_latency[interlace]); } else { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, VIDEO_LIPSYNC, 0); diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c index 7f85ba5b726f..4aa797726bca 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c @@ -1158,11 +1158,11 @@ static void dce_v6_0_audio_write_latency_fields(struct drm_encoder *encoder, if (mode->flags & DRM_MODE_FLAG_INTERLACE) interlace = 1; - if (connector->latency_present[interlace]) { + if (connector->display_info.latency_present[interlace]) { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - VIDEO_LIPSYNC, connector->video_latency[interlace]); + VIDEO_LIPSYNC, connector->display_info.video_latency[interlace]); tmp = REG_SET_FIELD(tmp, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, - AUDIO_LIPSYNC, connector->audio_latency[interlace]); + AUDIO_LIPSYNC, connector->display_info.audio_latency[interlace]); } else { tmp = REG_SET_FIELD(0, AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC, VIDEO_LIPSYNC, 0); diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c index d421a268c9ff..c84421510a46 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c @@ -1195,11 +1195,11 @@ static void dce_v8_0_audio_write_latency_fields(struct drm_encoder *encoder, } if (mode->flags & DRM_MODE_FLAG_INTERLACE) { - if (connector->latency_present[1]) + if (connector->display_info.latency_present[1]) tmp = - (connector->video_latency[1] << + (connector->display_info.video_latency[1] << AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC__VIDEO_LIPSYNC__SHIFT) | - (connector->audio_latency[1] << + (connector->display_info.audio_latency[1] << AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC__AUDIO_LIPSYNC__SHIFT); else tmp = @@ -1208,11 +1208,11 @@ static void dce_v8_0_audio_write_latency_fields(struct drm_encoder *encoder, (0 << AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC__AUDIO_LIPSYNC__SHIFT); } else { - if (connector->latency_present[0]) + if (connector->display_info.latency_present[0]) tmp = - (connector->video_latency[0] << + (connector->display_info.video_latency[0] << AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC__VIDEO_LIPSYNC__SHIFT) | - (connector->audio_latency[0] << + (connector->display_info.audio_latency[0] << AZALIA_F0_CODEC_PIN_CONTROL_RESPONSE_LIPSYNC__AUDIO_LIPSYNC__SHIFT); else tmp = diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index c61c388bddf2..4db61c346280 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -894,8 +894,8 @@ static int amdgpu_dm_audio_component_get_eld(struct device *kdev, int port, continue; *enabled = true; - ret = drm_eld_size(connector->eld); - memcpy(buf, connector->eld, min(max_bytes, ret)); + ret = drm_eld_size(connector->display_info.eld); + memcpy(buf, connector->display_info.eld, min(max_bytes, ret)); break; } @@ -5386,9 +5386,9 @@ static void fill_audio_info(struct audio_info *audio_info, audio_info->flags.all = edid_caps->speaker_flags; /* TODO: We only check for the progressive mode, check for interlace mode too */ - if (drm_connector->latency_present[0]) { - audio_info->video_latency = drm_connector->video_latency[0]; - audio_info->audio_latency = drm_connector->audio_latency[0]; + if (drm_connector->display_info.latency_present[0]) { + audio_info->video_latency = drm_connector->display_info.video_latency[0]; + audio_info->audio_latency = drm_connector->display_info.audio_latency[0]; } /* TODO: For DP, video and audio latency should be calculated from DPCD caps */ diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c index 6846199a2ee1..04a29950228c 100644 --- a/drivers/gpu/drm/bridge/analogix/anx7625.c +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c @@ -1982,8 +1982,8 @@ static int anx7625_audio_get_eld(struct device *dev, void *data, memset(buf, 0, len); } else { dev_dbg(dev, "audio copy eld\n"); - memcpy(buf, ctx->connector->eld, - min(sizeof(ctx->connector->eld), len)); + memcpy(buf, ctx->connector->display_info.eld, + min(sizeof(ctx->connector->display_info.eld), len)); } return 0; diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c index a2d723d6a4be..1a5e0741d33b 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -1448,8 +1448,8 @@ static int it66121_audio_get_eld(struct device *dev, void *data, mutex_lock(&ctx->lock); - memcpy(buf, ctx->connector->eld, - min(sizeof(ctx->connector->eld), len)); + memcpy(buf, ctx->connector->display_info.eld, + min(sizeof(ctx->connector->display_info.eld), len)); mutex_unlock(&ctx->lock); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index aa51c61a78c7..1f235960fd33 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -789,7 +789,7 @@ static u8 *hdmi_audio_get_eld(struct dw_hdmi *hdmi) if (!hdmi->curr_conn) return NULL; - return hdmi->curr_conn->eld; + return hdmi->curr_conn->display_info.eld; } static void dw_hdmi_gp_audio_enable(struct dw_hdmi *hdmi) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1ce3f153868d..a1b06b374af8 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -5369,29 +5369,30 @@ drm_parse_hdr_metadata_block(struct drm_connector *connector, const u8 *db) static void drm_parse_hdmi_vsdb_audio(struct drm_connector *connector, const u8 *db) { + struct drm_display_info *info = &connector->display_info; u8 len = cea_db_payload_len(db); if (len >= 6 && (db[6] & (1 << 7))) - connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_SUPPORTS_AI; + info->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_SUPPORTS_AI; if (len >= 10 && hdmi_vsdb_latency_present(db)) { - connector->latency_present[0] = true; - connector->video_latency[0] = db[9]; - connector->audio_latency[0] = db[10]; + info->latency_present[0] = true; + info->video_latency[0] = db[9]; + info->audio_latency[0] = db[10]; } if (len >= 12 && hdmi_vsdb_i_latency_present(db)) { - connector->latency_present[1] = true; - connector->video_latency[1] = db[11]; - connector->audio_latency[1] = db[12]; + info->latency_present[1] = true; + info->video_latency[1] = db[11]; + info->audio_latency[1] = db[12]; } drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] HDMI: latency present %d %d, video latency %d %d, audio latency %d %d\n", connector->base.id, connector->name, - connector->latency_present[0], connector->latency_present[1], - connector->video_latency[0], connector->video_latency[1], - connector->audio_latency[0], connector->audio_latency[1]); + info->latency_present[0], info->latency_present[1], + info->video_latency[0], info->video_latency[1], + info->audio_latency[0], info->audio_latency[1]); } static void @@ -5453,18 +5454,6 @@ void drm_edid_get_monitor_name(const struct edid *edid, char *name, int bufsize) } EXPORT_SYMBOL(drm_edid_get_monitor_name); -static void clear_eld(struct drm_connector *connector) -{ - memset(connector->eld, 0, sizeof(connector->eld)); - - connector->latency_present[0] = false; - connector->latency_present[1] = false; - connector->video_latency[0] = 0; - connector->audio_latency[0] = 0; - connector->video_latency[1] = 0; - connector->audio_latency[1] = 0; -} - /* * drm_edid_to_eld - build ELD from EDID * @connector: connector corresponding to the HDMI/DP sink @@ -5479,7 +5468,7 @@ static void drm_edid_to_eld(struct drm_connector *connector, const struct drm_display_info *info = &connector->display_info; const struct cea_db *db; struct cea_db_iter iter; - uint8_t *eld = connector->eld; + u8 *eld = connector->display_info.eld; int total_sad_count = 0; int mnl; @@ -5659,16 +5648,17 @@ EXPORT_SYMBOL(drm_edid_to_speaker_allocation); int drm_av_sync_delay(struct drm_connector *connector, const struct drm_display_mode *mode) { + const struct drm_display_info *info = &connector->display_info; int i = !!(mode->flags & DRM_MODE_FLAG_INTERLACE); int a, v; - if (!connector->latency_present[0]) + if (!info->latency_present[0]) return 0; - if (!connector->latency_present[1]) + if (!info->latency_present[1]) i = 0; - a = connector->audio_latency[i]; - v = connector->video_latency[i]; + a = info->audio_latency[i]; + v = info->video_latency[i]; /* * HDMI/DP sink doesn't support audio or video? @@ -6437,7 +6427,6 @@ static void update_display_info(struct drm_connector *connector, const struct edid *edid; drm_reset_display_info(connector); - clear_eld(connector); if (!drm_edid) return; diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index b7c11bdce2c8..22a0160977d7 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -1640,7 +1640,7 @@ static int hdmi_audio_get_eld(struct device *dev, void *data, uint8_t *buf, struct hdmi_context *hdata = dev_get_drvdata(dev); struct drm_connector *connector = &hdata->connector; - memcpy(buf, connector->eld, min(sizeof(connector->eld), len)); + memcpy(buf, connector->display_info.eld, min(sizeof(connector->display_info.eld), len)); return 0; } diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c index 626c47e96a6d..f4241d46ba65 100644 --- a/drivers/gpu/drm/i915/display/intel_audio.c +++ b/drivers/gpu/drm/i915/display/intel_audio.c @@ -336,7 +336,7 @@ static void g4x_audio_codec_enable(struct intel_encoder *encoder, struct drm_i915_private *i915 = to_i915(encoder->base.dev); struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); struct drm_connector *connector = conn_state->connector; - const u32 *eld = (const u32 *)connector->eld; + const u32 *eld = (const u32 *)connector->display_info.eld; int eld_buffer_size, len, i; intel_crtc_wait_for_next_vblank(crtc); @@ -345,7 +345,7 @@ static void g4x_audio_codec_enable(struct intel_encoder *encoder, G4X_ELD_VALID | G4X_ELD_ADDRESS_MASK, 0); eld_buffer_size = g4x_eld_buffer_size(i915); - len = min(drm_eld_size(connector->eld) / 4, eld_buffer_size); + len = min(drm_eld_size(connector->display_info.eld) / 4, eld_buffer_size); for (i = 0; i < len; i++) intel_de_write(i915, G4X_HDMIW_HDMIEDID, eld[i]); @@ -620,7 +620,7 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder, struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); struct drm_connector *connector = conn_state->connector; enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; - const u32 *eld = (const u32 *)connector->eld; + const u32 *eld = (const u32 *)connector->display_info.eld; int eld_buffer_size, len, i; mutex_lock(&i915->display.audio.mutex); @@ -644,7 +644,7 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder, IBX_ELD_ADDRESS_MASK, 0); eld_buffer_size = hsw_eld_buffer_size(i915, cpu_transcoder); - len = min(drm_eld_size(connector->eld) / 4, eld_buffer_size); + len = min(drm_eld_size(connector->display_info.eld) / 4, eld_buffer_size); for (i = 0; i < len; i++) intel_de_write(i915, HSW_AUD_EDID_DATA(cpu_transcoder), eld[i]); @@ -748,7 +748,7 @@ static void ilk_audio_codec_enable(struct intel_encoder *encoder, struct drm_i915_private *i915 = to_i915(encoder->base.dev); struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); struct drm_connector *connector = conn_state->connector; - const u32 *eld = (const u32 *)connector->eld; + const u32 *eld = (const u32 *)connector->display_info.eld; enum port port = encoder->port; enum pipe pipe = crtc->pipe; int eld_buffer_size, len, i; @@ -772,7 +772,7 @@ static void ilk_audio_codec_enable(struct intel_encoder *encoder, IBX_ELD_ADDRESS_MASK, 0); eld_buffer_size = ilk_eld_buffer_size(i915, pipe); - len = min(drm_eld_size(connector->eld) / 4, eld_buffer_size); + len = min(drm_eld_size(connector->display_info.eld) / 4, eld_buffer_size); for (i = 0; i < len; i++) intel_de_write(i915, regs.hdmiw_hdmiedid, eld[i]); @@ -837,15 +837,15 @@ void intel_audio_codec_enable(struct intel_encoder *encoder, drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s][ENCODER:%d:%s] Enable audio codec on pipe %c, %u bytes ELD\n", connector->base.id, connector->name, encoder->base.base.id, encoder->base.name, - pipe_name(pipe), drm_eld_size(connector->eld)); + pipe_name(pipe), drm_eld_size(connector->display_info.eld)); /* FIXME precompute the ELD in .compute_config() */ - if (!connector->eld[0]) + if (!connector->display_info.eld[0]) drm_dbg_kms(&i915->drm, "Bogus ELD on [CONNECTOR:%d:%s]\n", connector->base.id, connector->name); - connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2; + connector->display_info.eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2; if (i915->display.funcs.audio) i915->display.funcs.audio->audio_codec_enable(encoder, @@ -868,7 +868,7 @@ void intel_audio_codec_enable(struct intel_encoder *encoder, (int)port, (int)pipe); } - intel_lpe_audio_notify(i915, pipe, port, connector->eld, + intel_lpe_audio_notify(i915, pipe, port, connector->display_info.eld, crtc_state->port_clock, intel_crtc_has_dp_encoder(crtc_state)); } @@ -1236,7 +1236,7 @@ static int i915_audio_component_get_eld(struct device *kdev, int port, ret = 0; *enabled = intel_encoder->audio_connector != NULL; if (*enabled) { - eld = intel_encoder->audio_connector->eld; + eld = intel_encoder->audio_connector->display_info.eld; ret = drm_eld_size(eld); memcpy(buf, eld, min(max_bytes, ret)); } diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c index 21805c15d5eb..582bbc194305 100644 --- a/drivers/gpu/drm/i915/display/intel_sdvo.c +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c @@ -1756,7 +1756,7 @@ static void intel_sdvo_enable_audio(struct intel_sdvo *intel_sdvo, const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; struct drm_connector *connector = conn_state->connector; - u8 *eld = connector->eld; + u8 *eld = connector->display_info.eld; eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2; diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c index b4feaabdb6a7..3fd448a6d8d1 100644 --- a/drivers/gpu/drm/mediatek/mtk_dp.c +++ b/drivers/gpu/drm/mediatek/mtk_dp.c @@ -2432,7 +2432,7 @@ static int mtk_dp_audio_get_eld(struct device *dev, void *data, uint8_t *buf, struct mtk_dp *mtk_dp = dev_get_drvdata(dev); if (mtk_dp->enabled) - memcpy(buf, mtk_dp->conn->eld, len); + memcpy(buf, mtk_dp->conn->display_info.eld, len); else memset(buf, 0, len); diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index 0a8e0a13f516..edc96b32cf4c 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1634,7 +1634,8 @@ static int mtk_hdmi_audio_get_eld(struct device *dev, void *data, uint8_t *buf, struct mtk_hdmi *hdmi = dev_get_drvdata(dev); if (hdmi->enabled) - memcpy(buf, hdmi->curr_conn->eld, min(sizeof(hdmi->curr_conn->eld), len)); + memcpy(buf, hdmi->curr_conn->display_info.eld, + min(sizeof(hdmi->curr_conn->display_info.eld), len)); else memset(buf, 0, len); return 0; diff --git a/drivers/gpu/drm/msm/dp/dp_audio.c b/drivers/gpu/drm/msm/dp/dp_audio.c index 6666783e1468..993b248fd9e9 100644 --- a/drivers/gpu/drm/msm/dp/dp_audio.c +++ b/drivers/gpu/drm/msm/dp/dp_audio.c @@ -499,8 +499,8 @@ static int dp_audio_get_eld(struct device *dev, return -ENODEV; } - memcpy(buf, dp_display->connector->eld, - min(sizeof(dp_display->connector->eld), len)); + memcpy(buf, dp_display->connector->display_info.eld, + min(sizeof(dp_display->connector->display_info.eld), len)); return 0; } diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c index 4a1d5447eac1..cf92c108e377 100644 --- a/drivers/gpu/drm/radeon/dce6_afmt.c +++ b/drivers/gpu/drm/radeon/dce6_afmt.c @@ -134,15 +134,15 @@ void dce6_afmt_write_latency_fields(struct drm_encoder *encoder, return; if (mode->flags & DRM_MODE_FLAG_INTERLACE) { - if (connector->latency_present[1]) - tmp = VIDEO_LIPSYNC(connector->video_latency[1]) | - AUDIO_LIPSYNC(connector->audio_latency[1]); + if (connector->display_info.latency_present[1]) + tmp = VIDEO_LIPSYNC(connector->display_info.video_latency[1]) | + AUDIO_LIPSYNC(connector->display_info.audio_latency[1]); else tmp = VIDEO_LIPSYNC(0) | AUDIO_LIPSYNC(0); } else { - if (connector->latency_present[0]) - tmp = VIDEO_LIPSYNC(connector->video_latency[0]) | - AUDIO_LIPSYNC(connector->audio_latency[0]); + if (connector->display_info.latency_present[0]) + tmp = VIDEO_LIPSYNC(connector->display_info.video_latency[0]) | + AUDIO_LIPSYNC(connector->display_info.audio_latency[0]); else tmp = VIDEO_LIPSYNC(0) | AUDIO_LIPSYNC(0); } diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index 5f3078f8ab95..ef6e0f3003a3 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c @@ -102,15 +102,15 @@ void dce4_afmt_write_latency_fields(struct drm_encoder *encoder, u32 tmp = 0; if (mode->flags & DRM_MODE_FLAG_INTERLACE) { - if (connector->latency_present[1]) - tmp = VIDEO_LIPSYNC(connector->video_latency[1]) | - AUDIO_LIPSYNC(connector->audio_latency[1]); + if (connector->display_info.latency_present[1]) + tmp = VIDEO_LIPSYNC(connector->display_info.video_latency[1]) | + AUDIO_LIPSYNC(connector->display_info.audio_latency[1]); else tmp = VIDEO_LIPSYNC(255) | AUDIO_LIPSYNC(255); } else { - if (connector->latency_present[0]) - tmp = VIDEO_LIPSYNC(connector->video_latency[0]) | - AUDIO_LIPSYNC(connector->audio_latency[0]); + if (connector->display_info.latency_present[0]) + tmp = VIDEO_LIPSYNC(connector->display_info.video_latency[0]) | + AUDIO_LIPSYNC(connector->display_info.audio_latency[0]); else tmp = VIDEO_LIPSYNC(255) | AUDIO_LIPSYNC(255); } diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c index d6ccaf24ee0c..8e075e18f8e8 100644 --- a/drivers/gpu/drm/radeon/radeon_audio.c +++ b/drivers/gpu/drm/radeon/radeon_audio.c @@ -769,8 +769,8 @@ static int radeon_audio_component_get_eld(struct device *kdev, int port, if (!connector) continue; *enabled = true; - ret = drm_eld_size(connector->eld); - memcpy(buf, connector->eld, min(max_bytes, ret)); + ret = drm_eld_size(connector->display_info.eld); + memcpy(buf, connector->display_info.eld, min(max_bytes, ret)); break; } diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c index 8539fe1fedc4..bbffe0b379f5 100644 --- a/drivers/gpu/drm/sti/sti_hdmi.c +++ b/drivers/gpu/drm/sti/sti_hdmi.c @@ -1220,7 +1220,7 @@ static int hdmi_audio_get_eld(struct device *dev, void *data, uint8_t *buf, size struct drm_connector *connector = hdmi->drm_connector; DRM_DEBUG_DRIVER("\n"); - memcpy(buf, connector->eld, min(sizeof(connector->eld), len)); + memcpy(buf, connector->display_info.eld, min(sizeof(connector->display_info.eld), len)); return 0; } diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 14628864487a..05181e152168 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -2411,7 +2411,7 @@ static int vc4_hdmi_audio_get_eld(struct device *dev, void *data, struct drm_connector *connector = &vc4_hdmi->connector; mutex_lock(&vc4_hdmi->mutex); - memcpy(buf, connector->eld, min(sizeof(connector->eld), len)); + memcpy(buf, connector->display_info.eld, min(sizeof(connector->display_info.eld), len)); mutex_unlock(&vc4_hdmi->mutex); return 0; diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 627bedc47511..30f51e8a7985 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -738,6 +738,29 @@ struct drm_display_info { * @quirks: EDID based quirks. Internal to EDID parsing. */ u32 quirks; + +#define MAX_ELD_BYTES 128 + /** + * @eld: EDID-like data, if present + */ + u8 eld[MAX_ELD_BYTES]; + + /** + * @latency_present: AV delay info from ELD, if found + */ + bool latency_present[2]; + + /** + * @video_latency: Video latency info from ELD, if found. + * [0]: progressive, [1]: interlaced + */ + int video_latency[2]; + + /** + * @audio_latency: audio latency info from ELD, if found + * [0]: progressive, [1]: interlaced + */ + int audio_latency[2]; }; int drm_display_info_set_bus_formats(struct drm_display_info *info, @@ -1685,22 +1708,6 @@ struct drm_connector { */ struct drm_encoder *encoder; -#define MAX_ELD_BYTES 128 - /** @eld: EDID-like data, if present */ - uint8_t eld[MAX_ELD_BYTES]; - /** @latency_present: AV delay info from ELD, if found */ - bool latency_present[2]; - /** - * @video_latency: Video latency info from ELD, if found. - * [0]: progressive, [1]: interlaced - */ - int video_latency[2]; - /** - * @audio_latency: audio latency info from ELD, if found - * [0]: progressive, [1]: interlaced - */ - int audio_latency[2]; - /** * @ddc: associated ddc adapter. * A connector usually has its associated ddc adapter. If a driver uses
Information parsed from the display EDID should be stored in display info. We can stop clearing ELD separately. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Pan, Xinhui <Xinhui.Pan@amd.com> Cc: amd-gfx@lists.freedesktop.org Cc: Andrzej Hajda <andrzej.hajda@intel.com> Cc: Neil Armstrong <neil.armstrong@linaro.org> Cc: Robert Foss <robert.foss@linaro.org> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: Jonas Karlman <jonas@kwiboo.se> Cc: Jernej Skrabec <jernej.skrabec@gmail.com> Cc: Inki Dae <inki.dae@samsung.com> Cc: Seung-Woo Kim <sw0312.kim@samsung.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org> Cc: Philipp Zabel <p.zabel@pengutronix.de> Cc: linux-mediatek@lists.infradead.org Cc: Rob Clark <robdclark@gmail.com> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Cc: Sean Paul <sean@poorly.run> Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: Alain Volmat <alain.volmat@foss.st.com> Cc: Emma Anholt <emma@anholt.net> Cc: Maxime Ripard <mripard@kernel.org> Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- Sorry about the crazy Cc list, but this touches a lot of drivers, and I didn't want to blind side anyone. --- drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 6 +-- drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 6 +-- drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 6 +-- drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 12 ++--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++--- drivers/gpu/drm/bridge/analogix/anx7625.c | 4 +- drivers/gpu/drm/bridge/ite-it66121.c | 4 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 +- drivers/gpu/drm/drm_edid.c | 45 +++++++------------ drivers/gpu/drm/exynos/exynos_hdmi.c | 2 +- drivers/gpu/drm/i915/display/intel_audio.c | 22 ++++----- drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +- drivers/gpu/drm/mediatek/mtk_dp.c | 2 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 3 +- drivers/gpu/drm/msm/dp/dp_audio.c | 4 +- drivers/gpu/drm/radeon/dce6_afmt.c | 12 ++--- drivers/gpu/drm/radeon/evergreen_hdmi.c | 12 ++--- drivers/gpu/drm/radeon/radeon_audio.c | 4 +- drivers/gpu/drm/sti/sti_hdmi.c | 2 +- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +- include/drm/drm_connector.h | 39 +++++++++------- 21 files changed, 99 insertions(+), 102 deletions(-)