2014-01-30 16:47:42

by Josh Boyer

[permalink] [raw]
Subject: exynos_hdmi.c fails to build with v3.13-10094-g9b0cd30

Hi All,

After the DRM merge, the exynos_hdmi.c file fails to build with our
ARM config. The error is:

drivers/gpu/drm/exynos/exynos_hdmi.c:382:8: error: 'hdmi_infoframe'
defined as wrong kind of tag
struct hdmi_infoframe {
^
make[4]: *** [drivers/gpu/drm/exynos/exynos_hdmi.o] Error 1
make[3]: *** [drivers/gpu/drm/exynos] Error 2
make[2]: *** [drivers/gpu/drm] Error 2

which to me was a somewhat confusing error message. After digging
further, I believe it means that there is a conflict with the
definition in exynos_hdmi.c and the one found in include/linux/hdmi.h
for what hdmi_infoframe is supposed to be.

exynos_hdmi.c:

struct hdmi_infoframe {
enum HDMI_PACKET_TYPE type;
u8 ver;
u8 len;
};


include/linux/hdmi.h:

union hdmi_infoframe {
struct hdmi_any_infoframe any;
struct hdmi_avi_infoframe avi;
struct hdmi_spd_infoframe spd;
union hdmi_vendor_any_infoframe vendor;
struct hdmi_audio_infoframe audio;
};


Could someone take a look at this? I have no idea how this wasn't
caught before being merged.

josh


2014-01-31 06:44:22

by Sachin Kamat

[permalink] [raw]
Subject: Re: exynos_hdmi.c fails to build with v3.13-10094-g9b0cd30

Hi Josh,

On 30 January 2014 22:17, Josh Boyer <[email protected]> wrote:
> Hi All,
>
> After the DRM merge, the exynos_hdmi.c file fails to build with our
> ARM config. The error is:
>
> drivers/gpu/drm/exynos/exynos_hdmi.c:382:8: error: 'hdmi_infoframe'
> defined as wrong kind of tag
> struct hdmi_infoframe {
> ^
> make[4]: *** [drivers/gpu/drm/exynos/exynos_hdmi.o] Error 1
> make[3]: *** [drivers/gpu/drm/exynos] Error 2
> make[2]: *** [drivers/gpu/drm] Error 2
>
> which to me was a somewhat confusing error message. After digging
> further, I believe it means that there is a conflict with the
> definition in exynos_hdmi.c and the one found in include/linux/hdmi.h
> for what hdmi_infoframe is supposed to be.
>
> exynos_hdmi.c:
>
> struct hdmi_infoframe {
> enum HDMI_PACKET_TYPE type;
> u8 ver;
> u8 len;
> };
>
>
> include/linux/hdmi.h:
>
> union hdmi_infoframe {
> struct hdmi_any_infoframe any;
> struct hdmi_avi_infoframe avi;
> struct hdmi_spd_infoframe spd;
> union hdmi_vendor_any_infoframe vendor;
> struct hdmi_audio_infoframe audio;
> };
>
>
> Could someone take a look at this? I have no idea how this wasn't
> caught before being merged.

Thank you for reporting this issue. I have just posted a fix for this
(CC'd you) and hence the link is not yet available. Please test the
patch.
This issue surfaced because of commit 985e5dc207e1 ("drm/edid:
Populate picture aspect ratio for CEA modes") which includes
linux/hdmi.h and which got merged last month and hence the build issue
did not appear when the failing patch (commit a144c2e9f17b "
drm/exynos: sending AVI and AUI info frames") initially got merged
about a year earlier. Infact "union hdmi_infoframe" itself was added
to include/linux/hdmi.h in Aug. 2013. Now that we have something
available in global header, the next step would be to utilize that
definition instead of the local one in exynos_hdmi.c.

--
With warm regards,
Sachin