From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by yocto-www.yoctoproject.org (Postfix, from userid 118) id 29FFEE00994; Wed, 3 Oct 2018 06:03:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on yocto-www.yoctoproject.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS autolearn=ham version=3.3.1 X-Spam-HAM-Report: * -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.0 SPF_HELO_PASS SPF: HELO matches SPF record Received: from ptmx.org (ptmx.org [178.63.28.110]) by yocto-www.yoctoproject.org (Postfix) with ESMTP id D45F1E00718 for ; Wed, 3 Oct 2018 06:03:03 -0700 (PDT) Received: from [10.1.14.230] (vpn.streamunlimited.com [91.114.0.140]) by ptmx.org (Postfix) with ESMTPSA id 9EB0A70AD for ; Wed, 3 Oct 2018 15:03:02 +0200 (CEST) To: meta-freescale@yoctoproject.org References: <20181003102443.29749-1-gary.bisson@boundarydevices.com> <20181003102443.29749-2-gary.bisson@boundarydevices.com> From: Carlos Rafael Giani Message-ID: Date: Wed, 3 Oct 2018 15:03:02 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181003102443.29749-2-gary.bisson@boundarydevices.com> Subject: Re: [PATCH 1/2] imx-vpu-hantro: fix build issue X-BeenThere: meta-freescale@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Usage and development list for the meta-fsl-* layers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Oct 2018 13:03:05 -0000 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US In addition to this, I think adding a "hantro_config.h" header would be useful. That's because we can find this in the Makefile_codec file:   CFLAGS += -DSET_OUTPUT_CROP_RECT -DUSE_EXTERNAL_BUFFER -DUSE_OUTPUT_RELEASE -DVSI_API -DIS_G1_DECODER -DENABLE_CODEC_VP8 -DVP8_HWTIMEOUT_WORKAROUND -DENABLE_CODEC_MJPEG -DGET_FREE_BUFFER_NON_BLOCK -DDOWN_SCALER and you need to set these flags in your code as well, otherwise you get stack corruption. For example, SET_OUTPUT_CROP_RECT enables certain fields in openmax_il/source/decoder/codec.h :     typedef struct STREAM_INFO     {         OMX_COLOR_FORMATTYPE format;    // stream color format         OMX_U32 framesize;              // framesize in bytes         OMX_U32 width;                  // picture display width         OMX_U32 height;                 // picture display height         OMX_U32 sliceheight;            // picture slice height         OMX_U32 stride;                 // picture scan line width         OMX_BOOL interlaced;            // sequence is interlaced         OMX_U32 imageSize;              // size of image in memory         OMX_BOOL isVc1Stream;           // sequence is VC1 stream #ifdef SET_OUTPUT_CROP_RECT         OMX_BOOL crop_available;        // crop information         OMX_U32 crop_width;         OMX_U32 crop_height;         OMX_U32 crop_left;         OMX_U32 crop_top; #endif         OMX_U32 frame_buffers;         OMX_U32 bit_depth;         OMX_BOOL hdr10_available;         METADATA_HDR10 hdr10_metadata;   // HDR10 metadata         OMX_U32 video_full_range_flag;   // black level and range of luma chroma signals         OMX_BOOL colour_desc_available;  // indicate colour_primaries/transfer_characteristics/matrix_coeffs present or not         OMX_U32 colour_primaries;        // chromaticity coordinates of the source primaries         OMX_U32 transfer_characteristics;// opto-electronic transfer function         OMX_U32 matrix_coeffs;           // matrix coefficients used in deriving luma and chroma signals         OMX_BOOL chroma_loc_info_available; // indicate chroma_sample_loc_type_top_field or bottom field are present or not         OMX_U32 chroma_sample_loc_type_top_field; // specify the location of chroma samples         OMX_U32 chroma_sample_loc_type_bottom_field; // specify the location of chroma samples     } STREAM_INFO; As a result, imx-vpuwrap has to set these same cflags. If you don't know this already, it is easy to miss, and causes ABI breakage. On 2018-10-03 12:24, Gary Bisson wrote: > The source code uses LINUX_VERSION_CODE at many places which constraints > the package to be built with a toolchain whose headers match the kernel. > > This is a far from ideal solution, especially if one wants to use a > prebuilt toolchain (with unknown kernel header version). > > So change the CFLAGS to consider the kernel build folder so that the > Linux version test actually matches the kernel built. > > Signed-off-by: Gary Bisson > --- > ...clusion-to-be-from-kernel-build-fold.patch | 44 +++++++++++++++++++ > .../imx-vpu-hantro/imx-vpu-hantro_1.8.0.bb | 5 ++- > 2 files changed, 48 insertions(+), 1 deletion(-) > create mode 100644 recipes-bsp/imx-vpu-hantro/imx-vpu-hantro/0002-Fix-version.h-inclusion-to-be-from-kernel-build-fold.patch > > diff --git a/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro/0002-Fix-version.h-inclusion-to-be-from-kernel-build-fold.patch b/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro/0002-Fix-version.h-inclusion-to-be-from-kernel-build-fold.patch > new file mode 100644 > index 00000000..e9bf9257 > --- /dev/null > +++ b/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro/0002-Fix-version.h-inclusion-to-be-from-kernel-build-fold.patch > @@ -0,0 +1,44 @@ > +From 1d7b7046c8f735e150e92aeace3fe6d0686b9bc9 Mon Sep 17 00:00:00 2001 > +From: Gary Bisson > +Date: Wed, 3 Oct 2018 10:52:29 +0200 > +Subject: [PATCH] Fix version.h inclusion to be from kernel build folder > + > +Instead of relying on Toolchain headers which can be from newer kernel. > + > +Signed-off-by: Gary Bisson > +--- > + Makefile_G1G2 | 3 +++ > + Makefile_H1 | 3 +++ > + 2 files changed, 6 insertions(+) > + > +diff --git a/Makefile_G1G2 b/Makefile_G1G2 > +index 29866a4..c473bcb 100755 > +--- a/Makefile_G1G2 > ++++ b/Makefile_G1G2 > +@@ -16,6 +16,9 @@ INCLUDE_HEADERS += -I$(LINUX_KERNEL_ROOT)/include/uapi -I$(LINUX_KERNEL_ROOT)/in > + # ION header location > + INCLUDE_HEADERS += -I$(LINUX_KERNEL_ROOT)/drivers/staging/android/uapi > + > ++# LINUX_VERSION_CODE from kernel build folder instead of toolchain headers > ++INCLUDE_HEADERS += -I$(LINUX_KERNEL_BUILD)/include/generated/uapi > ++ > + CFLAGS += -DDEC_MODULE_PATH=\"/dev/mxc_hantro\" -DUSE_FAKE_RFC_TABLE -DFIFO_DATATYPE=void* -DNDEBUG -DDOWN_SCALER \ > + -DUSE_EXTERNAL_BUFFER -DUSE_FAST_EC -DUSE_VP9_EC -DGET_FREE_BUFFER_NON_BLOCK \ > + -DDEC_X170_OUTPUT_FORMAT=0 -DDEC_X170_TIMEOUT_LENGTH=-1 -DENABLE_HEVC_SUPPORT \ > +diff --git a/Makefile_H1 b/Makefile_H1 > +index 56b4332..0be43ce 100755 > +--- a/Makefile_H1 > ++++ b/Makefile_H1 > +@@ -23,6 +23,9 @@ ENV += -I$(SDKTARGETSYSROOT)/usr/imx/include > + # ION header location > + ENV += -I$(LINUX_KERNEL_ROOT)/drivers/staging/android/uapi > + > ++# LINUX_VERSION_CODE from kernel build folder instead of toolchain headers > ++INCLUDE_HEADERS += -I$(LINUX_KERNEL_BUILD)/include/generated/uapi > ++ > + LIBENCNAME = libcodec_enc > + LIBSENC = -L./ -lhantro_h1 -lpthread > + > +-- > +2.19.0 > + > diff --git a/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro_1.8.0.bb b/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro_1.8.0.bb > index 243f1f35..b5fc8468 100644 > --- a/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro_1.8.0.bb > +++ b/recipes-bsp/imx-vpu-hantro/imx-vpu-hantro_1.8.0.bb > @@ -12,6 +12,7 @@ PROVIDES = "virtual/imxvpu" > SRC_URI = " \ > ${FSL_MIRROR}/${PN}-${PV}.bin;fsl-eula=true \ > file://0001-Fix-ion.h-header-inclusion-to-be-standard.patch \ > + file://0002-Fix-version.h-inclusion-to-be-from-kernel-build-fold.patch \ > " > SRC_URI[md5sum] = "140796ddd6f1be47cffb7e5e2bfe0fb6" > SRC_URI[sha256sum] = "c092a5b0f8897bae54154f58e47b6d2de033da01ee231a8cd779a51bbe962606" > @@ -24,7 +25,9 @@ PLATFORM_mx8mm = "IMX8MM" > PLATFORM_mx8mq = "IMX8MQ" > > do_compile () { > - oe_runmake CROSS_COMPILE="${HOST_PREFIX}" LINUX_KERNEL_ROOT="${STAGING_KERNEL_DIR}" SDKTARGETSYSROOT="${STAGING_DIR_TARGET}" PLATFORM="${PLATFORM}" all > + oe_runmake CROSS_COMPILE="${HOST_PREFIX}" LINUX_KERNEL_BUILD="${STAGING_KERNEL_BUILDDIR}" \ > + LINUX_KERNEL_ROOT="${STAGING_KERNEL_DIR}" SDKTARGETSYSROOT="${STAGING_DIR_TARGET}" \ > + PLATFORM="${PLATFORM}" all > } > > do_install () {