diff options
46 files changed, 1374 insertions, 23050 deletions
diff --git a/mk/modules.mk b/mk/modules.mk index 0fcfa9807..a7e031bea 100644 --- a/mk/modules.mk +++ b/mk/modules.mk @@ -1243,9 +1243,17 @@ $(eval $(call KMOD_template,SND_PXA2XX_SOC_SPITZ,snd-pxa2xx-soc-spitz,\ ,60, kmod-snd-soc)) $(eval $(call KMOD_template,SND_IMX_SOC,snd-imx-soc,\ + $(MODULES_DIR)/kernel/sound/soc/codecs/snd-soc-hdmi-codec \ + $(MODULES_DIR)/kernel/sound/soc/codecs/snd-soc-sgtl5000 \ $(MODULES_DIR)/kernel/sound/soc/fsl/imx-pcm-dma \ + $(MODULES_DIR)/kernel/sound/soc/fsl/imx-hdmi-dma \ $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-fsl-spdif \ + $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-fsl-hdmi \ + $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-fsl-ssi \ + $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-imx-audmux \ + $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-imx-hdmi \ $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-imx-spdif \ + $(MODULES_DIR)/kernel/sound/soc/fsl/snd-soc-imx-sgtl5000 \ ,60, kmod-snd-soc kmod-snd-compress)) $(eval $(call KMOD_template,SND_BCM2835,snd-bcm2835,\ diff --git a/package/kodi/Makefile b/package/kodi/Makefile index 7a0a14640..989421db0 100644 --- a/package/kodi/Makefile +++ b/package/kodi/Makefile @@ -5,7 +5,7 @@ include $(ADK_TOPDIR)/rules.mk PKG_NAME:= kodi PKG_VERSION:= 14.0alpha4 -PKG_RELEASE:= 1 +PKG_RELEASE:= 2 PKG_MD5SUM:= 5bd39942150249d9eccf792d77b92554 PKG_DESCR:= software media player PKG_SECTION:= mm/video @@ -59,6 +59,8 @@ PKGFB_WITH_BLURAY:= libbluray PKGFS_WITH_BLURAY:= libbluray PKGFD_WITH_WEBSERVER:= enable internal webserver support +PKG_LIBC_DEPENDS:= glibc + PKG_DEPENDS_RASPBERRY_PI:= bcm2835-vc PKG_BUILDDEP_RASPBERRY_PI:= bcm2835-vc PKG_DEPENDS_SOLIDRUN_IMX6:= libfslvpuwrap gpu-viv-bin-mx6q @@ -76,7 +78,7 @@ HOST_CXXFLAGS+= $(HOST_CPPFLAGS) XAKE_FLAGS+= V=1 TIXML_USE_STL=1 GCC_HONOUR_COPTS=s TARGET_CPPFLAGS+= -I. -I./utils \ -I$(STAGING_TARGET_DIR)/usr/include/afpfs-ng \ - -DTIXML_USE_STL=1 -DHAS_SIMPLEPM=1 -DLINUX + -DTIXML_USE_STL=1 -DLINUX ifeq ($(ADK_TARGET_SYSTEM_RASPBERRY_PI),y) TARGET_CPPFLAGS+= -I$(STAGING_TARGET_DIR)/opt/vc/include \ @@ -98,7 +100,6 @@ CONFIGURE_ARGS+= --disable-optical-drive \ --disable-libcap \ --disable-joystick \ --disable-dvdcss \ - --disable-debug \ --disable-gtest \ --disable-ccache \ --disable-wayland \ @@ -106,49 +107,50 @@ CONFIGURE_ARGS+= --disable-optical-drive \ --disable-mid \ --enable-alsa \ --enable-libvorbisenc \ + --enable-debug \ --enable-udev -ifneq ($(ADK_PACKAGE_XBMC_WITH_BLURAY),) +ifneq ($(ADK_PACKAGE_KODI_WITH_BLURAY),) CONFIGURE_ARGS+= --enable-libbluray else CONFIGURE_ARGS+= --disable-libbluray endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_AFP),) +ifneq ($(ADK_PACKAGE_KODI_WITH_AFP),) CONFIGURE_ARGS+= --enable-afpclient else CONFIGURE_ARGS+= --disable-afpclient endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_SMB),) +ifneq ($(ADK_PACKAGE_KODI_WITH_SMB),) CONFIGURE_ARGS+= --enable-samba else CONFIGURE_ARGS+= --disable-samba endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_SSH),) +ifneq ($(ADK_PACKAGE_KODI_WITH_SSH),) CONFIGURE_ARGS+= --enable-ssh else CONFIGURE_ARGS+= --disable-ssh endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_NFS),) +ifneq ($(ADK_PACKAGE_KODI_WITH_NFS),) CONFIGURE_ARGS+= --enable-nfs else CONFIGURE_ARGS+= --disable-nfs endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_CEC),) +ifneq ($(ADK_PACKAGE_KODI_WITH_CEC),) CONFIGURE_ARGS+= --enable-libcec else CONFIGURE_ARGS+= --disable-libcec endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_RTMP),) +ifneq ($(ADK_PACKAGE_KODI_WITH_RTMP),) CONFIGURE_ARGS+= --enable-rtmp else CONFIGURE_ARGS+= --disable-rtmp endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_AVAHI),) +ifneq ($(ADK_PACKAGE_KODI_WITH_AVAHI),) CONFIGURE_ARGS+= --enable-avahi else CONFIGURE_ARGS+= --disable-avahi endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_WEBSERVER),) +ifneq ($(ADK_PACKAGE_KODI_WITH_WEBSERVER),) CONFIGURE_ARGS+= --enable-webserver else CONFIGURE_ARGS+= --disable-webserver @@ -160,17 +162,13 @@ CONFIGURE_ARGS+= --with-platform=raspberry-pi \ --enable-gles \ --disable-sdl \ --disable-x11 -else +endif ifeq ($(ADK_TARGET_SYSTEM_SOLIDRUN_IMX6),y) CONFIGURE_ARGS+= --disable-x11 \ --disable-sdl \ - --disable-gles \ + --enable-gles \ --enable-neon \ --enable-codec=imxvpu -else -CONFIGURE_ARGS+= --enable-x11 \ - --enable-sdl -endif endif pre-configure: diff --git a/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp b/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp deleted file mode 100644 index 4b8b25efb..000000000 --- a/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) - -#include <stdlib.h> -#include "LinuxPowerSyscall.h" -#include "utils/log.h" - -CLinuxPowerSyscall::CLinuxPowerSyscall() -{ - CLog::Log(LOGINFO, "Selected LinuxPower as PowerSyscall"); -} - -CLinuxPowerSyscall::~CLinuxPowerSyscall() -{ } - -bool CLinuxPowerSyscall::Powerdown() -{ - system("/sbin/poweroff -F"); - return 0; -} - -bool CLinuxPowerSyscall::Reboot() -{ - system("/sbin/reboot -F"); - return 0; -} - -int CLinuxPowerSyscall::BatteryLevel(void) -{ } - -bool CLinuxPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback) -{ - return true; -} - -#endif - diff --git a/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h b/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h deleted file mode 100644 index 959a8119b..000000000 --- a/package/kodi/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) -#include "powermanagement/IPowerSyscall.h" - -class CLinuxPowerSyscall : public CPowerSyscallWithoutEvents -{ -public: - CLinuxPowerSyscall(); - ~CLinuxPowerSyscall(); - - virtual bool Powerdown(); - virtual bool Suspend(void) { return false; } - virtual bool Hibernate(void) { return false; } - virtual bool Reboot(); - - virtual bool CanPowerdown(void) { return true; } - virtual bool CanSuspend(void) { return false; } - virtual bool CanHibernate(void) { return false; } - virtual bool CanReboot(void) { return true; } - virtual int BatteryLevel(void); - - virtual bool PumpPowerEvents(IPowerEventsCallback *callback); -}; -#endif - diff --git a/package/xbmc-imx6/Makefile b/package/xbmc-imx6/Makefile deleted file mode 100644 index 27162332f..000000000 --- a/package/xbmc-imx6/Makefile +++ /dev/null @@ -1,173 +0,0 @@ -# This file is part of the OpenADK project. OpenADK is copyrighted -# material, please see the LICENCE file in the top-level directory. - -include $(ADK_TOPDIR)/rules.mk - -PKG_NAME:= xbmc-imx6 -PKG_VERSION:= 13.2 -PKG_RELEASE:= 1 -PKG_MD5SUM:= 1998e1c767e358e4df8b6a578f54a8d2 -PKG_DESCR:= software media player (imx6 flavour) -PKG_SECTION:= mm/video -PKG_DEPENDS:= boost python2 libstdcxx glibc-gconv -PKG_DEPENDS+= libglew mesalib libass libmpeg2 libmad libdbus -PKG_DEPENDS+= libjpeg-turbo libogg libvorbis libmodplug libcurl -PKG_DEPENDS+= libflac libopenssl libbz2 libtiff liblzo -PKG_DEPENDS+= yajl tinyxml libsqlite libpcrecpp libpng libncurses -PKG_DEPENDS+= libpcre libcdio libfreetype libsamplerate -PKG_DEPENDS+= taglib libjasper libmp3lame libmicrohttpd -PKG_DEPENDS+= libgpg-error libudev python2-mod-sqlite ffmpeg -PKG_DEPENDS+= libxslt libvorbisenc alsa-lib glib libglu librt -PKG_BUILDDEP:= boost python2 mesalib libglew libass -PKG_BUILDDEP+= libmpeg2 libmad libjpeg-turbo libogg libvorbis -PKG_BUILDDEP+= curl flac openssl bzip2 libtiff liblzo yajl -PKG_BUILDDEP+= tinyxml sqlite pcre libpng libcdio freetype -PKG_BUILDDEP+= libsamplerate taglib libjasper lame libmicrohttpd -PKG_BUILDDEP+= eudev alsa-lib glib glu libmodplug -PKG_BUILDDEP+= libgpg-error dbus libxslt libvorbis -PKG_BUILDDEP+= swig-host sdl-host sdl-image-host liblzo-host -PKG_BUILDDEP+= zip-host unzip-host ffmpeg -PKG_DEPENDS+= libfslvpuwrap gpu-viv-bin-mx6q -PKG_BUILDDEP+= libfslvpuwrap gpu-viv-bin-mx6q -PKG_URL:= http://xbmc.org/ -PKG_SITES:= http://www.openadk.org/distfiles/ - -PKG_FLAVOURS_XBMC_IMX6:= WITH_SMB WITH_NFS WITH_SSH WITH_AVAHI WITH_CEC -PKG_FLAVOURS_XBMC_IMX6+= WITH_AFP WITH_WEBSERVER WITH_RTMP WITH_BLURAY - -PKGFD_WITH_SMB:= enable samba support -PKGFB_WITH_SMB:= samba -PKGFS_WITH_SMB:= samba-lib -PKGFD_WITH_NFS:= enable nfs support -PKGFB_WITH_NFS:= libnfs -PKGFS_WITH_NFS:= libnfs -PKGFD_WITH_SSH:= enable ssh support -PKGFB_WITH_SSH:= libssh -PKGFS_WITH_SSH:= libssh -PKGFD_WITH_AVAHI:= enable avahi support -PKGFB_WITH_AVAHI:= avahi -PKGFS_WITH_AVAHI:= libavahi -PKGFD_WITH_CEC:= enable cec support -PKGFB_WITH_CEC:= libcec -PKGFS_WITH_CEC:= libcec -PKGFD_WITH_AFP:= enable afp support -PKGFB_WITH_AFP:= afpfs-ng -PKGFS_WITH_AFP:= libafpclient -PKGFD_WITH_RTMP:= enable rtmp support -PKGFB_WITH_RTMP:= rtmpdump -PKGFS_WITH_RTMP:= librtmp -PKGFD_WITH_BLURAY:= enable bluray support -PKGFB_WITH_BLURAY:= libbluray -PKGFS_WITH_BLURAY:= libbluray -PKGFD_WITH_WEBSERVER:= enable internal webserver support - -PKG_SYSTEM_DEPENDS:= solidrun-imx6 - -DIFF_IGNOREFILES:= configure missing depcomp install-sh INSTALL \ - aclocal.m4 config.h.in - -include $(ADK_TOPDIR)/mk/package.mk - -$(eval $(call PKG_template,XBMC_IMX6,xbmc-imx6,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) - -HOST_CXXFLAGS+= $(HOST_CPPFLAGS) -XAKE_FLAGS+= V=1 TIXML_USE_STL=1 GCC_HONOUR_COPTS=s -TARGET_CPPFLAGS+= -I. -I./utils \ - -I$(STAGING_TARGET_DIR)/usr/include/afpfs-ng \ - -DTIXML_USE_STL=1 -DHAS_SIMPLEPM=1 -DLINUX - -AUTOTOOL_STYLE:= autoreconf -CONFIGURE_ENV+= DESTDIR='${WRKINST}' \ - TEXTUREPACKER_NATIVE_ROOT='$(STAGING_HOST_DIR)/usr' -CONFIGURE_ARGS+= --disable-optical-drive \ - --disable-optimizations \ - --disable-mysql \ - --disable-rsxs \ - --disable-projectm \ - --disable-crystalhd \ - --disable-mdnsembedded \ - --disable-libusb \ - --disable-libcap \ - --disable-joystick \ - --disable-dvdcss \ - --disable-debug \ - --disable-gtest \ - --disable-ccache \ - --disable-wayland \ - --disable-pulse \ - --disable-mid \ - --enable-alsa \ - --enable-libmp3lame \ - --enable-libvorbisenc \ - --enable-udev \ - --enable-external-libraries - -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_BLURAY),) -CONFIGURE_ARGS+= --enable-libbluray -else -CONFIGURE_ARGS+= --disable-libbluray -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_AFP),) -CONFIGURE_ARGS+= --enable-afpclient -else -CONFIGURE_ARGS+= --disable-afpclient -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_SMB),) -CONFIGURE_ARGS+= --enable-samba -else -CONFIGURE_ARGS+= --disable-samba -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_SSH),) -CONFIGURE_ARGS+= --enable-ssh -else -CONFIGURE_ARGS+= --disable-ssh -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_NFS),) -CONFIGURE_ARGS+= --enable-nfs -else -CONFIGURE_ARGS+= --disable-nfs -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_CEC),) -CONFIGURE_ARGS+= --enable-libcec -else -CONFIGURE_ARGS+= --disable-libcec -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_RTMP),) -CONFIGURE_ARGS+= --enable-rtmp -else -CONFIGURE_ARGS+= --disable-rtmp -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_AVAHI),) -CONFIGURE_ARGS+= --enable-avahi -else -CONFIGURE_ARGS+= --disable-avahi -endif -ifneq ($(ADK_PACKAGE_XBMC_IMX6_WITH_WEBSERVER),) -CONFIGURE_ARGS+= --enable-webserver -else -CONFIGURE_ARGS+= --disable-webserver -endif - -CONFIGURE_ARGS+= --disable-x11 \ - --disable-sdl \ - --disable-external-ffmpeg \ - --enable-debug \ - --enable-gles \ - --enable-neon \ - --enable-codec=imxvpu - -pre-configure: - (cd $(WRKBUILD)/lib/cpluff && env PATH=$(AUTOTOOL_PATH) ./autogen.sh) - -xbmc-imx6-install: - $(INSTALL_DIR) $(IDIR_XBMC_IMX6)/usr/lib/xbmc/addons - $(CP) $(WRKINST)/usr/lib/xbmc/* \ - $(IDIR_XBMC_IMX6)/usr/lib/xbmc - $(INSTALL_DIR) $(IDIR_XBMC_IMX6)/usr/share/xbmc - $(CP) $(WRKINST)/usr/share/xbmc/* \ - $(IDIR_XBMC_IMX6)/usr/share/xbmc - $(INSTALL_DIR) $(IDIR_XBMC_IMX6)/usr/bin - $(INSTALL_BIN) $(WRKINST)/usr/bin/xbmc \ - $(IDIR_XBMC_IMX6)/usr/bin - -include ${ADK_TOPDIR}/mk/pkg-bottom.mk diff --git a/package/xbmc-imx6/files/xbmc.init b/package/xbmc-imx6/files/xbmc.init deleted file mode 100644 index bbe65c1c2..000000000 --- a/package/xbmc-imx6/files/xbmc.init +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -#PKG xbmc -#INIT 95 - -. /etc/rc.conf - -case $1 in -autostop) ;; -autostart) - test x"${xbmc:-NO}" = x"NO" && exit 0 - test x"$xbmc" = x"DAEMON" && test -x /bin/mksh && exec mksh -T- $0 start - exec sh $0 start - ;; -start) - export LD_LIBRARY_PATH=/opt/vc/lib - xbmc & - ;; -stop) - kill $(pgrep -f /usr/lib/xbmc/xbmc.bin) - ;; -restart) - sh $0 stop - sh $0 start - ;; -*) - echo "Usage: $0 {start | stop | restart}" - exit 1 - ;; -esac -exit $? diff --git a/package/xbmc-imx6/files/xbmc.postinst b/package/xbmc-imx6/files/xbmc.postinst deleted file mode 100644 index 45274da68..000000000 --- a/package/xbmc-imx6/files/xbmc.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -. $IPKG_INSTROOT/etc/functions.sh -add_rcconf xbmc NO diff --git a/package/xbmc-imx6/patches/patch-Makefile_include_in b/package/xbmc-imx6/patches/patch-Makefile_include_in deleted file mode 100644 index e73d0b4c7..000000000 --- a/package/xbmc-imx6/patches/patch-Makefile_include_in +++ /dev/null @@ -1,10 +0,0 @@ ---- xbmc-imx6-13.2.orig/Makefile.include.in 2014-09-02 13:26:10.000000000 +0200 -+++ xbmc-imx6-13.2/Makefile.include.in 2014-09-02 20:41:40.075316050 +0200 -@@ -32,6 +32,7 @@ CC=@CC@ - CXXFLAGS+=@CXXFLAGS@ - CFLAGS+=@CFLAGS@ - LDFLAGS+=@LDFLAGS@ -+INCLUDES+=@CPPFLAGS@ - INCLUDES+=-I@abs_top_srcdir@/lib - INCLUDES+=-I@abs_top_srcdir@/xbmc - INCLUDES+=$(sort @INCLUDES@) diff --git a/package/xbmc-imx6/patches/patch-configure_in b/package/xbmc-imx6/patches/patch-configure_in deleted file mode 100644 index 1360492e4..000000000 --- a/package/xbmc-imx6/patches/patch-configure_in +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-imx6-13.2.orig/configure.in 2014-09-02 13:26:12.000000000 +0200 -+++ xbmc-imx6-13.2/configure.in 2014-09-04 16:22:35.671588472 +0200 -@@ -553,7 +553,7 @@ OBJDUMP="${OBJDUMP:-objdump}" - # so we have to use our own var here - # defaults to the build side target_os - # and should be overridden for cross below (see android) --ffmpeg_target_os=$(tolower $(uname -s)) -+ffmpeg_target_os=linux - - # host detection and setup - case $host in diff --git a/package/xbmc-imx6/patches/patch-lib_cpluff_Makefile_am b/package/xbmc-imx6/patches/patch-lib_cpluff_Makefile_am deleted file mode 100644 index fb70c6993..000000000 --- a/package/xbmc-imx6/patches/patch-lib_cpluff_Makefile_am +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/Makefile.am 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/Makefile.am 2014-05-05 13:03:15.329450196 +0200 -@@ -6,7 +6,7 @@ - - ACLOCAL_AMFLAGS = -I m4 - --SUBDIRS = libcpluff loader console po test docsrc doc -+SUBDIRS = libcpluff loader console test docsrc doc - DIST_SUBDIRS = $(SUBDIRS) examples - - EXTRA_DIST = COPYRIGHT.txt INSTALL.txt ChangeLog.txt Roadmap.txt autogen.sh plugin.xsd diff --git a/package/xbmc-imx6/patches/patch-lib_cpluff_autogen_sh b/package/xbmc-imx6/patches/patch-lib_cpluff_autogen_sh deleted file mode 100644 index 24a84ea38..000000000 --- a/package/xbmc-imx6/patches/patch-lib_cpluff_autogen_sh +++ /dev/null @@ -1,10 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/autogen.sh 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/autogen.sh 2014-05-05 12:15:29.307227206 +0200 -@@ -15,7 +15,6 @@ fi - - # Generate files in top level directory - cd "$basedir" --autopoint - rm -f ABOUT-NLS - test -d auxliary || mkdir auxliary - libtoolize --automake -f diff --git a/package/xbmc-imx6/patches/patch-lib_cpluff_configure_ac b/package/xbmc-imx6/patches/patch-lib_cpluff_configure_ac deleted file mode 100644 index d38754bfd..000000000 --- a/package/xbmc-imx6/patches/patch-lib_cpluff_configure_ac +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/configure.ac 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/configure.ac 2014-05-05 13:03:32.437577723 +0200 -@@ -46,8 +46,6 @@ AC_SUBST([CP_CXX_LIB_VERSION]) - # ----------------------- - AM_INIT_AUTOMAKE([foreign]) - m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) --AM_GNU_GETTEXT([external]) --AM_GNU_GETTEXT_VERSION([0.16.1]) - - # C/C++ compiler settings - # ------------------- diff --git a/package/xbmc-imx6/patches/patch-lib_cpluff_libcpluff_Makefile_am b/package/xbmc-imx6/patches/patch-lib_cpluff_libcpluff_Makefile_am deleted file mode 100644 index ffa9a1529..000000000 --- a/package/xbmc-imx6/patches/patch-lib_cpluff_libcpluff_Makefile_am +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/libcpluff/Makefile.am 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/libcpluff/Makefile.am 2014-05-05 13:53:11.766461900 +0200 -@@ -6,7 +6,7 @@ - - SUBDIRS = docsrc - --LIBS = @LIBS_LIBCPLUFF@ @LTLIBINTL@ @LIBS@ -+LIBS = @LIBS_LIBCPLUFF@ @LIBS@ - - CPPFLAGS = @CPPFLAGS@ - CPPFLAGS += -I. -DCP_C_API=CP_EXPORT -DCP_HOST="\"$(host)\"" -DCP_DATADIR="\"$(datadir)\"" diff --git a/package/xbmc-imx6/patches/patch-m4_ax_python_devel_m4 b/package/xbmc-imx6/patches/patch-m4_ax_python_devel_m4 deleted file mode 100644 index ded81dbd5..000000000 --- a/package/xbmc-imx6/patches/patch-m4_ax_python_devel_m4 +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/m4/ax_python_devel.m4 2014-04-30 15:43:58.000000000 +0200 -+++ xbmc-13.0rc1/m4/ax_python_devel.m4 2014-05-02 08:03:10.000000000 +0200 -@@ -298,7 +298,7 @@ EOD` - # save current global flags - ac_save_LIBS="$LIBS" - ac_save_CPPFLAGS="$CPPFLAGS" -- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS" -+ LIBS="$ac_save_LIBS $PYTHON_LDFLAGS" - CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" - AC_LANG_PUSH([C]) - AC_LINK_IFELSE([ diff --git a/package/xbmc-imx6/patches/patch-xbmc_Application_cpp b/package/xbmc-imx6/patches/patch-xbmc_Application_cpp deleted file mode 100644 index 6e89843c4..000000000 --- a/package/xbmc-imx6/patches/patch-xbmc_Application_cpp +++ /dev/null @@ -1,41 +0,0 @@ ---- xbmc-imx6-13.2.orig/xbmc/Application.cpp 2014-09-02 13:26:21.000000000 +0200 -+++ xbmc-imx6-13.2/xbmc/Application.cpp 2014-09-02 20:38:02.102270928 +0200 -@@ -656,7 +656,7 @@ bool CApplication::Create() - - if (!CLog::Init(CSpecialProtocol::TranslatePath(g_advancedSettings.m_logFolder).c_str())) - { -- fprintf(stderr,"Could not init logging classes. Permission errors on ~/.xbmc (%s)\n", -+ fprintf(stderr,"Could not init logging classes. Permission errors on %s\n", - CSpecialProtocol::TranslatePath(g_advancedSettings.m_logFolder).c_str()); - return false; - } -@@ -1023,10 +1023,13 @@ bool CApplication::InitDirectoriesLinux( - userName = "root"; - - CStdString userHome; -+ userHome = "/data/xbmc"; -+/* - if (getenv("HOME")) - userHome = getenv("HOME"); - else - userHome = "/root"; -+*/ - - CStdString xbmcBinPath, xbmcPath; - CUtil::GetHomePath(xbmcBinPath, "XBMC_BIN_HOME"); -@@ -1058,11 +1061,11 @@ bool CApplication::InitDirectoriesLinux( - // map our special drives - CSpecialProtocol::SetXBMCBinPath(xbmcBinPath); - CSpecialProtocol::SetXBMCPath(xbmcPath); -- CSpecialProtocol::SetHomePath(userHome + "/.xbmc"); -- CSpecialProtocol::SetMasterProfilePath(userHome + "/.xbmc/userdata"); -+ CSpecialProtocol::SetHomePath(userHome); -+ CSpecialProtocol::SetMasterProfilePath(userHome + "/userdata"); - -- CStdString strTempPath = userHome; -- strTempPath = URIUtils::AddFileToFolder(strTempPath, ".xbmc/temp"); -+ CStdString strTempPath = "/tmp"; -+ strTempPath = URIUtils::AddFileToFolder(strTempPath, "/xbmc"); - if (getenv("XBMC_TEMP")) - strTempPath = getenv("XBMC_TEMP"); - CSpecialProtocol::SetTempPath(strTempPath); diff --git a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_cpp b/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_cpp deleted file mode 100644 index 38b8da9db..000000000 --- a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-imx6-13.2.orig/xbmc/cores/dvdplayer/DVDAudio.cpp 2014-09-02 13:26:21.000000000 +0200 -+++ xbmc-imx6-13.2/xbmc/cores/dvdplayer/DVDAudio.cpp 2014-09-04 15:11:42.682094168 +0200 -@@ -117,7 +117,7 @@ CDVDAudio::~CDVDAudio() - free(m_pBuffer); - } - --bool CDVDAudio::Create(const DVDAudioFrame &audioframe, CodecID codec, bool needresampler) -+bool CDVDAudio::Create(const DVDAudioFrame &audioframe, AVCodecID codec, bool needresampler) - { - CLog::Log(LOGNOTICE, - "Creating audio stream (codec id: %i, channels: %i, sample rate: %i, %s)", diff --git a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_h b/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_h deleted file mode 100644 index a6a9db69a..000000000 --- a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDAudio_h +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-imx6-13.2.orig/xbmc/cores/dvdplayer/DVDAudio.h 2014-09-02 13:26:21.000000000 +0200 -+++ xbmc-imx6-13.2/xbmc/cores/dvdplayer/DVDAudio.h 2014-09-04 15:10:58.865853789 +0200 -@@ -76,7 +76,7 @@ public: - float GetCurrentAttenuation(); - void Pause(); - void Resume(); -- bool Create(const DVDAudioFrame &audioframe, CodecID codec, bool needresampler); -+ bool Create(const DVDAudioFrame &audioframe, AVCodecID codec, bool needresampler); - bool IsValidFormat(const DVDAudioFrame &audioframe); - void Destroy(); - DWORD AddPackets(const DVDAudioFrame &audioframe); diff --git a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDDemuxers_DVDDemux_h b/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDDemuxers_DVDDemux_h deleted file mode 100644 index f9e6d0a87..000000000 --- a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDDemuxers_DVDDemux_h +++ /dev/null @@ -1,20 +0,0 @@ ---- xbmc-imx6-13.2.orig/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemux.h 2014-09-02 13:26:21.000000000 +0200 -+++ xbmc-imx6-13.2/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemux.h 2014-09-04 15:09:09.261253674 +0200 -@@ -88,7 +88,7 @@ public: - { - iId = 0; - iPhysicalId = 0; -- codec = (CodecID)0; // CODEC_ID_NONE -+ codec = (AVCodecID)0; // CODEC_ID_NONE - codec_fourcc = 0; - profile = FF_PROFILE_UNKNOWN; - level = 0; -@@ -118,7 +118,7 @@ public: - - int iId; // most of the time starting from 0 - int iPhysicalId; // id -- CodecID codec; -+ AVCodecID codec; - unsigned int codec_fourcc; // if available - int profile; // encoder profile of the stream reported by the decoder. used to qualify hw decoders. - int level; // encoder level of the stream reported by the decoder. used to qualify hw decoders. diff --git a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDStreamInfo_h b/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDStreamInfo_h deleted file mode 100644 index 6df572da3..000000000 --- a/package/xbmc-imx6/patches/patch-xbmc_cores_dvdplayer_DVDStreamInfo_h +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-imx6-13.2.orig/xbmc/cores/dvdplayer/DVDStreamInfo.h 2014-09-02 13:26:21.000000000 +0200 -+++ xbmc-imx6-13.2/xbmc/cores/dvdplayer/DVDStreamInfo.h 2014-09-04 15:11:27.778012372 +0200 -@@ -55,7 +55,7 @@ public: - void Assign(const CDVDStreamInfo &right, bool withextradata); - void Assign(const CDemuxStream &right, bool withextradata); - -- CodecID codec; -+ AVCodecID codec; - StreamType type; - bool software; //force software decoding - diff --git a/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp b/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp deleted file mode 100644 index 4b8b25efb..000000000 --- a/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) - -#include <stdlib.h> -#include "LinuxPowerSyscall.h" -#include "utils/log.h" - -CLinuxPowerSyscall::CLinuxPowerSyscall() -{ - CLog::Log(LOGINFO, "Selected LinuxPower as PowerSyscall"); -} - -CLinuxPowerSyscall::~CLinuxPowerSyscall() -{ } - -bool CLinuxPowerSyscall::Powerdown() -{ - system("/sbin/poweroff -F"); - return 0; -} - -bool CLinuxPowerSyscall::Reboot() -{ - system("/sbin/reboot -F"); - return 0; -} - -int CLinuxPowerSyscall::BatteryLevel(void) -{ } - -bool CLinuxPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback) -{ - return true; -} - -#endif - diff --git a/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h b/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h deleted file mode 100644 index 959a8119b..000000000 --- a/package/xbmc-imx6/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) -#include "powermanagement/IPowerSyscall.h" - -class CLinuxPowerSyscall : public CPowerSyscallWithoutEvents -{ -public: - CLinuxPowerSyscall(); - ~CLinuxPowerSyscall(); - - virtual bool Powerdown(); - virtual bool Suspend(void) { return false; } - virtual bool Hibernate(void) { return false; } - virtual bool Reboot(); - - virtual bool CanPowerdown(void) { return true; } - virtual bool CanSuspend(void) { return false; } - virtual bool CanHibernate(void) { return false; } - virtual bool CanReboot(void) { return true; } - virtual int BatteryLevel(void); - - virtual bool PumpPowerEvents(IPowerEventsCallback *callback); -}; -#endif - diff --git a/package/xbmc/Makefile b/package/xbmc/Makefile deleted file mode 100644 index 25c82297a..000000000 --- a/package/xbmc/Makefile +++ /dev/null @@ -1,198 +0,0 @@ -# This file is part of the OpenADK project. OpenADK is copyrighted -# material, please see the LICENCE file in the top-level directory. - -include $(ADK_TOPDIR)/rules.mk - -PKG_NAME:= xbmc -PKG_VERSION:= 13.2 -PKG_RELEASE:= 1 -PKG_MD5SUM:= d80153b2cc78b88966458ab136e9494f -PKG_DESCR:= software media player -PKG_SECTION:= mm/video -PKG_DEPENDS:= boost python2 libstdcxx glibc-gconv -PKG_DEPENDS+= libglew mesalib libass libmpeg2 libmad libdbus -PKG_DEPENDS+= libjpeg-turbo libogg libvorbis libmodplug libcurl -PKG_DEPENDS+= libflac libopenssl libbz2 libtiff liblzo -PKG_DEPENDS+= yajl tinyxml libsqlite libpcrecpp libpng libncurses -PKG_DEPENDS+= libpcre libcdio libfreetype libsamplerate -PKG_DEPENDS+= taglib libjasper libmp3lame libmicrohttpd -PKG_DEPENDS+= libgpg-error libudev python2-mod-sqlite -PKG_DEPENDS+= libxslt libvorbisenc alsa-lib glib libglu librt -PKG_BUILDDEP:= boost python2 mesalib libglew libass -PKG_BUILDDEP+= libmpeg2 libmad libjpeg-turbo libogg libvorbis -PKG_BUILDDEP+= curl flac openssl bzip2 libtiff liblzo yajl -PKG_BUILDDEP+= tinyxml sqlite pcre libpng libcdio freetype -PKG_BUILDDEP+= libsamplerate taglib libjasper lame libmicrohttpd -PKG_BUILDDEP+= eudev alsa-lib glib glu libmodplug -PKG_BUILDDEP+= libgpg-error dbus libxslt libvorbis -PKG_BUILDDEP+= swig-host sdl-host sdl-image-host liblzo-host -PKG_BUILDDEP+= zip-host unzip-host -PKG_URL:= http://xbmc.org/ -PKG_SITES:= https://github.com/xbmc/xbmc/archive/ - -DISTFILES:= ${PKG_VERSION}-Gotham.tar.gz -WRKDIST= $(WRKDIR)/$(PKG_NAME)-${PKG_VERSION}-Gotham - -PKG_FLAVOURS_XBMC:= WITH_SMB WITH_NFS WITH_SSH WITH_AVAHI WITH_CEC -PKG_FLAVOURS_XBMC+= WITH_AFP WITH_WEBSERVER WITH_RTMP WITH_BLURAY - -PKGFD_WITH_SMB:= enable samba support -PKGFB_WITH_SMB:= samba -PKGFS_WITH_SMB:= samba-lib -PKGFD_WITH_NFS:= enable nfs support -PKGFB_WITH_NFS:= libnfs -PKGFS_WITH_NFS:= libnfs -PKGFD_WITH_SSH:= enable ssh support -PKGFB_WITH_SSH:= libssh -PKGFS_WITH_SSH:= libssh -PKGFD_WITH_AVAHI:= enable avahi support -PKGFB_WITH_AVAHI:= avahi -PKGFS_WITH_AVAHI:= libavahi -PKGFD_WITH_CEC:= enable cec support -PKGFB_WITH_CEC:= libcec -PKGFS_WITH_CEC:= libcec -PKGFD_WITH_AFP:= enable afp support -PKGFB_WITH_AFP:= afpfs-ng -PKGFS_WITH_AFP:= libafpclient -PKGFD_WITH_RTMP:= enable rtmp support -PKGFB_WITH_RTMP:= rtmpdump -PKGFS_WITH_RTMP:= librtmp -PKGFD_WITH_BLURAY:= enable bluray support -PKGFB_WITH_BLURAY:= libbluray -PKGFS_WITH_BLURAY:= libbluray -PKGFD_WITH_WEBSERVER:= enable internal webserver support - -PKG_DEPENDS_IBM_X40:= libsdl libsdl-image libxshmfence libx11 libxext libxt libsm libice -PKG_DEPENDS_VBOX_X86:= libsdl libsdl-image libxshmfence libx11 libxext libxt libsm libice -PKG_BUILDDEP_IBM_X40:= nasm-host sdl sdl-image -PKG_BUILDDEP_VBOX_X86:= nasm-host sdl sdl-image -PKG_DEPENDS_RASPBERRY_PI:= bcm2835-vc -PKG_BUILDDEP_RASPBERRY_PI:= bcm2835-vc -PKG_SYSTEM_DEPENDS:= raspberry-pi ibm-x40 vbox-x86 - -DIFF_IGNOREFILES:= configure missing depcomp install-sh INSTALL \ - aclocal.m4 config.h.in - -include $(ADK_TOPDIR)/mk/package.mk - -$(eval $(call PKG_template,XBMC,xbmc,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) - -HOST_CXXFLAGS+= $(HOST_CPPFLAGS) -XAKE_FLAGS+= V=1 TIXML_USE_STL=1 GCC_HONOUR_COPTS=s -TARGET_CPPFLAGS+= -I. -I./utils \ - -I$(STAGING_TARGET_DIR)/usr/include/afpfs-ng \ - -DTIXML_USE_STL=1 -DHAS_SIMPLEPM=1 -DLINUX - -ifeq ($(ADK_TARGET_SYSTEM_RASPBERRY_PI),y) -TARGET_CPPFLAGS+= -I$(STAGING_TARGET_DIR)/opt/vc/include \ - -I$(STAGING_TARGET_DIR)/opt/vc/include/interface/vcos/pthreads \ - -I$(STAGING_TARGET_DIR)/opt/vc/include/interface/vmcs_host/linux -TARGET_LDFLAGS+= -L$(STAGING_TARGET_DIR)/opt/vc/lib -lkhrn_static -endif - -AUTOTOOL_STYLE:= autoreconf -CONFIGURE_ENV+= DESTDIR='${WRKINST}' \ - TEXTUREPACKER_NATIVE_ROOT='$(STAGING_HOST_DIR)/usr' -CONFIGURE_ARGS+= --disable-optical-drive \ - --disable-optimizations \ - --disable-mysql \ - --disable-rsxs \ - --disable-projectm \ - --disable-crystalhd \ - --disable-mdnsembedded \ - --disable-libusb \ - --disable-libcap \ - --disable-joystick \ - --disable-dvdcss \ - --disable-debug \ - --disable-gtest \ - --disable-ccache \ - --disable-wayland \ - --disable-pulse \ - --disable-mid \ - --enable-alsa \ - --enable-libmp3lame \ - --enable-libvorbisenc \ - --enable-udev \ - --enable-external-libraries - -ifneq ($(ADK_PACKAGE_XBMC_WITH_BLURAY),) -CONFIGURE_ARGS+= --enable-libbluray -else -CONFIGURE_ARGS+= --disable-libbluray -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_AFP),) -CONFIGURE_ARGS+= --enable-afpclient -else -CONFIGURE_ARGS+= --disable-afpclient -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_SMB),) -CONFIGURE_ARGS+= --enable-samba -else -CONFIGURE_ARGS+= --disable-samba -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_SSH),) -CONFIGURE_ARGS+= --enable-ssh -else -CONFIGURE_ARGS+= --disable-ssh -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_NFS),) -CONFIGURE_ARGS+= --enable-nfs -else -CONFIGURE_ARGS+= --disable-nfs -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_CEC),) -CONFIGURE_ARGS+= --enable-libcec -else -CONFIGURE_ARGS+= --disable-libcec -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_RTMP),) -CONFIGURE_ARGS+= --enable-rtmp -else -CONFIGURE_ARGS+= --disable-rtmp -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_AVAHI),) -CONFIGURE_ARGS+= --enable-avahi -else -CONFIGURE_ARGS+= --disable-avahi -endif -ifneq ($(ADK_PACKAGE_XBMC_WITH_WEBSERVER),) -CONFIGURE_ARGS+= --enable-webserver -else -CONFIGURE_ARGS+= --disable-webserver -endif - -ifeq ($(ADK_TARGET_SYSTEM_RASPBERRY_PI),y) -CONFIGURE_ARGS+= --with-platform=raspberry-pi \ - --enable-player=omxplayer \ - --enable-gles \ - --disable-sdl \ - --disable-x11 -else -ifeq ($(ADK_TARGET_SYSTEM_SOLIDRUN_IMX6),y) -CONFIGURE_ARGS+= --disable-x11 \ - --disable-sdl \ - --disable-gles \ - --enable-neon \ - --enable-codec=imxvpu -else -CONFIGURE_ARGS+= --enable-x11 \ - --enable-sdl -endif -endif - -pre-configure: - (cd $(WRKBUILD)/lib/cpluff && env PATH=$(AUTOTOOL_PATH) ./autogen.sh) - -xbmc-install: - $(INSTALL_DIR) $(IDIR_XBMC)/usr/lib/xbmc/addons - $(CP) $(WRKINST)/usr/lib/xbmc/* \ - $(IDIR_XBMC)/usr/lib/xbmc - $(INSTALL_DIR) $(IDIR_XBMC)/usr/share/xbmc - $(CP) $(WRKINST)/usr/share/xbmc/* \ - $(IDIR_XBMC)/usr/share/xbmc - $(INSTALL_DIR) $(IDIR_XBMC)/usr/bin - $(INSTALL_BIN) $(WRKINST)/usr/bin/xbmc \ - $(IDIR_XBMC)/usr/bin - -include ${ADK_TOPDIR}/mk/pkg-bottom.mk diff --git a/package/xbmc/files/xbmc.init b/package/xbmc/files/xbmc.init deleted file mode 100644 index bbe65c1c2..000000000 --- a/package/xbmc/files/xbmc.init +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -#PKG xbmc -#INIT 95 - -. /etc/rc.conf - -case $1 in -autostop) ;; -autostart) - test x"${xbmc:-NO}" = x"NO" && exit 0 - test x"$xbmc" = x"DAEMON" && test -x /bin/mksh && exec mksh -T- $0 start - exec sh $0 start - ;; -start) - export LD_LIBRARY_PATH=/opt/vc/lib - xbmc & - ;; -stop) - kill $(pgrep -f /usr/lib/xbmc/xbmc.bin) - ;; -restart) - sh $0 stop - sh $0 start - ;; -*) - echo "Usage: $0 {start | stop | restart}" - exit 1 - ;; -esac -exit $? diff --git a/package/xbmc/files/xbmc.postinst b/package/xbmc/files/xbmc.postinst deleted file mode 100644 index 45274da68..000000000 --- a/package/xbmc/files/xbmc.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -. $IPKG_INSTROOT/etc/functions.sh -add_rcconf xbmc NO diff --git a/package/xbmc/patches/patch-Makefile_in b/package/xbmc/patches/patch-Makefile_in deleted file mode 100644 index e2c85f7a2..000000000 --- a/package/xbmc/patches/patch-Makefile_in +++ /dev/null @@ -1,92 +0,0 @@ ---- xbmc-13.1.orig/Makefile.in 2014-06-12 10:26:27.000000000 +0200 -+++ xbmc-13.1/Makefile.in 2014-06-26 15:18:53.463409058 +0200 -@@ -191,13 +191,7 @@ ifeq (@USE_LIBAV_HACKS@,1) - DIRECTORY_ARCHIVES += lib/xbmc-libav-hacks/dll-libavhacks.a - endif - --PAPCODECS_DIRS= \ -- lib/nosefart \ -- lib/timidity \ -- lib/libsidplay2 \ -- lib/stsound/StSoundLibrary \ -- lib/snesapu/SNES/SNESAPU \ -- lib/vgmstream -+PAPCODECS_DIRS= - - ifeq (@USE_ASAP_CODEC@,1) - PAPCODECS_DIRS+= \ -@@ -419,21 +413,11 @@ libhdhomerun: dllloader - $(MAKE) -C lib/libhdhomerun - papcodecs: dllloader dvdpcodecs - test -d system/players/paplayer || mkdir system/players/paplayer -- $(MAKE) -C lib/vgmstream -- $(MAKE) -C lib/timidity -- $(MAKE) -C lib/nosefart --ifneq ($(findstring arm-osx,@ARCH@), arm-osx) -- $(MAKE) -C lib/libsidplay2 --endif - ifeq (@USE_ASAP_CODEC@,1) - ifneq ($(findstring osx,@ARCH@), osx) - $(MAKE) -C lib/asap asap-xbmc - endif - endif -- $(MAKE) -C lib/stsound/StSoundLibrary --ifeq ($(or $(findstring powerpc,@ARCH@),$(findstring x86_64-linux,@ARCH@),$(findstring arm, @ARCH@),$(findstring freebsd,@ARCH@)),) -- $(MAKE) -C lib/snesapu/SNES/SNESAPU --endif - imagelib: dllloader - $(MAKE) -C lib/cximage-6.0 - -@@ -586,25 +570,7 @@ install-arch: - ifeq (@USE_PVR_ADDONS@,1) - $(MAKE) -C pvr-addons install - endif --ifeq ($(findstring freebsd,@ARCH@), freebsd) -- @find -E system addons -type f -not -iregex ".*svn.*" \ -- -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs" \ -- -exec sh -c "install -d \"$(DESTDIR)$(libdir)/xbmc/\`dirname '{}'\`\"" \; \ -- -and \ -- -exec install "{}" $(DESTDIR)$(libdir)/xbmc/"{}" \; \ -- -exec printf " -- %-75.75s\r" "{}" \; --else --ifeq ($(findstring Darwin,$(shell uname -s)),Darwin) -- @find -E system addons -type f -not -iregex ".*svn.*" \ -- -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs" \ -- -exec sh -c "install -d \"$(DESTDIR)$(libdir)/xbmc/\`dirname '{}'\`\"" \; \ -- -and \ -- -exec install "{}" $(DESTDIR)$(libdir)/xbmc/"{}" \; \ -- -exec printf " -- %-75.75s\r" "{}" \; --else - @find system addons -regextype posix-extended -type f -not -iregex ".*svn.*" -iregex ".*\.so|.*\.vis|.*\.xbs|.*\.pvr" -exec install -D "{}" $(DESTDIR)$(libdir)/xbmc/"{}" \; -printf " -- %-75.75f\r" --endif --endif - - install-scripts: - @install -d $(DESTDIR)$(bindir) -@@ -624,26 +590,7 @@ install-datas: install-scripts - @echo "Done!" - @echo "Copying system files to $(DESTDIR)$(datarootdir)/xbmc" - @install -d $(DESTDIR)$(datarootdir)/xbmc -- @# Arch independent files --ifeq ($(findstring bsd,@ARCH@), bsd) -- @find -E addons language media sounds userdata system -type f \ -- -not -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll|$(subst ${space},|,$(INSTALL_FILTER))" \ -- -exec sh -c "install -d \"$(DESTDIR)$(datarootdir)/xbmc/\`dirname '{}'\`\"" \; \ -- -and \ -- -exec install -m 0644 "{}" $(DESTDIR)$(datarootdir)/xbmc/"{}" \; \ -- -exec printf " -- %-75.75s\r" "{}" \; --else --ifeq ($(findstring Darwin,$(shell uname -s)),Darwin) -- @find -E addons language media sounds userdata system -type f \ -- -not -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll|$(subst ${space},|,$(INSTALL_FILTER))" \ -- -exec sh -c "install -d \"$(DESTDIR)$(datarootdir)/xbmc/\`dirname '{}'\`\"" \; \ -- -and \ -- -exec install -m 0644 "{}" $(DESTDIR)$(datarootdir)/xbmc/"{}" \; \ -- -exec printf " -- %-75.75s\r" "{}" \; --else - @find addons language media sounds userdata system -regextype posix-extended -type f -not -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll|.*\.pvr|$(subst ${space},|,$(INSTALL_FILTER))" -exec install -D -m 0644 "{}" $(DESTDIR)$(datarootdir)/xbmc/"{}" \; -printf " -- %-75.75f\r" --endif --endif - @# Icons and links - @install -d $(DESTDIR)$(datarootdir)/applications - @install tools/Linux/xbmc.desktop $(DESTDIR)$(datarootdir)/applications/xbmc.desktop diff --git a/package/xbmc/patches/patch-Makefile_include_in b/package/xbmc/patches/patch-Makefile_include_in deleted file mode 100644 index d73f62de2..000000000 --- a/package/xbmc/patches/patch-Makefile_include_in +++ /dev/null @@ -1,10 +0,0 @@ ---- xbmc-13.1.orig/Makefile.include.in 2014-06-08 08:40:24.000000000 +0200 -+++ xbmc-13.1/Makefile.include.in 2014-06-11 13:17:49.354722974 +0200 -@@ -37,6 +37,7 @@ CFLAGS+=@CFLAGS@ - CFLAGS_FOR_BUILD+=@CFLAGS_FOR_BUILD@ - LDFLAGS+=@LDFLAGS@ - LDFLAGS_FOR_BUILD+=@LDFLAGS_FOR_BUILD@ -+INCLUDES+=@CPPFLAGS@ - INCLUDES+=-I@abs_top_srcdir@/lib - INCLUDES+=-I@abs_top_srcdir@/xbmc - INCLUDES+=-I@abs_top_srcdir@/addons/library.xbmc.gui diff --git a/package/xbmc/patches/patch-configure_in b/package/xbmc/patches/patch-configure_in deleted file mode 100644 index ed9d8fa83..000000000 --- a/package/xbmc/patches/patch-configure_in +++ /dev/null @@ -1,76 +0,0 @@ ---- xbmc-13.1.orig/configure.in 2014-06-12 10:25:21.000000000 +0200 -+++ xbmc-13.1/configure.in 2014-06-26 20:29:26.343281621 +0200 -@@ -601,7 +601,7 @@ MAKE="${MAKE:-make}" - OBJDUMP="${OBJDUMP:-objdump}" - - use_external_ffmpeg=no --use_static_ffmpeg=no -+use_static_ffmpeg=yes - - # ffmpeg needs the output of uname -s (e.x. linux, darwin) for the target_os - # there is no autoconf variable which will give -@@ -609,7 +609,7 @@ use_static_ffmpeg=no - # so we have to use our own var here - # defaults to the build side target_os - # and should be overridden for cross below (see android) --ffmpeg_target_os=$(tolower $(uname -s)) -+ffmpeg_target_os=linux - - # host detection and setup - case $host in -@@ -626,7 +626,7 @@ case $host in - use_x11=no - build_shared_lib=yes - ;; -- i*86*-linux-gnu*|i*86*-*-linux-uclibc*) -+ i*86*-linux-*) - ARCH="i486-linux" - if test "$use_cpu" = "no" -a "$cross_compiling" = "yes"; then - use_arch="x86" -@@ -634,7 +634,7 @@ case $host in - fi - use_static_ffmpeg=yes - ;; -- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*) -+ x86_64-*-linux-*) - ARCH="x86_64-linux" - if test "$use_cpu" = "no" -a "$cross_compiling" = "yes"; then - use_arch="x86_64" -@@ -680,13 +680,13 @@ case $host in - ARCH="powerpc-osx" - use_arch="ppc" - ;; -- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*) -+ powerpc-*-linux-*) - ARCH="powerpc-linux" - ;; -- powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*) -+ powerpc64-*-linux-*) - ARCH="powerpc64-linux" - ;; -- arm*-*-linux-gnu*|arm*-*-linux-uclibc*) -+ arm*-*-linux-*) - ARCH="arm" - use_arch="arm" - ffmpeg_target_os=linux -@@ -1048,7 +1048,7 @@ if test "$use_gles" = "yes"; then - AC_DEFINE([HAVE_LIBEGL],[1],["Define to 1 if you have the `EGL' library (-lEGL)."]) - AC_DEFINE([HAVE_LIBGLESV2],[1],["Define to 1 if you have the `GLESv2' library (-lGLESv2)."]) - AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.) -- LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm" -+ LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm -lkhrn_static -lpthread -lm" - else - AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library)) - AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library)) -@@ -2532,11 +2532,8 @@ OUTPUT_FILES="Makefile \ - xbmc/cores/AudioEngine/Makefile \ - xbmc/cores/paplayer/Makefile \ - xbmc/cores/omxplayer/Makefile \ -- lib/timidity/Makefile \ - lib/asap/Makefile \ -- lib/nosefart/Makefile \ - lib/libsidplay2/Makefile \ -- lib/vgmstream/Makefile \ - lib/snesapu/SNES/SNESAPU/Makefile \ - lib/stsound/StSoundLibrary/Makefile \ - xbmc/cores/playercorefactory/Makefile \ diff --git a/package/xbmc/patches/patch-lib_cpluff_Makefile_am b/package/xbmc/patches/patch-lib_cpluff_Makefile_am deleted file mode 100644 index fb70c6993..000000000 --- a/package/xbmc/patches/patch-lib_cpluff_Makefile_am +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/Makefile.am 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/Makefile.am 2014-05-05 13:03:15.329450196 +0200 -@@ -6,7 +6,7 @@ - - ACLOCAL_AMFLAGS = -I m4 - --SUBDIRS = libcpluff loader console po test docsrc doc -+SUBDIRS = libcpluff loader console test docsrc doc - DIST_SUBDIRS = $(SUBDIRS) examples - - EXTRA_DIST = COPYRIGHT.txt INSTALL.txt ChangeLog.txt Roadmap.txt autogen.sh plugin.xsd diff --git a/package/xbmc/patches/patch-lib_cpluff_autogen_sh b/package/xbmc/patches/patch-lib_cpluff_autogen_sh deleted file mode 100644 index 24a84ea38..000000000 --- a/package/xbmc/patches/patch-lib_cpluff_autogen_sh +++ /dev/null @@ -1,10 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/autogen.sh 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/autogen.sh 2014-05-05 12:15:29.307227206 +0200 -@@ -15,7 +15,6 @@ fi - - # Generate files in top level directory - cd "$basedir" --autopoint - rm -f ABOUT-NLS - test -d auxliary || mkdir auxliary - libtoolize --automake -f diff --git a/package/xbmc/patches/patch-lib_cpluff_configure_ac b/package/xbmc/patches/patch-lib_cpluff_configure_ac deleted file mode 100644 index d38754bfd..000000000 --- a/package/xbmc/patches/patch-lib_cpluff_configure_ac +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/configure.ac 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/configure.ac 2014-05-05 13:03:32.437577723 +0200 -@@ -46,8 +46,6 @@ AC_SUBST([CP_CXX_LIB_VERSION]) - # ----------------------- - AM_INIT_AUTOMAKE([foreign]) - m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) --AM_GNU_GETTEXT([external]) --AM_GNU_GETTEXT_VERSION([0.16.1]) - - # C/C++ compiler settings - # ------------------- diff --git a/package/xbmc/patches/patch-lib_cpluff_libcpluff_Makefile_am b/package/xbmc/patches/patch-lib_cpluff_libcpluff_Makefile_am deleted file mode 100644 index ffa9a1529..000000000 --- a/package/xbmc/patches/patch-lib_cpluff_libcpluff_Makefile_am +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/lib/cpluff/libcpluff/Makefile.am 2014-04-30 15:43:53.000000000 +0200 -+++ xbmc-13.0rc1/lib/cpluff/libcpluff/Makefile.am 2014-05-05 13:53:11.766461900 +0200 -@@ -6,7 +6,7 @@ - - SUBDIRS = docsrc - --LIBS = @LIBS_LIBCPLUFF@ @LTLIBINTL@ @LIBS@ -+LIBS = @LIBS_LIBCPLUFF@ @LIBS@ - - CPPFLAGS = @CPPFLAGS@ - CPPFLAGS += -I. -DCP_C_API=CP_EXPORT -DCP_HOST="\"$(host)\"" -DCP_DATADIR="\"$(datadir)\"" diff --git a/package/xbmc/patches/patch-m4_ax_python_devel_m4 b/package/xbmc/patches/patch-m4_ax_python_devel_m4 deleted file mode 100644 index ded81dbd5..000000000 --- a/package/xbmc/patches/patch-m4_ax_python_devel_m4 +++ /dev/null @@ -1,11 +0,0 @@ ---- xbmc-13.0rc1.orig/m4/ax_python_devel.m4 2014-04-30 15:43:58.000000000 +0200 -+++ xbmc-13.0rc1/m4/ax_python_devel.m4 2014-05-02 08:03:10.000000000 +0200 -@@ -298,7 +298,7 @@ EOD` - # save current global flags - ac_save_LIBS="$LIBS" - ac_save_CPPFLAGS="$CPPFLAGS" -- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS" -+ LIBS="$ac_save_LIBS $PYTHON_LDFLAGS" - CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" - AC_LANG_PUSH([C]) - AC_LINK_IFELSE([ diff --git a/package/xbmc/patches/patch-tools_Linux_xbmc_sh_in b/package/xbmc/patches/patch-tools_Linux_xbmc_sh_in deleted file mode 100644 index f430c5af9..000000000 --- a/package/xbmc/patches/patch-tools_Linux_xbmc_sh_in +++ /dev/null @@ -1,82 +0,0 @@ ---- xbmc-24032014.orig/tools/Linux/xbmc.sh.in 2014-03-24 15:52:52.000000000 +0100 -+++ xbmc-24032014/tools/Linux/xbmc.sh.in 2014-03-27 11:42:33.985822969 +0100 -@@ -23,7 +23,7 @@ prefix="@prefix@" - exec_prefix="@exec_prefix@" - datarootdir="@datarootdir@" - LIBDIR="@libdir@" --CRASHLOG_DIR=${CRASHLOG_DIR:-$HOME} -+CRASHLOG_DIR=/tmp/xbmc - - # Check for some options used by this script - while [ "$#" -gt "0" ] -@@ -42,7 +42,7 @@ done - single_stacktrace() - { - # core filename is either "core.$PID" or "core" -- find "$1" -maxdepth $2 -name 'core*' | while read core; do -+ find "$1" -name 'core*' | while read core; do - LC_ALL=C gdb --core="$core" --batch 2> /dev/null | grep -q "^Core was generated by \`$LIBDIR/xbmc/xbmc.bin" || continue - echo "=====> Core file: "$core" ($(stat -c%y "$core"))" >> $FILE - echo " =========================================" >> $FILE -@@ -64,33 +64,14 @@ print_crash_report() - uname -m >> $FILE - echo -n " Kernel: " >> $FILE - uname -rvs >> $FILE -- echo -n " Release: " >> $FILE -- if [ -f /etc/os-release ]; then -- . /etc/os-release -- echo $NAME $VERSION >> $FILE -- elif which lsb_release > /dev/null; then -- echo >> $FILE -- lsb_release -a 2> /dev/null | sed -e 's/^/ /' >> $FILE -- else -- echo "lsb_release not available" >> $FILE -- fi - echo "############## END SYSTEM INFO ##############" >> $FILE - echo >> $FILE - echo "############### STACK TRACE #################" >> $FILE - if which gdb >/dev/null 2>&1; then -- if which systemd-coredumpctl &> /dev/null; then -- systemd-coredumpctl dump -o core xbmc.bin &> /dev/null -- fi -- single_stacktrace "$PWD" 1 -+ single_stacktrace "$PWD" - # Find in plugins directories -- if [ $XBMC_HOME ]; then -- BASEDIR=$XBMC_HOME -- else -- BASEDIR="$LIBDIR/xbmc/" -- fi -- single_stacktrace "$BASEDIR" 5 -- # find in user xbmc dir -- single_stacktrace $HOME/.xbmc/ 5 -+ BASEDIR="$LIBDIR/xbmc/" -+ single_stacktrace "$BASEDIR" - else - echo "gdb not installed, can't get stack trace." >> $FILE - fi -@@ -98,9 +79,9 @@ print_crash_report() - echo >> $FILE - echo "################# LOG FILE ##################" >> $FILE - echo >> $FILE -- if [ -f ~/.xbmc/temp/xbmc.log ] -+ if [ -f /tmp/xbmc/xbmc.log ] - then -- cat ~/.xbmc/temp/xbmc.log >> $FILE -+ cat /tmp/xbmc/xbmc.log >> $FILE - echo >> $FILE - else - echo "Logfile not found in the usual place." >> $FILE -@@ -114,12 +95,6 @@ print_crash_report() - echo "Crash report available at $FILE" - } - --python @datadir@/xbmc/FEH.py $SAVED_ARGS --RET=$? --if [ $RET -ne 0 ]; then -- exit $RET --fi -- - if which gdb >/dev/null 2>&1; then - # Output warning in case ulimit is unsupported by shell - eval ulimit -c unlimited diff --git a/package/xbmc/patches/patch-xbmc_Application_cpp b/package/xbmc/patches/patch-xbmc_Application_cpp deleted file mode 100644 index 906ba1222..000000000 --- a/package/xbmc/patches/patch-xbmc_Application_cpp +++ /dev/null @@ -1,41 +0,0 @@ ---- xbmc-13.1.orig/xbmc/Application.cpp 2014-06-08 08:40:26.000000000 +0200 -+++ xbmc-13.1/xbmc/Application.cpp 2014-06-08 09:42:40.232780377 +0200 -@@ -682,7 +682,7 @@ bool CApplication::Create() - - if (!CLog::Init(CSpecialProtocol::TranslatePath(g_advancedSettings.m_logFolder).c_str())) - { -- fprintf(stderr,"Could not init logging classes. Permission errors on ~/.xbmc (%s)\n", -+ fprintf(stderr,"Could not init logging classes. Permission errors on %s\n", - CSpecialProtocol::TranslatePath(g_advancedSettings.m_logFolder).c_str()); - return false; - } -@@ -1085,10 +1085,13 @@ bool CApplication::InitDirectoriesLinux( - userName = "root"; - - CStdString userHome; -+ userHome = "/data/xbmc"; -+/* - if (getenv("HOME")) - userHome = getenv("HOME"); - else - userHome = "/root"; -+*/ - - CStdString xbmcBinPath, xbmcPath; - CUtil::GetHomePath(xbmcBinPath, "XBMC_BIN_HOME"); -@@ -1120,11 +1123,11 @@ bool CApplication::InitDirectoriesLinux( - // map our special drives - CSpecialProtocol::SetXBMCBinPath(xbmcBinPath); - CSpecialProtocol::SetXBMCPath(xbmcPath); -- CSpecialProtocol::SetHomePath(userHome + "/.xbmc"); -- CSpecialProtocol::SetMasterProfilePath(userHome + "/.xbmc/userdata"); -+ CSpecialProtocol::SetHomePath(userHome); -+ CSpecialProtocol::SetMasterProfilePath(userHome + "/userdata"); - -- CStdString strTempPath = userHome; -- strTempPath = URIUtils::AddFileToFolder(strTempPath, ".xbmc/temp"); -+ CStdString strTempPath = "/tmp"; -+ strTempPath = URIUtils::AddFileToFolder(strTempPath, "/xbmc"); - if (getenv("XBMC_TEMP")) - strTempPath = getenv("XBMC_TEMP"); - CSpecialProtocol::SetTempPath(strTempPath); diff --git a/package/xbmc/patches/xbmc-gotham_rbp_backports.patch b/package/xbmc/patches/xbmc-gotham_rbp_backports.patch deleted file mode 100644 index 9a4772437..000000000 --- a/package/xbmc/patches/xbmc-gotham_rbp_backports.patch +++ /dev/null @@ -1,20665 +0,0 @@ -From 1353d8feca19f2f84019797942d70864054db1b0 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 5 Aug 2013 13:12:46 +0100 -Subject: [PATCH 01/94] h264_parser: Initialize the h264dsp context in the - parser as well -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Each AVStream struct for an H.264 elementary stream actually has two -copies of the H264DSPContext struct (and in fact all the other members -of H264Context as well): - -((H264Context *) ((AVStream *)st)->codec->priv_data)->h264dsp -((H264Context *) ((AVStream *)st)->parser->priv_data)->h264dsp - -but only the first of these was actually being initialised. This -prevented the addition of platform-specific implementations of -parser-related functions. - -Signed-off-by: Martin Storsjö <martin@martin.st> ---- - lib/ffmpeg/libavcodec/h264_parser.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/ffmpeg/libavcodec/h264_parser.c b/lib/ffmpeg/libavcodec/h264_parser.c -index aff9ba1..a732f79 100644 ---- a/lib/ffmpeg/libavcodec/h264_parser.c -+++ b/lib/ffmpeg/libavcodec/h264_parser.c -@@ -386,6 +386,7 @@ static int init(AVCodecParserContext *s) - H264Context *h = s->priv_data; - h->thread_context[0] = h; - h->slice_context_count = 1; -+ ff_h264dsp_init(&h->h264dsp, 8, 1); - return 0; - } - --- -1.9.3 - - -From 7ea2cb68f6fb1149fce70854e36ed6357a267238 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 5 Aug 2013 13:12:47 +0100 -Subject: [PATCH 02/94] h264dsp: Factorize code into a new function, - h264_find_start_code_candidate -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This performs the start code search which was previously part of -h264_find_frame_end() - the most CPU intensive part of the function. - -By itself, this results in a performance regression: - Before After - Mean StdDev Mean StdDev Change -Overall time 2925.6 26.2 3068.5 31.7 -4.7% - -but this can more than be made up for by platform-optimised -implementations of the function. - -Signed-off-by: Martin Storsjö <martin@martin.st> ---- - lib/ffmpeg/libavcodec/h264_parser.c | 20 +++----------------- - lib/ffmpeg/libavcodec/h264dsp.c | 29 +++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/h264dsp.h | 9 +++++++++ - 3 files changed, 41 insertions(+), 17 deletions(-) - -diff --git a/lib/ffmpeg/libavcodec/h264_parser.c b/lib/ffmpeg/libavcodec/h264_parser.c -index a732f79..972aace 100644 ---- a/lib/ffmpeg/libavcodec/h264_parser.c -+++ b/lib/ffmpeg/libavcodec/h264_parser.c -@@ -62,23 +62,9 @@ static int ff_h264_find_frame_end(H264Context *h, const uint8_t *buf, int buf_si - } - - if(state==7){ --#if HAVE_FAST_UNALIGNED -- /* we check i<buf_size instead of i+3/7 because its simpler -- * and there should be FF_INPUT_BUFFER_PADDING_SIZE bytes at the end -- */ --# if HAVE_FAST_64BIT -- while(i<next_avc && !((~*(const uint64_t*)(buf+i) & (*(const uint64_t*)(buf+i) - 0x0101010101010101ULL)) & 0x8080808080808080ULL)) -- i+=8; --# else -- while(i<next_avc && !((~*(const uint32_t*)(buf+i) & (*(const uint32_t*)(buf+i) - 0x01010101U)) & 0x80808080U)) -- i+=4; --# endif --#endif -- for(; i<next_avc; i++){ -- if(!buf[i]){ -- state=2; -- break; -- } -+ i += h->h264dsp.h264_find_start_code_candidate(buf + i, buf_size - i); -+ if (i < buf_size) -+ state = 2; - } - }else if(state<=2){ - if(buf[i]==1) state^= 5; //2->7, 1->4, 0->5 -diff --git a/lib/ffmpeg/libavcodec/h264dsp.c b/lib/ffmpeg/libavcodec/h264dsp.c -index da9e417..b7d61cd 100644 ---- a/lib/ffmpeg/libavcodec/h264dsp.c -+++ b/lib/ffmpeg/libavcodec/h264dsp.c -@@ -60,6 +60,34 @@ - #include "h264addpx_template.c" - #undef BIT_DEPTH - -+static int h264_find_start_code_candidate_c(const uint8_t *buf, int size) -+{ -+ int i = 0; -+#if HAVE_FAST_UNALIGNED -+ /* we check i < size instead of i + 3 / 7 because it is -+ * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE -+ * bytes at the end. -+ */ -+#if HAVE_FAST_64BIT -+ while (i < size && -+ !((~*(const uint64_t *)(buf + i) & -+ (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & -+ 0x8080808080808080ULL)) -+ i += 8; -+#else -+ while (i < size && -+ !((~*(const uint32_t *)(buf + i) & -+ (*(const uint32_t *)(buf + i) - 0x01010101U)) & -+ 0x80808080U)) -+ i += 4; -+#endif -+#endif -+ for (; i < size; i++) -+ if (!buf[i]) -+ break; -+ return i; -+} -+ - void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc) - { - #undef FUNC -@@ -146,6 +174,7 @@ void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_fo - H264_DSP(8); - break; - } -+ c->h264_find_start_code_candidate = h264_find_start_code_candidate_c; - - if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth, chroma_format_idc); - if (HAVE_ALTIVEC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc); -diff --git a/lib/ffmpeg/libavcodec/h264dsp.h b/lib/ffmpeg/libavcodec/h264dsp.h -index 98ea15c..1be4804 100644 ---- a/lib/ffmpeg/libavcodec/h264dsp.h -+++ b/lib/ffmpeg/libavcodec/h264dsp.h -@@ -105,6 +105,15 @@ typedef struct H264DSPContext { - /* bypass-transform */ - void (*h264_add_pixels8_clear)(uint8_t *dst, int16_t *block, int stride); - void (*h264_add_pixels4_clear)(uint8_t *dst, int16_t *block, int stride); -+ -+ /** -+ * Search buf from the start for up to size bytes. Return the index -+ * of a zero byte, or >= size if not found. Ideally, use lookahead -+ * to filter out any zero bytes that are known to not be followed by -+ * one or more further zero bytes and a one byte. Better still, filter -+ * out any bytes that form the trailing_zero_8bits syntax element too. -+ */ -+ int (*h264_find_start_code_candidate)(const uint8_t *buf, int size); - } H264DSPContext; - - void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, --- -1.9.3 - - -From 458ff4b6c1855c529f563dbbd15e35aaab50adae Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 5 Aug 2013 13:12:48 +0100 -Subject: [PATCH 03/94] arm: Add assembly version of - h264_find_start_code_candidate -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - - Before After - Mean StdDev Mean StdDev Change -This function 508.8 23.4 185.4 9.0 +174.4% -Overall 3068.5 31.7 2752.1 29.4 +11.5% - -In combination with the preceding patch: - Before After - Mean StdDev Mean StdDev Change -Overall 2925.6 26.2 2752.1 29.4 +6.3% - -Signed-off-by: Martin Storsjö <martin@martin.st> ---- - lib/ffmpeg/libavcodec/arm/Makefile | 1 + - lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S | 253 +++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c | 4 + - lib/ffmpeg/libavcodec/h264_parser.c | 1 - - 4 files changed, 258 insertions(+), 1 deletion(-) - create mode 100644 lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S - -diff --git a/lib/ffmpeg/libavcodec/arm/Makefile b/lib/ffmpeg/libavcodec/arm/Makefile -index 7390a8b..480000b71 100644 ---- a/lib/ffmpeg/libavcodec/arm/Makefile -+++ b/lib/ffmpeg/libavcodec/arm/Makefile -@@ -9,6 +9,7 @@ OBJS-$(CONFIG_AAC_DECODER) += arm/sbrdsp_init_arm.o \ - OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_init_arm.o \ - - ARMV6-OBJS-$(CONFIG_AC3DSP) += arm/ac3dsp_armv6.o -+ARMV6-OBJS-$(CONFIG_H264DSP) += arm/h264dsp_armv6.o - - OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \ - arm/flacdsp_arm.o \ -diff --git a/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S b/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S -new file mode 100644 -index 0000000..c4f12a6 ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S -@@ -0,0 +1,253 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * Author: Ben Avison <bavison@riscosopen.org> -+ * -+ * This file is part of Libav. -+ * -+ * Libav is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * Libav is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with Libav; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+RESULT .req a1 -+BUF .req a1 -+SIZE .req a2 -+PATTERN .req a3 -+PTR .req a4 -+DAT0 .req v1 -+DAT1 .req v2 -+DAT2 .req v3 -+DAT3 .req v4 -+TMP0 .req v5 -+TMP1 .req v6 -+TMP2 .req ip -+TMP3 .req lr -+ -+#define PRELOAD_DISTANCE 4 -+ -+.macro innerloop4 -+ ldr DAT0, [PTR], #4 -+ subs SIZE, SIZE, #4 @ C flag survives rest of macro -+ sub TMP0, DAT0, PATTERN, lsr #14 -+ bic TMP0, TMP0, DAT0 -+ ands TMP0, TMP0, PATTERN -+.endm -+ -+.macro innerloop16 decrement, do_preload -+ ldmia PTR!, {DAT0,DAT1,DAT2,DAT3} -+ .ifnc "\do_preload","" -+ pld [PTR, #PRELOAD_DISTANCE*32] -+ .endif -+ .ifnc "\decrement","" -+ subs SIZE, SIZE, #\decrement @ C flag survives rest of macro -+ .endif -+ sub TMP0, DAT0, PATTERN, lsr #14 -+ sub TMP1, DAT1, PATTERN, lsr #14 -+ bic TMP0, TMP0, DAT0 -+ bic TMP1, TMP1, DAT1 -+ sub TMP2, DAT2, PATTERN, lsr #14 -+ sub TMP3, DAT3, PATTERN, lsr #14 -+ ands TMP0, TMP0, PATTERN -+ bic TMP2, TMP2, DAT2 -+ it eq -+ andseq TMP1, TMP1, PATTERN -+ bic TMP3, TMP3, DAT3 -+ itt eq -+ andseq TMP2, TMP2, PATTERN -+ andseq TMP3, TMP3, PATTERN -+.endm -+ -+/* int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size) */ -+function ff_h264_find_start_code_candidate_armv6, export=1 -+ push {v1-v6,lr} -+ mov PTR, BUF -+ @ Ensure there are at least (PRELOAD_DISTANCE+2) complete cachelines to go -+ @ before using code that does preloads -+ cmp SIZE, #(PRELOAD_DISTANCE+3)*32 - 1 -+ blo 60f -+ -+ @ Get to word-alignment, 1 byte at a time -+ tst PTR, #3 -+ beq 2f -+1: ldrb DAT0, [PTR], #1 -+ sub SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ tst PTR, #3 -+ bne 1b -+2: @ Get to 4-word alignment, 1 word at a time -+ ldr PATTERN, =0x80008000 -+ setend be -+ tst PTR, #12 -+ beq 4f -+3: innerloop4 -+ bne 91f -+ tst PTR, #12 -+ bne 3b -+4: @ Get to cacheline (8-word) alignment -+ tst PTR, #16 -+ beq 5f -+ innerloop16 16 -+ bne 93f -+5: @ Check complete cachelines, with preloading -+ @ We need to stop when there are still (PRELOAD_DISTANCE+1) -+ @ complete cachelines to go -+ sub SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 -+6: innerloop16 , do_preload -+ bne 93f -+ innerloop16 32 -+ bne 93f -+ bcs 6b -+ @ Preload trailing part-cacheline, if any -+ tst SIZE, #31 -+ beq 7f -+ pld [PTR, #(PRELOAD_DISTANCE+1)*32] -+ @ Check remaining data without doing any more preloads. First -+ @ do in chunks of 4 words: -+7: adds SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 - 16 -+ bmi 9f -+8: innerloop16 16 -+ bne 93f -+ bcs 8b -+ @ Then in words: -+9: adds SIZE, SIZE, #16 - 4 -+ bmi 11f -+10: innerloop4 -+ bne 91f -+ bcs 10b -+11: setend le -+ @ Check second byte of final halfword -+ ldrb DAT0, [PTR, #-1] -+ teq DAT0, #0 -+ beq 90f -+ @ Check any remaining bytes -+ tst SIZE, #3 -+ beq 13f -+12: ldrb DAT0, [PTR], #1 -+ sub SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ tst SIZE, #3 -+ bne 12b -+ @ No candidate found -+13: sub RESULT, PTR, BUF -+ b 99f -+ -+60: @ Small buffer - simply check by looping over bytes -+ subs SIZE, SIZE, #1 -+ bcc 99f -+61: ldrb DAT0, [PTR], #1 -+ subs SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ bcs 61b -+ @ No candidate found -+ sub RESULT, PTR, BUF -+ b 99f -+ -+90: @ Found a candidate at the preceding byte -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #1 -+ b 99f -+ -+91: @ Found a candidate somewhere in the preceding 4 bytes -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #4 -+ sub TMP0, DAT0, #0x20000 -+ bics TMP0, TMP0, DAT0 -+ itt pl -+ ldrbpl DAT0, [PTR, #-3] -+ addpl RESULT, RESULT, #2 -+ bpl 92f -+ teq RESULT, #0 -+ beq 98f @ don't look back a byte if found at first byte in buffer -+ ldrb DAT0, [PTR, #-5] -+92: teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+ -+93: @ Found a candidate somewhere in the preceding 16 bytes -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #16 -+ teq TMP0, #0 -+ beq 95f @ not in first 4 bytes -+ sub TMP0, DAT0, #0x20000 -+ bics TMP0, TMP0, DAT0 -+ itt pl -+ ldrbpl DAT0, [PTR, #-15] -+ addpl RESULT, RESULT, #2 -+ bpl 94f -+ teq RESULT, #0 -+ beq 98f @ don't look back a byte if found at first byte in buffer -+ ldrb DAT0, [PTR, #-17] -+94: teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+95: add RESULT, RESULT, #4 -+ teq TMP1, #0 -+ beq 96f @ not in next 4 bytes -+ sub TMP1, DAT1, #0x20000 -+ bics TMP1, TMP1, DAT1 -+ itee mi -+ ldrbmi DAT0, [PTR, #-13] -+ ldrbpl DAT0, [PTR, #-11] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+96: add RESULT, RESULT, #4 -+ teq TMP2, #0 -+ beq 97f @ not in next 4 bytes -+ sub TMP2, DAT2, #0x20000 -+ bics TMP2, TMP2, DAT2 -+ itee mi -+ ldrbmi DAT0, [PTR, #-9] -+ ldrbpl DAT0, [PTR, #-7] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+97: add RESULT, RESULT, #4 -+ sub TMP3, DAT3, #0x20000 -+ bics TMP3, TMP3, DAT3 -+ itee mi -+ ldrbmi DAT0, [PTR, #-5] -+ ldrbpl DAT0, [PTR, #-3] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ @ drop through to 98f -+98: setend le -+99: pop {v1-v6,pc} -+.endfunc -+ -+ .unreq RESULT -+ .unreq BUF -+ .unreq SIZE -+ .unreq PATTERN -+ .unreq PTR -+ .unreq DAT0 -+ .unreq DAT1 -+ .unreq DAT2 -+ .unreq DAT3 -+ .unreq TMP0 -+ .unreq TMP1 -+ .unreq TMP2 -+ .unreq TMP3 -diff --git a/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -index 785b604..2804e56 100644 ---- a/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -+++ b/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -@@ -24,6 +24,8 @@ - #include "libavutil/arm/cpu.h" - #include "libavcodec/h264dsp.h" - -+int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size); -+ - void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha, - int beta, int8_t *tc0); - void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha, -@@ -106,6 +108,8 @@ av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, - { - int cpu_flags = av_get_cpu_flags(); - -+ if (have_armv6(cpu_flags)) -+ c->h264_find_start_code_candidate = ff_h264_find_start_code_candidate_armv6; - if (have_neon(cpu_flags)) - ff_h264dsp_init_neon(c, bit_depth, chroma_format_idc); - } -diff --git a/lib/ffmpeg/libavcodec/h264_parser.c b/lib/ffmpeg/libavcodec/h264_parser.c -index 972aace..363843c 100644 ---- a/lib/ffmpeg/libavcodec/h264_parser.c -+++ b/lib/ffmpeg/libavcodec/h264_parser.c -@@ -65,7 +65,6 @@ static int ff_h264_find_frame_end(H264Context *h, const uint8_t *buf, int buf_si - i += h->h264dsp.h264_find_start_code_candidate(buf + i, buf_size - i); - if (i < buf_size) - state = 2; -- } - }else if(state<=2){ - if(buf[i]==1) state^= 5; //2->7, 1->4, 0->5 - else if(buf[i]) state = 7; --- -1.9.3 - - -From 5841d5b69f0df2f286c0a8e419deb16d927e864e Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 19 Aug 2013 22:48:05 +0100 -Subject: [PATCH 04/94] [ffmpeg] Backport of h264_find_start_code_candidate - optimisation - ---- - ...-Initialize-the-h264dsp-context-in-the-pa.patch | 39 +++ - ...torize-code-into-a-new-function-h264_find.patch | 134 +++++++++ - ...embly-version-of-h264_find_start_code_can.patch | 322 +++++++++++++++++++++ - 3 files changed, 495 insertions(+) - create mode 100644 lib/ffmpeg/patches/0056-h264_parser-Initialize-the-h264dsp-context-in-the-pa.patch - create mode 100644 lib/ffmpeg/patches/0057-h264dsp-Factorize-code-into-a-new-function-h264_find.patch - create mode 100644 lib/ffmpeg/patches/0058-arm-Add-assembly-version-of-h264_find_start_code_can.patch - -diff --git a/lib/ffmpeg/patches/0056-h264_parser-Initialize-the-h264dsp-context-in-the-pa.patch b/lib/ffmpeg/patches/0056-h264_parser-Initialize-the-h264dsp-context-in-the-pa.patch -new file mode 100644 -index 0000000..263578d ---- /dev/null -+++ b/lib/ffmpeg/patches/0056-h264_parser-Initialize-the-h264dsp-context-in-the-pa.patch -@@ -0,0 +1,39 @@ -+From 7a82022ee2f9b1fad991ace0936901e7419444be Mon Sep 17 00:00:00 2001 -+From: Ben Avison <bavison@riscosopen.org> -+Date: Mon, 5 Aug 2013 13:12:46 +0100 -+Subject: [PATCH 1/3] h264_parser: Initialize the h264dsp context in the -+ parser as well -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+Each AVStream struct for an H.264 elementary stream actually has two -+copies of the H264DSPContext struct (and in fact all the other members -+of H264Context as well): -+ -+((H264Context *) ((AVStream *)st)->codec->priv_data)->h264dsp -+((H264Context *) ((AVStream *)st)->parser->priv_data)->h264dsp -+ -+but only the first of these was actually being initialised. This -+prevented the addition of platform-specific implementations of -+parser-related functions. -+ -+Signed-off-by: Martin Storsjö <martin@martin.st> -+--- -+ libavcodec/h264_parser.c | 1 + -+ 1 file changed, 1 insertion(+) -+ -+diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c -+index 2ed155c..da2a5f9 100644 -+--- a/libavcodec/h264_parser.c -++++ b/libavcodec/h264_parser.c -+@@ -417,6 +417,7 @@ static av_cold int init(AVCodecParserContext *s) -+ H264Context *h = s->priv_data; -+ h->thread_context[0] = h; -+ h->slice_context_count = 1; -++ ff_h264dsp_init(&h->h264dsp, 8, 1); -+ return 0; -+ } -+ -+-- -+1.7.9.5 -diff --git a/lib/ffmpeg/patches/0057-h264dsp-Factorize-code-into-a-new-function-h264_find.patch b/lib/ffmpeg/patches/0057-h264dsp-Factorize-code-into-a-new-function-h264_find.patch -new file mode 100644 -index 0000000..0151d85 ---- /dev/null -+++ b/lib/ffmpeg/patches/0057-h264dsp-Factorize-code-into-a-new-function-h264_find.patch -@@ -0,0 +1,134 @@ -+From 218d6844b37d339ffbf2044ad07d8be7767e2734 Mon Sep 17 00:00:00 2001 -+From: Ben Avison <bavison@riscosopen.org> -+Date: Mon, 5 Aug 2013 13:12:47 +0100 -+Subject: [PATCH 2/3] h264dsp: Factorize code into a new function, -+ h264_find_start_code_candidate -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+This performs the start code search which was previously part of -+h264_find_frame_end() - the most CPU intensive part of the function. -+ -+By itself, this results in a performance regression: -+ Before After -+ Mean StdDev Mean StdDev Change -+Overall time 2925.6 26.2 3068.5 31.7 -4.7% -+ -+but this can more than be made up for by platform-optimised -+implementations of the function. -+ -+Signed-off-by: Martin Storsjö <martin@martin.st> -+--- -+ libavcodec/h264_parser.c | 27 +++------------------------ -+ libavcodec/h264dsp.c | 29 +++++++++++++++++++++++++++++ -+ libavcodec/h264dsp.h | 9 +++++++++ -+ 3 files changed, 41 insertions(+), 24 deletions(-) -+ -+diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c -+index da2a5f9..ef5da98 100644 -+--- a/libavcodec/h264_parser.c -++++ b/libavcodec/h264_parser.c -+@@ -47,30 +47,9 @@ static int h264_find_frame_end(H264Context *h, const uint8_t *buf, -+ -+ for (i = 0; i < buf_size; i++) { -+ if (state == 7) { -+-#if HAVE_FAST_UNALIGNED -+- /* we check i < buf_size instead of i + 3 / 7 because it is -+- * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE -+- * bytes at the end. -+- */ -+-#if HAVE_FAST_64BIT -+- while (i < buf_size && -+- !((~*(const uint64_t *)(buf + i) & -+- (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & -+- 0x8080808080808080ULL)) -+- i += 8; -+-#else -+- while (i < buf_size && -+- !((~*(const uint32_t *)(buf + i) & -+- (*(const uint32_t *)(buf + i) - 0x01010101U)) & -+- 0x80808080U)) -+- i += 4; -+-#endif -+-#endif -+- for (; i < buf_size; i++) -+- if (!buf[i]) { -+- state = 2; -+- break; -+- } -++ i += h->h264dsp.h264_find_start_code_candidate(buf + i, buf_size - i); -++ if (i < buf_size) -++ state = 2; -+ } else if (state <= 2) { -+ if (buf[i] == 1) -+ state ^= 5; // 2->7, 1->4, 0->5 -+diff --git a/libavcodec/h264dsp.c b/libavcodec/h264dsp.c -+index 3ca6abe..a901dbb 100644 -+--- a/libavcodec/h264dsp.c -++++ b/libavcodec/h264dsp.c -+@@ -53,6 +53,34 @@ -+ #include "h264addpx_template.c" -+ #undef BIT_DEPTH -+ -++static int h264_find_start_code_candidate_c(const uint8_t *buf, int size) -++{ -++ int i = 0; -++#if HAVE_FAST_UNALIGNED -++ /* we check i < size instead of i + 3 / 7 because it is -++ * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE -++ * bytes at the end. -++ */ -++#if HAVE_FAST_64BIT -++ while (i < size && -++ !((~*(const uint64_t *)(buf + i) & -++ (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & -++ 0x8080808080808080ULL)) -++ i += 8; -++#else -++ while (i < size && -++ !((~*(const uint32_t *)(buf + i) & -++ (*(const uint32_t *)(buf + i) - 0x01010101U)) & -++ 0x80808080U)) -++ i += 4; -++#endif -++#endif -++ for (; i < size; i++) -++ if (!buf[i]) -++ break; -++ return i; -++} -++ -+ av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, -+ const int chroma_format_idc) -+ { -+@@ -133,6 +161,7 @@ av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, -+ H264_DSP(8); -+ break; -+ } -++ c->h264_find_start_code_candidate = h264_find_start_code_candidate_c; -+ -+ if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth, chroma_format_idc); -+ if (ARCH_PPC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc); -+diff --git a/libavcodec/h264dsp.h b/libavcodec/h264dsp.h -+index 1f9f8fe..6249ba7 100644 -+--- a/libavcodec/h264dsp.h -++++ b/libavcodec/h264dsp.h -+@@ -105,6 +105,15 @@ typedef struct H264DSPContext { -+ /* bypass-transform */ -+ void (*h264_add_pixels8_clear)(uint8_t *dst, int16_t *block, int stride); -+ void (*h264_add_pixels4_clear)(uint8_t *dst, int16_t *block, int stride); -++ -++ /** -++ * Search buf from the start for up to size bytes. Return the index -++ * of a zero byte, or >= size if not found. Ideally, use lookahead -++ * to filter out any zero bytes that are known to not be followed by -++ * one or more further zero bytes and a one byte. Better still, filter -++ * out any bytes that form the trailing_zero_8bits syntax element too. -++ */ -++ int (*h264_find_start_code_candidate)(const uint8_t *buf, int size); -+ } H264DSPContext; -+ -+ void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, -+-- -+1.7.9.5 -diff --git a/lib/ffmpeg/patches/0058-arm-Add-assembly-version-of-h264_find_start_code_can.patch b/lib/ffmpeg/patches/0058-arm-Add-assembly-version-of-h264_find_start_code_can.patch -new file mode 100644 -index 0000000..cdc2d1e ---- /dev/null -+++ b/lib/ffmpeg/patches/0058-arm-Add-assembly-version-of-h264_find_start_code_can.patch -@@ -0,0 +1,322 @@ -+From 45e10e5c8d3df09c80a4d80483bff2712367f3fa Mon Sep 17 00:00:00 2001 -+From: Ben Avison <bavison@riscosopen.org> -+Date: Mon, 5 Aug 2013 13:12:48 +0100 -+Subject: [PATCH 3/3] arm: Add assembly version of -+ h264_find_start_code_candidate -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+ Before After -+ Mean StdDev Mean StdDev Change -+This function 508.8 23.4 185.4 9.0 +174.4% -+Overall 3068.5 31.7 2752.1 29.4 +11.5% -+ -+In combination with the preceding patch: -+ Before After -+ Mean StdDev Mean StdDev Change -+Overall 2925.6 26.2 2752.1 29.4 +6.3% -+ -+Signed-off-by: Martin Storsjö <martin@martin.st> -+--- -+ libavcodec/arm/Makefile | 1 + -+ libavcodec/arm/h264dsp_armv6.S | 253 +++++++++++++++++++++++++++++++++++++ -+ libavcodec/arm/h264dsp_init_arm.c | 4 + -+ 3 files changed, 258 insertions(+) -+ create mode 100644 libavcodec/arm/h264dsp_armv6.S -+ -+diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile -+index e941aaa..9c64b36 100644 -+--- a/libavcodec/arm/Makefile -++++ b/libavcodec/arm/Makefile -+@@ -45,6 +45,7 @@ ARMV6-OBJS-$(CONFIG_DSPUTIL) += arm/dsputil_init_armv6.o \ -+ arm/simple_idct_armv6.o \ -+ -+ ARMV6-OBJS-$(CONFIG_AC3DSP) += arm/ac3dsp_armv6.o -++ARMV6-OBJS-$(CONFIG_H264DSP) += arm/h264dsp_armv6.o -+ ARMV6-OBJS-$(CONFIG_HPELDSP) += arm/hpeldsp_init_armv6.o \ -+ arm/hpeldsp_armv6.o -+ ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_fixed_armv6.o -+diff --git a/libavcodec/arm/h264dsp_armv6.S b/libavcodec/arm/h264dsp_armv6.S -+new file mode 100644 -+index 0000000..c4f12a6 -+--- /dev/null -++++ b/libavcodec/arm/h264dsp_armv6.S -+@@ -0,0 +1,253 @@ -++/* -++ * Copyright (c) 2013 RISC OS Open Ltd -++ * Author: Ben Avison <bavison@riscosopen.org> -++ * -++ * This file is part of Libav. -++ * -++ * Libav is free software; you can redistribute it and/or -++ * modify it under the terms of the GNU Lesser General Public -++ * License as published by the Free Software Foundation; either -++ * version 2.1 of the License, or (at your option) any later version. -++ * -++ * Libav is distributed in the hope that it will be useful, -++ * but WITHOUT ANY WARRANTY; without even the implied warranty of -++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -++ * Lesser General Public License for more details. -++ * -++ * You should have received a copy of the GNU Lesser General Public -++ * License along with Libav; if not, write to the Free Software -++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -++ */ -++ -++#include "libavutil/arm/asm.S" -++ -++RESULT .req a1 -++BUF .req a1 -++SIZE .req a2 -++PATTERN .req a3 -++PTR .req a4 -++DAT0 .req v1 -++DAT1 .req v2 -++DAT2 .req v3 -++DAT3 .req v4 -++TMP0 .req v5 -++TMP1 .req v6 -++TMP2 .req ip -++TMP3 .req lr -++ -++#define PRELOAD_DISTANCE 4 -++ -++.macro innerloop4 -++ ldr DAT0, [PTR], #4 -++ subs SIZE, SIZE, #4 @ C flag survives rest of macro -++ sub TMP0, DAT0, PATTERN, lsr #14 -++ bic TMP0, TMP0, DAT0 -++ ands TMP0, TMP0, PATTERN -++.endm -++ -++.macro innerloop16 decrement, do_preload -++ ldmia PTR!, {DAT0,DAT1,DAT2,DAT3} -++ .ifnc "\do_preload","" -++ pld [PTR, #PRELOAD_DISTANCE*32] -++ .endif -++ .ifnc "\decrement","" -++ subs SIZE, SIZE, #\decrement @ C flag survives rest of macro -++ .endif -++ sub TMP0, DAT0, PATTERN, lsr #14 -++ sub TMP1, DAT1, PATTERN, lsr #14 -++ bic TMP0, TMP0, DAT0 -++ bic TMP1, TMP1, DAT1 -++ sub TMP2, DAT2, PATTERN, lsr #14 -++ sub TMP3, DAT3, PATTERN, lsr #14 -++ ands TMP0, TMP0, PATTERN -++ bic TMP2, TMP2, DAT2 -++ it eq -++ andseq TMP1, TMP1, PATTERN -++ bic TMP3, TMP3, DAT3 -++ itt eq -++ andseq TMP2, TMP2, PATTERN -++ andseq TMP3, TMP3, PATTERN -++.endm -++ -++/* int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size) */ -++function ff_h264_find_start_code_candidate_armv6, export=1 -++ push {v1-v6,lr} -++ mov PTR, BUF -++ @ Ensure there are at least (PRELOAD_DISTANCE+2) complete cachelines to go -++ @ before using code that does preloads -++ cmp SIZE, #(PRELOAD_DISTANCE+3)*32 - 1 -++ blo 60f -++ -++ @ Get to word-alignment, 1 byte at a time -++ tst PTR, #3 -++ beq 2f -++1: ldrb DAT0, [PTR], #1 -++ sub SIZE, SIZE, #1 -++ teq DAT0, #0 -++ beq 90f -++ tst PTR, #3 -++ bne 1b -++2: @ Get to 4-word alignment, 1 word at a time -++ ldr PATTERN, =0x80008000 -++ setend be -++ tst PTR, #12 -++ beq 4f -++3: innerloop4 -++ bne 91f -++ tst PTR, #12 -++ bne 3b -++4: @ Get to cacheline (8-word) alignment -++ tst PTR, #16 -++ beq 5f -++ innerloop16 16 -++ bne 93f -++5: @ Check complete cachelines, with preloading -++ @ We need to stop when there are still (PRELOAD_DISTANCE+1) -++ @ complete cachelines to go -++ sub SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 -++6: innerloop16 , do_preload -++ bne 93f -++ innerloop16 32 -++ bne 93f -++ bcs 6b -++ @ Preload trailing part-cacheline, if any -++ tst SIZE, #31 -++ beq 7f -++ pld [PTR, #(PRELOAD_DISTANCE+1)*32] -++ @ Check remaining data without doing any more preloads. First -++ @ do in chunks of 4 words: -++7: adds SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 - 16 -++ bmi 9f -++8: innerloop16 16 -++ bne 93f -++ bcs 8b -++ @ Then in words: -++9: adds SIZE, SIZE, #16 - 4 -++ bmi 11f -++10: innerloop4 -++ bne 91f -++ bcs 10b -++11: setend le -++ @ Check second byte of final halfword -++ ldrb DAT0, [PTR, #-1] -++ teq DAT0, #0 -++ beq 90f -++ @ Check any remaining bytes -++ tst SIZE, #3 -++ beq 13f -++12: ldrb DAT0, [PTR], #1 -++ sub SIZE, SIZE, #1 -++ teq DAT0, #0 -++ beq 90f -++ tst SIZE, #3 -++ bne 12b -++ @ No candidate found -++13: sub RESULT, PTR, BUF -++ b 99f -++ -++60: @ Small buffer - simply check by looping over bytes -++ subs SIZE, SIZE, #1 -++ bcc 99f -++61: ldrb DAT0, [PTR], #1 -++ subs SIZE, SIZE, #1 -++ teq DAT0, #0 -++ beq 90f -++ bcs 61b -++ @ No candidate found -++ sub RESULT, PTR, BUF -++ b 99f -++ -++90: @ Found a candidate at the preceding byte -++ sub RESULT, PTR, BUF -++ sub RESULT, RESULT, #1 -++ b 99f -++ -++91: @ Found a candidate somewhere in the preceding 4 bytes -++ sub RESULT, PTR, BUF -++ sub RESULT, RESULT, #4 -++ sub TMP0, DAT0, #0x20000 -++ bics TMP0, TMP0, DAT0 -++ itt pl -++ ldrbpl DAT0, [PTR, #-3] -++ addpl RESULT, RESULT, #2 -++ bpl 92f -++ teq RESULT, #0 -++ beq 98f @ don't look back a byte if found at first byte in buffer -++ ldrb DAT0, [PTR, #-5] -++92: teq DAT0, #0 -++ it eq -++ subeq RESULT, RESULT, #1 -++ b 98f -++ -++93: @ Found a candidate somewhere in the preceding 16 bytes -++ sub RESULT, PTR, BUF -++ sub RESULT, RESULT, #16 -++ teq TMP0, #0 -++ beq 95f @ not in first 4 bytes -++ sub TMP0, DAT0, #0x20000 -++ bics TMP0, TMP0, DAT0 -++ itt pl -++ ldrbpl DAT0, [PTR, #-15] -++ addpl RESULT, RESULT, #2 -++ bpl 94f -++ teq RESULT, #0 -++ beq 98f @ don't look back a byte if found at first byte in buffer -++ ldrb DAT0, [PTR, #-17] -++94: teq DAT0, #0 -++ it eq -++ subeq RESULT, RESULT, #1 -++ b 98f -++95: add RESULT, RESULT, #4 -++ teq TMP1, #0 -++ beq 96f @ not in next 4 bytes -++ sub TMP1, DAT1, #0x20000 -++ bics TMP1, TMP1, DAT1 -++ itee mi -++ ldrbmi DAT0, [PTR, #-13] -++ ldrbpl DAT0, [PTR, #-11] -++ addpl RESULT, RESULT, #2 -++ teq DAT0, #0 -++ it eq -++ subeq RESULT, RESULT, #1 -++ b 98f -++96: add RESULT, RESULT, #4 -++ teq TMP2, #0 -++ beq 97f @ not in next 4 bytes -++ sub TMP2, DAT2, #0x20000 -++ bics TMP2, TMP2, DAT2 -++ itee mi -++ ldrbmi DAT0, [PTR, #-9] -++ ldrbpl DAT0, [PTR, #-7] -++ addpl RESULT, RESULT, #2 -++ teq DAT0, #0 -++ it eq -++ subeq RESULT, RESULT, #1 -++ b 98f -++97: add RESULT, RESULT, #4 -++ sub TMP3, DAT3, #0x20000 -++ bics TMP3, TMP3, DAT3 -++ itee mi -++ ldrbmi DAT0, [PTR, #-5] -++ ldrbpl DAT0, [PTR, #-3] -++ addpl RESULT, RESULT, #2 -++ teq DAT0, #0 -++ it eq -++ subeq RESULT, RESULT, #1 -++ @ drop through to 98f -++98: setend le -++99: pop {v1-v6,pc} -++.endfunc -++ -++ .unreq RESULT -++ .unreq BUF -++ .unreq SIZE -++ .unreq PATTERN -++ .unreq PTR -++ .unreq DAT0 -++ .unreq DAT1 -++ .unreq DAT2 -++ .unreq DAT3 -++ .unreq TMP0 -++ .unreq TMP1 -++ .unreq TMP2 -++ .unreq TMP3 -+diff --git a/libavcodec/arm/h264dsp_init_arm.c b/libavcodec/arm/h264dsp_init_arm.c -+index bb8b3b9..b206a1b 100644 -+--- a/libavcodec/arm/h264dsp_init_arm.c -++++ b/libavcodec/arm/h264dsp_init_arm.c -+@@ -24,6 +24,8 @@ -+ #include "libavutil/arm/cpu.h" -+ #include "libavcodec/h264dsp.h" -+ -++int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size); -++ -+ void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha, -+ int beta, int8_t *tc0); -+ void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha, -+@@ -102,6 +104,8 @@ av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, -+ { -+ int cpu_flags = av_get_cpu_flags(); -+ -++ if (have_armv6(cpu_flags)) -++ c->h264_find_start_code_candidate = ff_h264_find_start_code_candidate_armv6; -+ if (have_neon(cpu_flags)) -+ h264dsp_init_neon(c, bit_depth, chroma_format_idc); -+ } -+-- -+1.7.9.5 --- -1.9.3 - - -From db098a580259625bb7b7385a48cb0756aea5cafe Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 16 Apr 2014 01:51:31 +0100 -Subject: [PATCH 05/94] h264: Move search code search functions into separate - source files. - -This permits re-use with parsers for codecs which use similar start codes. - -Signed-off-by: Michael Niedermayer <michaelni@gmx.at> ---- - lib/ffmpeg/libavcodec/Makefile | 2 +- - lib/ffmpeg/libavcodec/arm/Makefile | 2 +- - lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S | 253 --------------------------- - lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c | 4 +- - lib/ffmpeg/libavcodec/arm/startcode_armv6.S | 253 +++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/h264dsp.c | 31 +--- - lib/ffmpeg/libavcodec/startcode.c | 57 ++++++ - lib/ffmpeg/libavcodec/startcode.h | 35 ++++ - 8 files changed, 351 insertions(+), 286 deletions(-) - delete mode 100644 lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S - create mode 100644 lib/ffmpeg/libavcodec/arm/startcode_armv6.S - create mode 100644 lib/ffmpeg/libavcodec/startcode.c - create mode 100644 lib/ffmpeg/libavcodec/startcode.h - -diff --git a/lib/ffmpeg/libavcodec/Makefile b/lib/ffmpeg/libavcodec/Makefile -index dc065a5..460f42c 100644 ---- a/lib/ffmpeg/libavcodec/Makefile -+++ b/lib/ffmpeg/libavcodec/Makefile -@@ -49,7 +49,7 @@ OBJS-$(CONFIG_FFT) += avfft.o fft_fixed.o fft_float.o \ - $(FFT-OBJS-yes) - OBJS-$(CONFIG_GOLOMB) += golomb.o - OBJS-$(CONFIG_H264CHROMA) += h264chroma.o --OBJS-$(CONFIG_H264DSP) += h264dsp.o h264idct.o -+OBJS-$(CONFIG_H264DSP) += h264dsp.o h264idct.o startcode.o - OBJS-$(CONFIG_H264PRED) += h264pred.o - OBJS-$(CONFIG_H264QPEL) += h264qpel.o - OBJS-$(CONFIG_HUFFMAN) += huffman.o -diff --git a/lib/ffmpeg/libavcodec/arm/Makefile b/lib/ffmpeg/libavcodec/arm/Makefile -index 480000b71..0b432e3 100644 ---- a/lib/ffmpeg/libavcodec/arm/Makefile -+++ b/lib/ffmpeg/libavcodec/arm/Makefile -@@ -9,7 +9,7 @@ OBJS-$(CONFIG_AAC_DECODER) += arm/sbrdsp_init_arm.o \ - OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_init_arm.o \ - - ARMV6-OBJS-$(CONFIG_AC3DSP) += arm/ac3dsp_armv6.o --ARMV6-OBJS-$(CONFIG_H264DSP) += arm/h264dsp_armv6.o -+ARMV6-OBJS-$(CONFIG_H264DSP) += arm/startcode_armv6.o - - OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \ - arm/flacdsp_arm.o \ -diff --git a/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S b/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S -deleted file mode 100644 -index c4f12a6..0000000 ---- a/lib/ffmpeg/libavcodec/arm/h264dsp_armv6.S -+++ /dev/null -@@ -1,253 +0,0 @@ --/* -- * Copyright (c) 2013 RISC OS Open Ltd -- * Author: Ben Avison <bavison@riscosopen.org> -- * -- * This file is part of Libav. -- * -- * Libav is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2.1 of the License, or (at your option) any later version. -- * -- * Libav is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with Libav; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- */ -- --#include "libavutil/arm/asm.S" -- --RESULT .req a1 --BUF .req a1 --SIZE .req a2 --PATTERN .req a3 --PTR .req a4 --DAT0 .req v1 --DAT1 .req v2 --DAT2 .req v3 --DAT3 .req v4 --TMP0 .req v5 --TMP1 .req v6 --TMP2 .req ip --TMP3 .req lr -- --#define PRELOAD_DISTANCE 4 -- --.macro innerloop4 -- ldr DAT0, [PTR], #4 -- subs SIZE, SIZE, #4 @ C flag survives rest of macro -- sub TMP0, DAT0, PATTERN, lsr #14 -- bic TMP0, TMP0, DAT0 -- ands TMP0, TMP0, PATTERN --.endm -- --.macro innerloop16 decrement, do_preload -- ldmia PTR!, {DAT0,DAT1,DAT2,DAT3} -- .ifnc "\do_preload","" -- pld [PTR, #PRELOAD_DISTANCE*32] -- .endif -- .ifnc "\decrement","" -- subs SIZE, SIZE, #\decrement @ C flag survives rest of macro -- .endif -- sub TMP0, DAT0, PATTERN, lsr #14 -- sub TMP1, DAT1, PATTERN, lsr #14 -- bic TMP0, TMP0, DAT0 -- bic TMP1, TMP1, DAT1 -- sub TMP2, DAT2, PATTERN, lsr #14 -- sub TMP3, DAT3, PATTERN, lsr #14 -- ands TMP0, TMP0, PATTERN -- bic TMP2, TMP2, DAT2 -- it eq -- andseq TMP1, TMP1, PATTERN -- bic TMP3, TMP3, DAT3 -- itt eq -- andseq TMP2, TMP2, PATTERN -- andseq TMP3, TMP3, PATTERN --.endm -- --/* int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size) */ --function ff_h264_find_start_code_candidate_armv6, export=1 -- push {v1-v6,lr} -- mov PTR, BUF -- @ Ensure there are at least (PRELOAD_DISTANCE+2) complete cachelines to go -- @ before using code that does preloads -- cmp SIZE, #(PRELOAD_DISTANCE+3)*32 - 1 -- blo 60f -- -- @ Get to word-alignment, 1 byte at a time -- tst PTR, #3 -- beq 2f --1: ldrb DAT0, [PTR], #1 -- sub SIZE, SIZE, #1 -- teq DAT0, #0 -- beq 90f -- tst PTR, #3 -- bne 1b --2: @ Get to 4-word alignment, 1 word at a time -- ldr PATTERN, =0x80008000 -- setend be -- tst PTR, #12 -- beq 4f --3: innerloop4 -- bne 91f -- tst PTR, #12 -- bne 3b --4: @ Get to cacheline (8-word) alignment -- tst PTR, #16 -- beq 5f -- innerloop16 16 -- bne 93f --5: @ Check complete cachelines, with preloading -- @ We need to stop when there are still (PRELOAD_DISTANCE+1) -- @ complete cachelines to go -- sub SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 --6: innerloop16 , do_preload -- bne 93f -- innerloop16 32 -- bne 93f -- bcs 6b -- @ Preload trailing part-cacheline, if any -- tst SIZE, #31 -- beq 7f -- pld [PTR, #(PRELOAD_DISTANCE+1)*32] -- @ Check remaining data without doing any more preloads. First -- @ do in chunks of 4 words: --7: adds SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 - 16 -- bmi 9f --8: innerloop16 16 -- bne 93f -- bcs 8b -- @ Then in words: --9: adds SIZE, SIZE, #16 - 4 -- bmi 11f --10: innerloop4 -- bne 91f -- bcs 10b --11: setend le -- @ Check second byte of final halfword -- ldrb DAT0, [PTR, #-1] -- teq DAT0, #0 -- beq 90f -- @ Check any remaining bytes -- tst SIZE, #3 -- beq 13f --12: ldrb DAT0, [PTR], #1 -- sub SIZE, SIZE, #1 -- teq DAT0, #0 -- beq 90f -- tst SIZE, #3 -- bne 12b -- @ No candidate found --13: sub RESULT, PTR, BUF -- b 99f -- --60: @ Small buffer - simply check by looping over bytes -- subs SIZE, SIZE, #1 -- bcc 99f --61: ldrb DAT0, [PTR], #1 -- subs SIZE, SIZE, #1 -- teq DAT0, #0 -- beq 90f -- bcs 61b -- @ No candidate found -- sub RESULT, PTR, BUF -- b 99f -- --90: @ Found a candidate at the preceding byte -- sub RESULT, PTR, BUF -- sub RESULT, RESULT, #1 -- b 99f -- --91: @ Found a candidate somewhere in the preceding 4 bytes -- sub RESULT, PTR, BUF -- sub RESULT, RESULT, #4 -- sub TMP0, DAT0, #0x20000 -- bics TMP0, TMP0, DAT0 -- itt pl -- ldrbpl DAT0, [PTR, #-3] -- addpl RESULT, RESULT, #2 -- bpl 92f -- teq RESULT, #0 -- beq 98f @ don't look back a byte if found at first byte in buffer -- ldrb DAT0, [PTR, #-5] --92: teq DAT0, #0 -- it eq -- subeq RESULT, RESULT, #1 -- b 98f -- --93: @ Found a candidate somewhere in the preceding 16 bytes -- sub RESULT, PTR, BUF -- sub RESULT, RESULT, #16 -- teq TMP0, #0 -- beq 95f @ not in first 4 bytes -- sub TMP0, DAT0, #0x20000 -- bics TMP0, TMP0, DAT0 -- itt pl -- ldrbpl DAT0, [PTR, #-15] -- addpl RESULT, RESULT, #2 -- bpl 94f -- teq RESULT, #0 -- beq 98f @ don't look back a byte if found at first byte in buffer -- ldrb DAT0, [PTR, #-17] --94: teq DAT0, #0 -- it eq -- subeq RESULT, RESULT, #1 -- b 98f --95: add RESULT, RESULT, #4 -- teq TMP1, #0 -- beq 96f @ not in next 4 bytes -- sub TMP1, DAT1, #0x20000 -- bics TMP1, TMP1, DAT1 -- itee mi -- ldrbmi DAT0, [PTR, #-13] -- ldrbpl DAT0, [PTR, #-11] -- addpl RESULT, RESULT, #2 -- teq DAT0, #0 -- it eq -- subeq RESULT, RESULT, #1 -- b 98f --96: add RESULT, RESULT, #4 -- teq TMP2, #0 -- beq 97f @ not in next 4 bytes -- sub TMP2, DAT2, #0x20000 -- bics TMP2, TMP2, DAT2 -- itee mi -- ldrbmi DAT0, [PTR, #-9] -- ldrbpl DAT0, [PTR, #-7] -- addpl RESULT, RESULT, #2 -- teq DAT0, #0 -- it eq -- subeq RESULT, RESULT, #1 -- b 98f --97: add RESULT, RESULT, #4 -- sub TMP3, DAT3, #0x20000 -- bics TMP3, TMP3, DAT3 -- itee mi -- ldrbmi DAT0, [PTR, #-5] -- ldrbpl DAT0, [PTR, #-3] -- addpl RESULT, RESULT, #2 -- teq DAT0, #0 -- it eq -- subeq RESULT, RESULT, #1 -- @ drop through to 98f --98: setend le --99: pop {v1-v6,pc} --.endfunc -- -- .unreq RESULT -- .unreq BUF -- .unreq SIZE -- .unreq PATTERN -- .unreq PTR -- .unreq DAT0 -- .unreq DAT1 -- .unreq DAT2 -- .unreq DAT3 -- .unreq TMP0 -- .unreq TMP1 -- .unreq TMP2 -- .unreq TMP3 -diff --git a/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -index 2804e56..842fb9f 100644 ---- a/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -+++ b/lib/ffmpeg/libavcodec/arm/h264dsp_init_arm.c -@@ -24,7 +24,7 @@ - #include "libavutil/arm/cpu.h" - #include "libavcodec/h264dsp.h" - --int ff_h264_find_start_code_candidate_armv6(const uint8_t *buf, int size); -+int ff_startcode_find_candidate_armv6(const uint8_t *buf, int size); - - void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha, - int beta, int8_t *tc0); -@@ -109,7 +109,7 @@ av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, - int cpu_flags = av_get_cpu_flags(); - - if (have_armv6(cpu_flags)) -- c->h264_find_start_code_candidate = ff_h264_find_start_code_candidate_armv6; -+ c->h264_find_start_code_candidate = ff_startcode_find_candidate_armv6; - if (have_neon(cpu_flags)) - ff_h264dsp_init_neon(c, bit_depth, chroma_format_idc); - } -diff --git a/lib/ffmpeg/libavcodec/arm/startcode_armv6.S b/lib/ffmpeg/libavcodec/arm/startcode_armv6.S -new file mode 100644 -index 0000000..a46f009 ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/arm/startcode_armv6.S -@@ -0,0 +1,253 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * Author: Ben Avison <bavison@riscosopen.org> -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+RESULT .req a1 -+BUF .req a1 -+SIZE .req a2 -+PATTERN .req a3 -+PTR .req a4 -+DAT0 .req v1 -+DAT1 .req v2 -+DAT2 .req v3 -+DAT3 .req v4 -+TMP0 .req v5 -+TMP1 .req v6 -+TMP2 .req ip -+TMP3 .req lr -+ -+#define PRELOAD_DISTANCE 4 -+ -+.macro innerloop4 -+ ldr DAT0, [PTR], #4 -+ subs SIZE, SIZE, #4 @ C flag survives rest of macro -+ sub TMP0, DAT0, PATTERN, lsr #14 -+ bic TMP0, TMP0, DAT0 -+ ands TMP0, TMP0, PATTERN -+.endm -+ -+.macro innerloop16 decrement, do_preload -+ ldmia PTR!, {DAT0,DAT1,DAT2,DAT3} -+ .ifnc "\do_preload","" -+ pld [PTR, #PRELOAD_DISTANCE*32] -+ .endif -+ .ifnc "\decrement","" -+ subs SIZE, SIZE, #\decrement @ C flag survives rest of macro -+ .endif -+ sub TMP0, DAT0, PATTERN, lsr #14 -+ sub TMP1, DAT1, PATTERN, lsr #14 -+ bic TMP0, TMP0, DAT0 -+ bic TMP1, TMP1, DAT1 -+ sub TMP2, DAT2, PATTERN, lsr #14 -+ sub TMP3, DAT3, PATTERN, lsr #14 -+ ands TMP0, TMP0, PATTERN -+ bic TMP2, TMP2, DAT2 -+ it eq -+ andseq TMP1, TMP1, PATTERN -+ bic TMP3, TMP3, DAT3 -+ itt eq -+ andseq TMP2, TMP2, PATTERN -+ andseq TMP3, TMP3, PATTERN -+.endm -+ -+/* int ff_startcode_find_candidate_armv6(const uint8_t *buf, int size) */ -+function ff_startcode_find_candidate_armv6, export=1 -+ push {v1-v6,lr} -+ mov PTR, BUF -+ @ Ensure there are at least (PRELOAD_DISTANCE+2) complete cachelines to go -+ @ before using code that does preloads -+ cmp SIZE, #(PRELOAD_DISTANCE+3)*32 - 1 -+ blo 60f -+ -+ @ Get to word-alignment, 1 byte at a time -+ tst PTR, #3 -+ beq 2f -+1: ldrb DAT0, [PTR], #1 -+ sub SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ tst PTR, #3 -+ bne 1b -+2: @ Get to 4-word alignment, 1 word at a time -+ ldr PATTERN, =0x80008000 -+ setend be -+ tst PTR, #12 -+ beq 4f -+3: innerloop4 -+ bne 91f -+ tst PTR, #12 -+ bne 3b -+4: @ Get to cacheline (8-word) alignment -+ tst PTR, #16 -+ beq 5f -+ innerloop16 16 -+ bne 93f -+5: @ Check complete cachelines, with preloading -+ @ We need to stop when there are still (PRELOAD_DISTANCE+1) -+ @ complete cachelines to go -+ sub SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 -+6: innerloop16 , do_preload -+ bne 93f -+ innerloop16 32 -+ bne 93f -+ bcs 6b -+ @ Preload trailing part-cacheline, if any -+ tst SIZE, #31 -+ beq 7f -+ pld [PTR, #(PRELOAD_DISTANCE+1)*32] -+ @ Check remaining data without doing any more preloads. First -+ @ do in chunks of 4 words: -+7: adds SIZE, SIZE, #(PRELOAD_DISTANCE+2)*32 - 16 -+ bmi 9f -+8: innerloop16 16 -+ bne 93f -+ bcs 8b -+ @ Then in words: -+9: adds SIZE, SIZE, #16 - 4 -+ bmi 11f -+10: innerloop4 -+ bne 91f -+ bcs 10b -+11: setend le -+ @ Check second byte of final halfword -+ ldrb DAT0, [PTR, #-1] -+ teq DAT0, #0 -+ beq 90f -+ @ Check any remaining bytes -+ tst SIZE, #3 -+ beq 13f -+12: ldrb DAT0, [PTR], #1 -+ sub SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ tst SIZE, #3 -+ bne 12b -+ @ No candidate found -+13: sub RESULT, PTR, BUF -+ b 99f -+ -+60: @ Small buffer - simply check by looping over bytes -+ subs SIZE, SIZE, #1 -+ bcc 99f -+61: ldrb DAT0, [PTR], #1 -+ subs SIZE, SIZE, #1 -+ teq DAT0, #0 -+ beq 90f -+ bcs 61b -+ @ No candidate found -+ sub RESULT, PTR, BUF -+ b 99f -+ -+90: @ Found a candidate at the preceding byte -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #1 -+ b 99f -+ -+91: @ Found a candidate somewhere in the preceding 4 bytes -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #4 -+ sub TMP0, DAT0, #0x20000 -+ bics TMP0, TMP0, DAT0 -+ itt pl -+ ldrbpl DAT0, [PTR, #-3] -+ addpl RESULT, RESULT, #2 -+ bpl 92f -+ teq RESULT, #0 -+ beq 98f @ don't look back a byte if found at first byte in buffer -+ ldrb DAT0, [PTR, #-5] -+92: teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+ -+93: @ Found a candidate somewhere in the preceding 16 bytes -+ sub RESULT, PTR, BUF -+ sub RESULT, RESULT, #16 -+ teq TMP0, #0 -+ beq 95f @ not in first 4 bytes -+ sub TMP0, DAT0, #0x20000 -+ bics TMP0, TMP0, DAT0 -+ itt pl -+ ldrbpl DAT0, [PTR, #-15] -+ addpl RESULT, RESULT, #2 -+ bpl 94f -+ teq RESULT, #0 -+ beq 98f @ don't look back a byte if found at first byte in buffer -+ ldrb DAT0, [PTR, #-17] -+94: teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+95: add RESULT, RESULT, #4 -+ teq TMP1, #0 -+ beq 96f @ not in next 4 bytes -+ sub TMP1, DAT1, #0x20000 -+ bics TMP1, TMP1, DAT1 -+ itee mi -+ ldrbmi DAT0, [PTR, #-13] -+ ldrbpl DAT0, [PTR, #-11] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+96: add RESULT, RESULT, #4 -+ teq TMP2, #0 -+ beq 97f @ not in next 4 bytes -+ sub TMP2, DAT2, #0x20000 -+ bics TMP2, TMP2, DAT2 -+ itee mi -+ ldrbmi DAT0, [PTR, #-9] -+ ldrbpl DAT0, [PTR, #-7] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ b 98f -+97: add RESULT, RESULT, #4 -+ sub TMP3, DAT3, #0x20000 -+ bics TMP3, TMP3, DAT3 -+ itee mi -+ ldrbmi DAT0, [PTR, #-5] -+ ldrbpl DAT0, [PTR, #-3] -+ addpl RESULT, RESULT, #2 -+ teq DAT0, #0 -+ it eq -+ subeq RESULT, RESULT, #1 -+ @ drop through to 98f -+98: setend le -+99: pop {v1-v6,pc} -+endfunc -+ -+ .unreq RESULT -+ .unreq BUF -+ .unreq SIZE -+ .unreq PATTERN -+ .unreq PTR -+ .unreq DAT0 -+ .unreq DAT1 -+ .unreq DAT2 -+ .unreq DAT3 -+ .unreq TMP0 -+ .unreq TMP1 -+ .unreq TMP2 -+ .unreq TMP3 -diff --git a/lib/ffmpeg/libavcodec/h264dsp.c b/lib/ffmpeg/libavcodec/h264dsp.c -index b7d61cd..a84ae59 100644 ---- a/lib/ffmpeg/libavcodec/h264dsp.c -+++ b/lib/ffmpeg/libavcodec/h264dsp.c -@@ -30,6 +30,7 @@ - #include "avcodec.h" - #include "h264dsp.h" - #include "h264idct.h" -+#include "startcode.h" - #include "libavutil/common.h" - - #define BIT_DEPTH 8 -@@ -60,34 +61,6 @@ - #include "h264addpx_template.c" - #undef BIT_DEPTH - --static int h264_find_start_code_candidate_c(const uint8_t *buf, int size) --{ -- int i = 0; --#if HAVE_FAST_UNALIGNED -- /* we check i < size instead of i + 3 / 7 because it is -- * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE -- * bytes at the end. -- */ --#if HAVE_FAST_64BIT -- while (i < size && -- !((~*(const uint64_t *)(buf + i) & -- (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & -- 0x8080808080808080ULL)) -- i += 8; --#else -- while (i < size && -- !((~*(const uint32_t *)(buf + i) & -- (*(const uint32_t *)(buf + i) - 0x01010101U)) & -- 0x80808080U)) -- i += 4; --#endif --#endif -- for (; i < size; i++) -- if (!buf[i]) -- break; -- return i; --} -- - void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc) - { - #undef FUNC -@@ -174,7 +147,7 @@ void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_fo - H264_DSP(8); - break; - } -- c->h264_find_start_code_candidate = h264_find_start_code_candidate_c; -+ c->h264_find_start_code_candidate = ff_startcode_find_candidate_c; - - if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth, chroma_format_idc); - if (HAVE_ALTIVEC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc); -diff --git a/lib/ffmpeg/libavcodec/startcode.c b/lib/ffmpeg/libavcodec/startcode.c -new file mode 100644 -index 0000000..5df7695 ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/startcode.c -@@ -0,0 +1,57 @@ -+/* -+ * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at> -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * @file -+ * Accelerated start code search function for start codes common to -+ * MPEG-1/2/4 video, VC-1, H.264/5 -+ * @author Michael Niedermayer <michaelni@gmx.at> -+ */ -+ -+#include "startcode.h" -+#include "config.h" -+ -+int ff_startcode_find_candidate_c(const uint8_t *buf, int size) -+{ -+ int i = 0; -+#if HAVE_FAST_UNALIGNED -+ /* we check i < size instead of i + 3 / 7 because it is -+ * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE -+ * bytes at the end. -+ */ -+# if HAVE_FAST_64BIT -+ while (i < size && -+ !((~*(const uint64_t *)(buf + i) & -+ (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & -+ 0x8080808080808080ULL)) -+ i += 8; -+# else -+ while (i < size && -+ !((~*(const uint32_t *)(buf + i) & -+ (*(const uint32_t *)(buf + i) - 0x01010101U)) & -+ 0x80808080U)) -+ i += 4; -+# endif -+#endif -+ for (; i < size; i++) -+ if (!buf[i]) -+ break; -+ return i; -+} -diff --git a/lib/ffmpeg/libavcodec/startcode.h b/lib/ffmpeg/libavcodec/startcode.h -new file mode 100644 -index 0000000..cc55d5f ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/startcode.h -@@ -0,0 +1,35 @@ -+/* -+ * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at> -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * @file -+ * Accelerated start code search function for start codes common to -+ * MPEG-1/2/4 video, VC-1, H.264/5 -+ * @author Michael Niedermayer <michaelni@gmx.at> -+ */ -+ -+#ifndef AVCODEC_STARTCODE_H -+#define AVCODEC_STARTCODE_H -+ -+#include <stdint.h> -+ -+int ff_startcode_find_candidate_c(const uint8_t *buf, int size); -+ -+#endif /* AVCODEC_STARTCODE_H */ --- -1.9.3 - - -From 7d95eb8e026582e5446e7e11d75ba999286a34d0 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 16 Apr 2014 01:51:32 +0100 -Subject: [PATCH 06/94] vc-1: Add platform-specific start code search routine - to VC1DSPContext. - -Initialise VC1DSPContext for parser as well as for decoder. -Note, the VC-1 code doesn't actually use the function pointer yet. - -Signed-off-by: Michael Niedermayer <michaelni@gmx.at> ---- - lib/ffmpeg/libavcodec/Makefile | 7 +++--- - lib/ffmpeg/libavcodec/arm/Makefile | 3 +++ - lib/ffmpeg/libavcodec/arm/vc1dsp_init_arm.c | 33 +++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/vc1.c | 2 ++ - lib/ffmpeg/libavcodec/vc1dec.c | 1 - - lib/ffmpeg/libavcodec/vc1dsp.c | 5 +++++ - lib/ffmpeg/libavcodec/vc1dsp.h | 9 ++++++++ - 7 files changed, 56 insertions(+), 4 deletions(-) - create mode 100644 lib/ffmpeg/libavcodec/arm/vc1dsp_init_arm.c - -diff --git a/lib/ffmpeg/libavcodec/Makefile b/lib/ffmpeg/libavcodec/Makefile -index 460f42c..8d8a548 100644 ---- a/lib/ffmpeg/libavcodec/Makefile -+++ b/lib/ffmpeg/libavcodec/Makefile -@@ -455,7 +455,7 @@ OBJS-$(CONFIG_VB_DECODER) += vb.o - OBJS-$(CONFIG_VBLE_DECODER) += vble.o - OBJS-$(CONFIG_VC1_DECODER) += vc1dec.o vc1.o vc1data.o vc1dsp.o \ - msmpeg4.o msmpeg4data.o \ -- intrax8.o intrax8dsp.o -+ intrax8.o intrax8dsp.o startcode.o - OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o - OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o - OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o -@@ -487,6 +487,7 @@ OBJS-$(CONFIG_WMAVOICE_DECODER) += wmavoice.o \ - celp_filters.o \ - acelp_vectors.o acelp_filters.o - OBJS-$(CONFIG_WMV1_DECODER) += msmpeg4.o msmpeg4data.o -+ - OBJS-$(CONFIG_WMV2_DECODER) += wmv2dec.o wmv2.o wmv2dsp.o \ - msmpeg4.o msmpeg4data.o \ - intrax8.o intrax8dsp.o -@@ -746,9 +747,9 @@ OBJS-$(CONFIG_PNM_PARSER) += pnm_parser.o pnm.o - OBJS-$(CONFIG_RV30_PARSER) += rv34_parser.o - OBJS-$(CONFIG_RV40_PARSER) += rv34_parser.o - OBJS-$(CONFIG_TAK_PARSER) += tak_parser.o tak.o --OBJS-$(CONFIG_VC1_PARSER) += vc1_parser.o vc1.o vc1data.o \ -+OBJS-$(CONFIG_VC1_PARSER) += vc1_parser.o vc1.o vc1data.o vc1dsp.o \ - msmpeg4.o msmpeg4data.o mpeg4video.o \ -- h263.o -+ h263.o startcode.o - OBJS-$(CONFIG_VORBIS_PARSER) += vorbis_parser.o xiph.o - OBJS-$(CONFIG_VP3_PARSER) += vp3_parser.o - OBJS-$(CONFIG_VP8_PARSER) += vp8_parser.o -diff --git a/lib/ffmpeg/libavcodec/arm/Makefile b/lib/ffmpeg/libavcodec/arm/Makefile -index 0b432e3..715eed7 100644 ---- a/lib/ffmpeg/libavcodec/arm/Makefile -+++ b/lib/ffmpeg/libavcodec/arm/Makefile -@@ -16,6 +16,9 @@ OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \ - - OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_init_arm.o - ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_fixed_armv6.o -+ARMV6-OBJS-$(CONFIG_VC1_DECODER) += arm/startcode_armv6.o -+OBJS-$(CONFIG_VC1_DECODER) += arm/vc1dsp_init_arm.o -+ARMV6-OBJS-$(CONFIG_VC1_PARSER) += arm/startcode_armv6.o - - OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_arm.o - OBJS-$(CONFIG_VORBIS_DECODER) += arm/vorbisdsp_init_arm.o -diff --git a/lib/ffmpeg/libavcodec/arm/vc1dsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/vc1dsp_init_arm.c -new file mode 100644 -index 0000000..fec5e78 ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/arm/vc1dsp_init_arm.c -@@ -0,0 +1,33 @@ -+/* -+ * This file is part of Libav. -+ * -+ * Libav is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * Libav is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with Libav; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include <stdint.h> -+ -+#include "libavutil/attributes.h" -+#include "libavutil/arm/cpu.h" -+#include "libavcodec/vc1dsp.h" -+ -+int ff_startcode_find_candidate_armv6(const uint8_t *buf, int size); -+ -+av_cold void ff_vc1dsp_init_arm(VC1DSPContext *dsp) -+{ -+ int cpu_flags = av_get_cpu_flags(); -+ -+ if (have_armv6(cpu_flags)) -+ dsp->vc1_find_start_code_candidate = ff_startcode_find_candidate_armv6; -+} -diff --git a/lib/ffmpeg/libavcodec/vc1.c b/lib/ffmpeg/libavcodec/vc1.c -index e2e90a8..9b15809 100644 ---- a/lib/ffmpeg/libavcodec/vc1.c -+++ b/lib/ffmpeg/libavcodec/vc1.c -@@ -1663,5 +1663,7 @@ int ff_vc1_init_common(VC1Context *v) - v->pq = -1; - v->mvrange = 0; /* 7.1.1.18, p80 */ - -+ ff_vc1dsp_init(&v->vc1dsp); -+ - return 0; - } -diff --git a/lib/ffmpeg/libavcodec/vc1dec.c b/lib/ffmpeg/libavcodec/vc1dec.c -index 2130c74..9fd3cae 100644 ---- a/lib/ffmpeg/libavcodec/vc1dec.c -+++ b/lib/ffmpeg/libavcodec/vc1dec.c -@@ -5193,7 +5193,6 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) - ff_vc1_decode_end(avctx); - - ff_h264chroma_init(&v->h264chroma, 8); -- ff_vc1dsp_init(&v->vc1dsp); - - if (avctx->codec_id == AV_CODEC_ID_WMV3 || avctx->codec_id == AV_CODEC_ID_WMV3IMAGE) { - int count = 0; -diff --git a/lib/ffmpeg/libavcodec/vc1dsp.c b/lib/ffmpeg/libavcodec/vc1dsp.c -index 260eda4..3e3f00e 100644 ---- a/lib/ffmpeg/libavcodec/vc1dsp.c -+++ b/lib/ffmpeg/libavcodec/vc1dsp.c -@@ -30,6 +30,7 @@ - #include "h264chroma.h" - #include "rnd_avg.h" - #include "vc1dsp.h" -+#include "startcode.h" - - - /** Apply overlap transform to horizontal edge -@@ -861,8 +862,12 @@ av_cold void ff_vc1dsp_init(VC1DSPContext* dsp) { - dsp->sprite_v_double_twoscale = sprite_v_double_twoscale_c; - #endif - -+ dsp->vc1_find_start_code_candidate = ff_startcode_find_candidate_c; -+ - if (HAVE_ALTIVEC) - ff_vc1dsp_init_altivec(dsp); -+ if (ARCH_ARM) -+ ff_vc1dsp_init_arm(dsp); - if (ARCH_X86) - ff_vc1dsp_init_x86(dsp); - } -diff --git a/lib/ffmpeg/libavcodec/vc1dsp.h b/lib/ffmpeg/libavcodec/vc1dsp.h -index 6540eff..302e4a8 100644 ---- a/lib/ffmpeg/libavcodec/vc1dsp.h -+++ b/lib/ffmpeg/libavcodec/vc1dsp.h -@@ -73,10 +73,19 @@ typedef struct VC1DSPContext { - void (*sprite_v_double_twoscale)(uint8_t *dst, const uint8_t *src1a, const uint8_t *src1b, int offset1, - const uint8_t *src2a, const uint8_t *src2b, int offset2, - int alpha, int width); -+ -+ /** -+ * Search buf from the start for up to size bytes. Return the index -+ * of a zero byte, or >= size if not found. Ideally, use lookahead -+ * to filter out any zero bytes that are known to not be followed by -+ * one or more further zero bytes and a one byte. -+ */ -+ int (*vc1_find_start_code_candidate)(const uint8_t *buf, int size); - } VC1DSPContext; - - void ff_vc1dsp_init(VC1DSPContext* c); - void ff_vc1dsp_init_altivec(VC1DSPContext* c); -+void ff_vc1dsp_init_arm(VC1DSPContext* dsp); - void ff_vc1dsp_init_x86(VC1DSPContext* dsp); - - #endif /* AVCODEC_VC1DSP_H */ --- -1.9.3 - - -From 9b459c3c4130299099b2e5aca5bff3d6f8d60e72 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 23 Apr 2014 01:41:04 +0100 -Subject: [PATCH 07/94] vc-1: Optimise parser (with special attention to ARM) - -The previous implementation of the parser made four passes over each input -buffer (reduced to two if the container format already guaranteed the input -buffer corresponded to frames, such as with MKV). But these buffers are -often 200K in size, certainly enough to flush the data out of L1 cache, and -for many CPUs, all the way out to main memory. The passes were: - -1) locate frame boundaries (not needed for MKV etc) -2) copy the data into a contiguous block (not needed for MKV etc) -3) locate the start codes within each frame -4) unescape the data between start codes - -After this, the unescaped data was parsed to extract certain header fields, -but because the unescape operation was so large, this was usually also -effectively operating on uncached memory. Most of the unescaped data was -simply thrown away and never processed further. Only step 2 - because it -used memcpy - was using prefetch, making things even worse. - -This patch reorganises these steps so that, aside from the copying, the -operations are performed in parallel, maximising cache utilisation. No more -than the worst-case number of bytes needed for header parsing is unescaped. -Most of the data is, in practice, only read in order to search for a start -code, for which optimised implementations already existed in the H264 codec -(notably the ARM version uses prefetch, so we end up doing both remaining -passes at maximum speed). For MKV files, we know when we've found the last -start code of interest in a given frame, so we are able to avoid doing even -that one remaining pass for most of the buffer. - -In some use-cases (such as the Raspberry Pi) video decode is handled by the -GPU, but the entire elementary stream is still fed through the parser to -pick out certain elements of the header which are necessary to manage the -decode process. As you might expect, in these cases, the performance of the -parser is significant. - -To measure parser performance, I used the same VC-1 elementary stream in -either an MPEG-2 transport stream or a MKV file, and fed it through ffmpeg -with -c:v copy -c:a copy -f null. These are the gperftools counts for -those streams, both filtered to only include vc1_parse() and its callees, -and unfiltered (to include the whole binary). Lower numbers are better: - - Before After -File Filtered Mean StdDev Mean StdDev Confidence Change -M2TS No 861.7 8.2 650.5 8.1 100.0% +32.5% -MKV No 868.9 7.4 731.7 9.0 100.0% +18.8% -M2TS Yes 250.0 11.2 27.2 3.4 100.0% +817.9% -MKV Yes 149.0 12.8 1.7 0.8 100.0% +8526.3% - -Yes, that last case shows vc1_parse() running 86 times faster! The M2TS -case does show a larger absolute improvement though, since it was worse -to begin with. - -This patch has been tested with the FATE suite (albeit on x86 for speed). - -Signed-off-by: Michael Niedermayer <michaelni@gmx.at> ---- - lib/ffmpeg/libavcodec/vc1_parser.c | 269 ++++++++++++++++++++++++------------- - 1 file changed, 175 insertions(+), 94 deletions(-) - -diff --git a/lib/ffmpeg/libavcodec/vc1_parser.c b/lib/ffmpeg/libavcodec/vc1_parser.c -index 53af61c..af601ad 100644 ---- a/lib/ffmpeg/libavcodec/vc1_parser.c -+++ b/lib/ffmpeg/libavcodec/vc1_parser.c -@@ -29,112 +29,83 @@ - #include "vc1.h" - #include "get_bits.h" - -+/** The maximum number of bytes of a sequence, entry point or -+ * frame header whose values we pay any attention to */ -+#define UNESCAPED_THRESHOLD 37 -+ -+/** The maximum number of bytes of a sequence, entry point or -+ * frame header which must be valid memory (because they are -+ * used to update the bitstream cache in skip_bits() calls) -+ */ -+#define UNESCAPED_LIMIT 144 -+ -+typedef enum { -+ NO_MATCH, -+ ONE_ZERO, -+ TWO_ZEROS, -+ ONE -+} VC1ParseSearchState; -+ - typedef struct { - ParseContext pc; - VC1Context v; -+ uint8_t prev_start_code; -+ size_t bytes_to_skip; -+ uint8_t unesc_buffer[UNESCAPED_LIMIT]; -+ size_t unesc_index; -+ VC1ParseSearchState search_state; - } VC1ParseContext; - --static void vc1_extract_headers(AVCodecParserContext *s, AVCodecContext *avctx, -- const uint8_t *buf, int buf_size) -+static void vc1_extract_header(AVCodecParserContext *s, AVCodecContext *avctx, -+ const uint8_t *buf, int buf_size) - { -+ /* Parse the header we just finished unescaping */ - VC1ParseContext *vpc = s->priv_data; - GetBitContext gb; -- const uint8_t *start, *end, *next; -- uint8_t *buf2 = av_mallocz(buf_size + FF_INPUT_BUFFER_PADDING_SIZE); -- -+ int ret; - vpc->v.s.avctx = avctx; - vpc->v.parse_only = 1; -- next = buf; -- s->repeat_pict = 0; -- -- for(start = buf, end = buf + buf_size; next < end; start = next){ -- int buf2_size, size; -- -- next = find_next_marker(start + 4, end); -- size = next - start - 4; -- buf2_size = vc1_unescape_buffer(start + 4, size, buf2); -- init_get_bits(&gb, buf2, buf2_size * 8); -- if(size <= 0) continue; -- switch(AV_RB32(start)){ -- case VC1_CODE_SEQHDR: -- ff_vc1_decode_sequence_header(avctx, &vpc->v, &gb); -- break; -- case VC1_CODE_ENTRYPOINT: -- ff_vc1_decode_entry_point(avctx, &vpc->v, &gb); -- break; -- case VC1_CODE_FRAME: -- if(vpc->v.profile < PROFILE_ADVANCED) -- ff_vc1_parse_frame_header (&vpc->v, &gb); -- else -- ff_vc1_parse_frame_header_adv(&vpc->v, &gb); -- -- /* keep AV_PICTURE_TYPE_BI internal to VC1 */ -- if (vpc->v.s.pict_type == AV_PICTURE_TYPE_BI) -- s->pict_type = AV_PICTURE_TYPE_B; -- else -- s->pict_type = vpc->v.s.pict_type; -- -- if (avctx->ticks_per_frame > 1){ -- // process pulldown flags -- s->repeat_pict = 1; -- // Pulldown flags are only valid when 'broadcast' has been set. -- // So ticks_per_frame will be 2 -- if (vpc->v.rff){ -- // repeat field -- s->repeat_pict = 2; -- }else if (vpc->v.rptfrm){ -- // repeat frames -- s->repeat_pict = vpc->v.rptfrm * 2 + 1; -- } -- } -+ init_get_bits(&gb, buf, buf_size * 8); -+ switch (vpc->prev_start_code) { -+ case VC1_CODE_SEQHDR & 0xFF: -+ ff_vc1_decode_sequence_header(avctx, &vpc->v, &gb); -+ break; -+ case VC1_CODE_ENTRYPOINT & 0xFF: -+ ff_vc1_decode_entry_point(avctx, &vpc->v, &gb); -+ break; -+ case VC1_CODE_FRAME & 0xFF: -+ if(vpc->v.profile < PROFILE_ADVANCED) -+ ret = ff_vc1_parse_frame_header (&vpc->v, &gb); -+ else -+ ret = ff_vc1_parse_frame_header_adv(&vpc->v, &gb); - -+ if (ret < 0) - break; -- } -- } - -- av_free(buf2); --} -+ /* keep AV_PICTURE_TYPE_BI internal to VC1 */ -+ if (vpc->v.s.pict_type == AV_PICTURE_TYPE_BI) -+ s->pict_type = AV_PICTURE_TYPE_B; -+ else -+ s->pict_type = vpc->v.s.pict_type; - --/** -- * Find the end of the current frame in the bitstream. -- * @return the position of the first byte of the next frame, or -1 -- */ --static int vc1_find_frame_end(ParseContext *pc, const uint8_t *buf, -- int buf_size) { -- int pic_found, i; -- uint32_t state; -- -- pic_found= pc->frame_start_found; -- state= pc->state; -- -- i=0; -- if(!pic_found){ -- for(i=0; i<buf_size; i++){ -- state= (state<<8) | buf[i]; -- if(state == VC1_CODE_FRAME || state == VC1_CODE_FIELD){ -- i++; -- pic_found=1; -- break; -+ if (avctx->ticks_per_frame > 1){ -+ // process pulldown flags -+ s->repeat_pict = 1; -+ // Pulldown flags are only valid when 'broadcast' has been set. -+ // So ticks_per_frame will be 2 -+ if (vpc->v.rff){ -+ // repeat field -+ s->repeat_pict = 2; -+ }else if (vpc->v.rptfrm){ -+ // repeat frames -+ s->repeat_pict = vpc->v.rptfrm * 2 + 1; - } -+ }else{ -+ s->repeat_pict = 0; - } -- } - -- if(pic_found){ -- /* EOF considered as end of frame */ -- if (buf_size == 0) -- return 0; -- for(; i<buf_size; i++){ -- state= (state<<8) | buf[i]; -- if(IS_MARKER(state) && state != VC1_CODE_FIELD && state != VC1_CODE_SLICE){ -- pc->frame_start_found=0; -- pc->state=-1; -- return i-3; -- } -- } -+ break; - } -- pc->frame_start_found= pic_found; -- pc->state= state; -- return END_NOT_FOUND; - } - - static int vc1_parse(AVCodecParserContext *s, -@@ -142,22 +113,127 @@ static int vc1_parse(AVCodecParserContext *s, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size) - { -+ /* Here we do the searching for frame boundaries and headers at -+ * the same time. Only a minimal amount at the start of each -+ * header is unescaped. */ - VC1ParseContext *vpc = s->priv_data; -- int next; -+ int pic_found = vpc->pc.frame_start_found; -+ uint8_t *unesc_buffer = vpc->unesc_buffer; -+ size_t unesc_index = vpc->unesc_index; -+ VC1ParseSearchState search_state = vpc->search_state; -+ int next = END_NOT_FOUND; -+ int i = vpc->bytes_to_skip; - -- if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){ -- next= buf_size; -- }else{ -- next= vc1_find_frame_end(&vpc->pc, buf, buf_size); -+ if (pic_found && buf_size == 0) { -+ /* EOF considered as end of frame */ -+ memset(unesc_buffer + unesc_index, 0, UNESCAPED_THRESHOLD - unesc_index); -+ vc1_extract_header(s, avctx, unesc_buffer, unesc_index); -+ next = 0; -+ } -+ while (i < buf_size) { -+ int start_code_found = 0; -+ uint8_t b; -+ while (i < buf_size && unesc_index < UNESCAPED_THRESHOLD) { -+ b = buf[i++]; -+ unesc_buffer[unesc_index++] = b; -+ if (search_state <= ONE_ZERO) -+ search_state = b ? NO_MATCH : search_state + 1; -+ else if (search_state == TWO_ZEROS) { -+ if (b == 1) -+ search_state = ONE; -+ else if (b > 1) { -+ if (b == 3) -+ unesc_index--; // swallow emulation prevention byte -+ search_state = NO_MATCH; -+ } -+ } -+ else { // search_state == ONE -+ // Header unescaping terminates early due to detection of next start code -+ search_state = NO_MATCH; -+ start_code_found = 1; -+ break; -+ } -+ } -+ if ((s->flags & PARSER_FLAG_COMPLETE_FRAMES) && -+ unesc_index >= UNESCAPED_THRESHOLD && -+ vpc->prev_start_code == (VC1_CODE_FRAME & 0xFF)) -+ { -+ // No need to keep scanning the rest of the buffer for -+ // start codes if we know it contains a complete frame and -+ // we've already unescaped all we need of the frame header -+ vc1_extract_header(s, avctx, unesc_buffer, unesc_index); -+ break; -+ } -+ if (unesc_index >= UNESCAPED_THRESHOLD && !start_code_found) { -+ while (i < buf_size) { -+ if (search_state == NO_MATCH) { -+ i += vpc->v.vc1dsp.vc1_find_start_code_candidate(buf + i, buf_size - i); -+ if (i < buf_size) { -+ search_state = ONE_ZERO; -+ } -+ i++; -+ } else { -+ b = buf[i++]; -+ if (search_state == ONE_ZERO) -+ search_state = b ? NO_MATCH : TWO_ZEROS; -+ else if (search_state == TWO_ZEROS) { -+ if (b >= 1) -+ search_state = b == 1 ? ONE : NO_MATCH; -+ } -+ else { // search_state == ONE -+ search_state = NO_MATCH; -+ start_code_found = 1; -+ break; -+ } -+ } -+ } -+ } -+ if (start_code_found) { -+ vc1_extract_header(s, avctx, unesc_buffer, unesc_index); -+ -+ vpc->prev_start_code = b; -+ unesc_index = 0; -+ -+ if (!(s->flags & PARSER_FLAG_COMPLETE_FRAMES)) { -+ if (!pic_found && (b == (VC1_CODE_FRAME & 0xFF) || b == (VC1_CODE_FIELD & 0xFF))) { -+ pic_found = 1; -+ } -+ else if (pic_found && b != (VC1_CODE_FIELD & 0xFF) && b != (VC1_CODE_SLICE & 0xFF)) { -+ next = i - 4; -+ pic_found = b == (VC1_CODE_FRAME & 0xFF); -+ break; -+ } -+ } -+ } -+ } - -+ vpc->pc.frame_start_found = pic_found; -+ vpc->unesc_index = unesc_index; -+ vpc->search_state = search_state; -+ -+ if (s->flags & PARSER_FLAG_COMPLETE_FRAMES) { -+ next = buf_size; -+ } else { - if (ff_combine_frame(&vpc->pc, next, &buf, &buf_size) < 0) { -+ vpc->bytes_to_skip = 0; - *poutbuf = NULL; - *poutbuf_size = 0; - return buf_size; - } - } - -- vc1_extract_headers(s, avctx, buf, buf_size); -+ vpc->v.first_pic_header_flag = 1; -+ -+ /* If we return with a valid pointer to a combined frame buffer -+ * then on the next call then we'll have been unhelpfully rewound -+ * by up to 4 bytes (depending upon whether the start code -+ * overlapped the input buffer, and if so by how much). We don't -+ * want this: it will either cause spurious second detections of -+ * the start code we've already seen, or cause extra bytes to be -+ * inserted at the start of the unescaped buffer. */ -+ vpc->bytes_to_skip = 4; -+ if (next < 0) -+ vpc->bytes_to_skip += next; - - *poutbuf = buf; - *poutbuf_size = buf_size; -@@ -188,6 +264,11 @@ static int vc1_parse_init(AVCodecParserContext *s) - { - VC1ParseContext *vpc = s->priv_data; - vpc->v.s.slice_context_count = 1; -+ vpc->v.first_pic_header_flag = 1; -+ vpc->prev_start_code = 0; -+ vpc->bytes_to_skip = 0; -+ vpc->unesc_index = 0; -+ vpc->search_state = NO_MATCH; - return ff_vc1_init_common(&vpc->v); - } - --- -1.9.3 - - -From c2ebe54fe1d7c7a6cee7282bcf2668a826006ade Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:44:59 +0000 -Subject: [PATCH 08/94] truehd: add hand-scheduled ARM asm version of - mlp_filter_channel. - -Profiling results for overall audio decode and the mlp_filter_channel(_arm) -function in particular are as follows: - - Before After - Mean StdDev Mean StdDev Confidence Change -6:2 total 380.4 22.0 370.8 17.0 87.4% +2.6% (insignificant) -6:2 function 60.7 7.2 36.6 8.1 100.0% +65.8% -8:2 total 357.0 17.5 343.2 19.0 97.8% +4.0% (insignificant) -8:2 function 60.3 8.8 37.3 3.8 100.0% +61.8% -6:6 total 717.2 23.2 658.4 15.7 100.0% +8.9% -6:6 function 140.4 12.9 81.5 9.2 100.0% +72.4% -8:8 total 981.9 16.2 896.2 24.5 100.0% +9.6% -8:8 function 193.4 15.0 103.3 11.5 100.0% +87.2% - -Experiments with adding preload instructions to this function yielded no -useful benefit, so these have not been included. - -The assembly version has also been tested with a fuzz tester to ensure that -any combinations of inputs not exercised by my available test streams still -generate mathematically identical results to the C version. ---- - lib/ffmpeg/libavcodec/arm/Makefile | 5 +- - lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S | 430 ++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c | 36 +++ - lib/ffmpeg/libavcodec/mlpdsp.h | 1 + - 4 files changed, 471 insertions(+), 1 deletion(-) - create mode 100644 lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S - create mode 100644 lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c - -diff --git a/lib/ffmpeg/libavcodec/arm/Makefile b/lib/ffmpeg/libavcodec/arm/Makefile -index 715eed7..5b0edf0 100644 ---- a/lib/ffmpeg/libavcodec/arm/Makefile -+++ b/lib/ffmpeg/libavcodec/arm/Makefile -@@ -14,6 +14,8 @@ ARMV6-OBJS-$(CONFIG_H264DSP) += arm/startcode_armv6.o - OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \ - arm/flacdsp_arm.o \ - -+OBJS-$(CONFIG_MLP_DECODER) += arm/mlpdsp_init_arm.o \ -+ arm/mlpdsp_arm.o - OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_init_arm.o - ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_fixed_armv6.o - ARMV6-OBJS-$(CONFIG_VC1_DECODER) += arm/startcode_armv6.o -@@ -21,6 +23,8 @@ OBJS-$(CONFIG_VC1_DECODER) += arm/vc1dsp_init_arm.o - ARMV6-OBJS-$(CONFIG_VC1_PARSER) += arm/startcode_armv6.o - - OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_arm.o -+OBJS-$(CONFIG_TRUEHD_DECODER) += arm/mlpdsp_init_arm.o \ -+ arm/mlpdsp_arm.o - OBJS-$(CONFIG_VORBIS_DECODER) += arm/vorbisdsp_init_arm.o - OBJS-$(CONFIG_VP3DSP) += arm/vp3dsp_init_arm.o - OBJS-$(CONFIG_VP5_DECODER) += arm/vp56dsp_init_arm.o -@@ -34,7 +38,6 @@ OBJS-$(CONFIG_H264CHROMA) += arm/h264chroma_init_arm.o - OBJS-$(CONFIG_H264DSP) += arm/h264dsp_init_arm.o - OBJS-$(CONFIG_H264PRED) += arm/h264pred_init_arm.o - OBJS-$(CONFIG_H264QPEL) += arm/h264qpel_init_arm.o -- - OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_init_arm.o - OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_init_arm.o \ - arm/rv40dsp_init_arm.o \ -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -new file mode 100644 -index 0000000..114496f ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -@@ -0,0 +1,430 @@ -+/* -+ * Copyright (c) 2014 RISC OS Open Ltd -+ * Author: Ben Avison <bavison@riscosopen.org> -+ * -+ * This file is part of Libav. -+ * -+ * Libav is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * Libav is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with Libav; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+// This code uses too many ARM-only tricks to easily assemble as Thumb -+.arm -+#undef CONFIG_THUMB -+#define CONFIG_THUMB 0 -+ -+#include "libavutil/arm/asm.S" -+ -+#define MAX_CHANNELS 8 -+#define MAX_FIR_ORDER 8 -+#define MAX_IIR_ORDER 4 -+#define MAX_RATEFACTOR 4 -+#define MAX_BLOCKSIZE (40 * MAX_RATEFACTOR) -+ -+PST .req a1 -+PCO .req a2 -+AC0 .req a3 -+AC1 .req a4 -+CO0 .req v1 -+CO1 .req v2 -+CO2 .req v3 -+CO3 .req v4 -+ST0 .req v5 -+ST1 .req v6 -+ST2 .req sl -+ST3 .req fp -+I .req ip -+PSAMP .req lr -+ -+ -+// Some macros that do loads/multiplies where the register number is determined -+// from an assembly-time expression. Boy is GNU assembler's syntax ugly... -+ -+.macro load group, index, base, offset -+ .altmacro -+ load_ \group, %(\index), \base, \offset -+ .noaltmacro -+.endm -+ -+.macro load_ group, index, base, offset -+ ldr \group\index, [\base, #\offset] -+.endm -+ -+.macro loadd group, index, base, offset -+ .altmacro -+ loadd_ \group, %(\index), %(\index+1), \base, \offset -+ .noaltmacro -+.endm -+ -+.macro loadd_ group, index0, index1, base, offset -+A .if offset >= 256 -+A ldr \group\index0, [\base, #\offset] -+A ldr \group\index1, [\base, #(\offset) + 4] -+A .else -+ ldrd \group\index0, \group\index1, [\base, #\offset] -+A .endif -+.endm -+ -+.macro multiply index, accumulate, long -+ .altmacro -+ multiply_ %(\index), \accumulate, \long -+ .noaltmacro -+.endm -+ -+.macro multiply_ index, accumulate, long -+ .if \long -+ .if \accumulate -+ smlal AC0, AC1, CO\index, ST\index -+ .else -+ smull AC0, AC1, CO\index, ST\index -+ .endif -+ .else -+ .if \accumulate -+ mla AC0, CO\index, ST\index, AC0 -+ .else -+ mul AC0, CO\index, ST\index -+ .endif -+ .endif -+.endm -+ -+// A macro to update the load register number and load offsets -+ -+.macro inc howmany -+ .set LOAD_REG, (LOAD_REG + \howmany) & 3 -+ .set OFFSET_CO, OFFSET_CO + 4 * \howmany -+ .set OFFSET_ST, OFFSET_ST + 4 * \howmany -+ .if FIR_REMAIN > 0 -+ .set FIR_REMAIN, FIR_REMAIN - \howmany -+ .if FIR_REMAIN == 0 -+ .set OFFSET_CO, 4 * MAX_FIR_ORDER -+ .set OFFSET_ST, 4 * (MAX_BLOCKSIZE + MAX_FIR_ORDER) -+ .endif -+ .elseif IIR_REMAIN > 0 -+ .set IIR_REMAIN, IIR_REMAIN - \howmany -+ .endif -+.endm -+ -+// Macro to implement the inner loop for one specific combination of parameters -+ -+.macro implement_filter mask_minus1, shift_0, shift_8, iir_taps, fir_taps -+ .set TOTAL_TAPS, \iir_taps + \fir_taps -+ -+ // Deal with register allocation... -+ .set DEFINED_SHIFT, 0 -+ .set DEFINED_MASK, 0 -+ .set SHUFFLE_SHIFT, 0 -+ .set SHUFFLE_MASK, 0 -+ .set SPILL_SHIFT, 0 -+ .set SPILL_MASK, 0 -+ .if TOTAL_TAPS == 0 -+ // Little register pressure in this case - just keep MASK where it was -+ .if !\mask_minus1 -+ MASK .req ST1 -+ .set DEFINED_MASK, 1 -+ .endif -+ .else -+ .if \shift_0 -+ .if !\mask_minus1 -+ // AC1 is unused with shift 0 -+ MASK .req AC1 -+ .set DEFINED_MASK, 1 -+ .set SHUFFLE_MASK, 1 -+ .endif -+ .elseif \shift_8 -+ .if !\mask_minus1 -+ .if TOTAL_TAPS <= 4 -+ // All coefficients are preloaded (so pointer not needed) -+ MASK .req PCO -+ .set DEFINED_MASK, 1 -+ .set SHUFFLE_MASK, 1 -+ .else -+ .set SPILL_MASK, 1 -+ .endif -+ .endif -+ .else // shift not 0 or 8 -+ .if TOTAL_TAPS <= 3 -+ // All coefficients are preloaded, and at least one CO register is unused -+ .if \fir_taps & 1 -+ SHIFT .req CO0 -+ .set DEFINED_SHIFT, 1 -+ .set SHUFFLE_SHIFT, 1 -+ .else -+ SHIFT .req CO3 -+ .set DEFINED_SHIFT, 1 -+ .set SHUFFLE_SHIFT, 1 -+ .endif -+ .if !\mask_minus1 -+ MASK .req PCO -+ .set DEFINED_MASK, 1 -+ .set SHUFFLE_MASK, 1 -+ .endif -+ .elseif TOTAL_TAPS == 4 -+ // All coefficients are preloaded -+ SHIFT .req PCO -+ .set DEFINED_SHIFT, 1 -+ .set SHUFFLE_SHIFT, 1 -+ .if !\mask_minus1 -+ .set SPILL_MASK, 1 -+ .endif -+ .else -+ .set SPILL_SHIFT, 1 -+ .if !\mask_minus1 -+ .set SPILL_MASK, 1 -+ .endif -+ .endif -+ .endif -+ .endif -+ .if SPILL_SHIFT -+ SHIFT .req ST0 -+ .set DEFINED_SHIFT, 1 -+ .endif -+ .if SPILL_MASK -+ MASK .req ST1 -+ .set DEFINED_MASK, 1 -+ .endif -+ -+ // Preload coefficients if possible -+ .if TOTAL_TAPS <= 4 -+ .set OFFSET_CO, 0 -+ .if \fir_taps & 1 -+ .set LOAD_REG, 1 -+ .else -+ .set LOAD_REG, 0 -+ .endif -+ .rept \fir_taps -+ load CO, LOAD_REG, PCO, OFFSET_CO -+ .set LOAD_REG, (LOAD_REG + 1) & 3 -+ .set OFFSET_CO, OFFSET_CO + 4 -+ .endr -+ .set OFFSET_CO, 4 * MAX_FIR_ORDER -+ .rept \iir_taps -+ load CO, LOAD_REG, PCO, OFFSET_CO -+ .set LOAD_REG, (LOAD_REG + 1) & 3 -+ .set OFFSET_CO, OFFSET_CO + 4 -+ .endr -+ .endif -+ -+ // Move mask/shift to final positions if necessary -+ // Need to do this after preloading, because in some cases we -+ // reuse the coefficient pointer register -+ .if SHUFFLE_SHIFT -+ mov SHIFT, ST0 -+ .endif -+ .if SHUFFLE_MASK -+ mov MASK, ST1 -+ .endif -+ -+ // Begin loop -+01: -+ .if TOTAL_TAPS == 0 -+ // Things simplify a lot in this case -+ // In fact this could be pipelined further if it's worth it... -+ ldr ST0, [PSAMP] -+ subs I, I, #1 -+ .if !\mask_minus1 -+ and ST0, ST0, MASK -+ .endif -+ str ST0, [PST, #-4]! -+ str ST0, [PST, #4 * (MAX_BLOCKSIZE + MAX_FIR_ORDER)] -+ str ST0, [PSAMP], #4 * MAX_CHANNELS -+ bne 01b -+ .else -+ .if \fir_taps & 1 -+ .set LOAD_REG, 1 -+ .else -+ .set LOAD_REG, 0 -+ .endif -+ .set LOAD_BANK, 0 -+ .set FIR_REMAIN, \fir_taps -+ .set IIR_REMAIN, \iir_taps -+ .if FIR_REMAIN == 0 // only IIR terms -+ .set OFFSET_CO, 4 * MAX_FIR_ORDER -+ .set OFFSET_ST, 4 * (MAX_BLOCKSIZE + MAX_FIR_ORDER) -+ .else -+ .set OFFSET_CO, 0 -+ .set OFFSET_ST, 0 -+ .endif -+ .set MUL_REG, LOAD_REG -+ .set COUNTER, 0 -+ .rept TOTAL_TAPS + 2 -+ // Do load(s) -+ .if FIR_REMAIN != 0 || IIR_REMAIN != 0 -+ .if COUNTER == 0 -+ .if TOTAL_TAPS > 4 -+ load CO, LOAD_REG, PCO, OFFSET_CO -+ .endif -+ load ST, LOAD_REG, PST, OFFSET_ST -+ inc 1 -+ .elseif COUNTER == 1 && (\fir_taps & 1) == 0 -+ .if TOTAL_TAPS > 4 -+ load CO, LOAD_REG, PCO, OFFSET_CO -+ .endif -+ load ST, LOAD_REG, PST, OFFSET_ST -+ inc 1 -+ .elseif LOAD_BANK == 0 -+ .if TOTAL_TAPS > 4 -+ .if FIR_REMAIN == 0 && IIR_REMAIN == 1 -+ load CO, LOAD_REG, PCO, OFFSET_CO -+ .else -+ loadd CO, LOAD_REG, PCO, OFFSET_CO -+ .endif -+ .endif -+ .set LOAD_BANK, 1 -+ .else -+ .if FIR_REMAIN == 0 && IIR_REMAIN == 1 -+ load ST, LOAD_REG, PST, OFFSET_ST -+ inc 1 -+ .else -+ loadd ST, LOAD_REG, PST, OFFSET_ST -+ inc 2 -+ .endif -+ .set LOAD_BANK, 0 -+ .endif -+ .endif -+ -+ // Do interleaved multiplies, slightly delayed -+ .if COUNTER >= 2 -+ multiply MUL_REG, COUNTER > 2, !\shift_0 -+ .set MUL_REG, (MUL_REG + 1) & 3 -+ .endif -+ .set COUNTER, COUNTER + 1 -+ .endr -+ -+ // Post-process the result of the multiplies -+ .if SPILL_SHIFT -+ ldr SHIFT, [sp, #9*4 + 0*4] -+ .endif -+ .if SPILL_MASK -+ ldr MASK, [sp, #9*4 + 1*4] -+ .endif -+ ldr ST2, [PSAMP] -+ subs I, I, #1 -+ .if \shift_8 -+ mov AC0, AC0, lsr #8 -+ orr AC0, AC0, AC1, lsl #24 -+ .elseif !\shift_0 -+ rsb ST3, SHIFT, #32 -+ mov AC0, AC0, lsr SHIFT -+ orr AC0, AC0, AC1, lsl ST3 -+ .endif -+ .if \mask_minus1 -+ add ST3, ST2, AC0 -+ .else -+ add ST2, ST2, AC0 -+ and ST3, ST2, MASK -+ sub ST2, ST3, AC0 -+ .endif -+ str ST3, [PST, #-4]! -+ str ST2, [PST, #4 * (MAX_BLOCKSIZE + MAX_FIR_ORDER)] -+ str ST3, [PSAMP], #4 * MAX_CHANNELS -+ bne 01b -+ .endif -+ b 99f -+ -+ .if DEFINED_SHIFT -+ .unreq SHIFT -+ .endif -+ .if DEFINED_MASK -+ .unreq MASK -+ .endif -+.endm -+ -+.macro switch_on_fir_taps mask_minus1, shift_0, shift_8, iir_taps -+ ldr pc, [pc, a3, LSL #2] // firorder is in range 0-(8-iir_taps) -+ .word 0 -+ .word 70f -+ .word 71f -+ .word 72f -+ .word 73f -+ .word 74f -+ .word 75f -+ .if \iir_taps <= 2 -+ .word 76f -+ .if \iir_taps <= 1 -+ .word 77f -+ .if \iir_taps == 0 -+ .word 78f -+ .endif -+ .endif -+ .endif -+70: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 0 -+71: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 1 -+72: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 2 -+73: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 3 -+74: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 4 -+75: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 5 -+ .if \iir_taps <= 2 -+76: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 6 -+ .if \iir_taps <= 1 -+77: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 7 -+ .if \iir_taps == 0 -+78: implement_filter \mask_minus1, \shift_0, \shift_8, \iir_taps, 8 -+ .endif -+ .endif -+ .endif -+.endm -+ -+.macro switch_on_iir_taps mask_minus1, shift_0, shift_8 -+ ldr pc, [pc, a4, LSL #2] // irorder is in range 0-3 -+ .word 0 -+ .word 60f -+ .word 61f -+ .word 62f -+ .word 63f -+60: switch_on_fir_taps \mask_minus1, \shift_0, \shift_8, 0 -+61: switch_on_fir_taps \mask_minus1, \shift_0, \shift_8, 1 -+62: switch_on_fir_taps \mask_minus1, \shift_0, \shift_8, 2 -+63: switch_on_fir_taps \mask_minus1, \shift_0, \shift_8, 3 -+.endm -+ -+/* void ff_mlp_filter_channel_arm(int32_t *state, const int32_t *coeff, -+ * int firorder, int iirorder, -+ * unsigned int filter_shift, int32_t mask, -+ * int blocksize, int32_t *sample_buffer); -+ */ -+function ff_mlp_filter_channel_arm, export=1 -+ push {v1-fp,lr} -+ add v1, sp, #9*4 // point at arguments on stack -+ ldm v1, {ST0,ST1,I,PSAMP} -+ cmp ST1, #-1 -+ bne 30f -+ movs ST2, ST0, lsl #29 // shift is in range 0-15; we want to special-case 0 and 8 -+ bne 20f -+ bcs 10f -+ switch_on_iir_taps 1, 1, 0 -+10: switch_on_iir_taps 1, 0, 1 -+20: switch_on_iir_taps 1, 0, 0 -+30: movs ST2, ST0, lsl #29 // shift is in range 0-15; we want to special-case 0 and 8 -+ bne 50f -+ bcs 40f -+ switch_on_iir_taps 0, 1, 0 -+40: switch_on_iir_taps 0, 0, 1 -+50: switch_on_iir_taps 0, 0, 0 -+99: pop {v1-fp,pc} -+endfunc -+ -+ .unreq PST -+ .unreq PCO -+ .unreq AC0 -+ .unreq AC1 -+ .unreq CO0 -+ .unreq CO1 -+ .unreq CO2 -+ .unreq CO3 -+ .unreq ST0 -+ .unreq ST1 -+ .unreq ST2 -+ .unreq ST3 -+ .unreq I -+ .unreq PSAMP -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -new file mode 100644 -index 0000000..f0ea285 ---- /dev/null -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -@@ -0,0 +1,36 @@ -+/* -+ * Copyright (c) 2014 RISC OS Open Ltd -+ * Author: Ben Avison <bavison@riscosopen.org> -+ * -+ * This file is part of Libav. -+ * -+ * Libav is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * Libav is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with Libav; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include <stdint.h> -+ -+#include "libavutil/arm/cpu.h" -+#include "libavutil/attributes.h" -+#include "libavcodec/mlpdsp.h" -+ -+void ff_mlp_filter_channel_arm(int32_t *state, const int32_t *coeff, -+ int firorder, int iirorder, -+ unsigned int filter_shift, int32_t mask, -+ int blocksize, int32_t *sample_buffer); -+ -+av_cold void ff_mlpdsp_init_arm(MLPDSPContext *c) -+{ -+ c->mlp_filter_channel = ff_mlp_filter_channel_arm; -+} -diff --git a/lib/ffmpeg/libavcodec/mlpdsp.h b/lib/ffmpeg/libavcodec/mlpdsp.h -index 84a8aa3..129bcfe 100644 ---- a/lib/ffmpeg/libavcodec/mlpdsp.h -+++ b/lib/ffmpeg/libavcodec/mlpdsp.h -@@ -32,6 +32,7 @@ typedef struct MLPDSPContext { - } MLPDSPContext; - - void ff_mlpdsp_init(MLPDSPContext *c); -+void ff_mlpdsp_init_arm(MLPDSPContext *c); - void ff_mlpdsp_init_x86(MLPDSPContext *c); - - #endif /* AVCODEC_MLPDSP_H */ --- -1.9.3 - - -From 904cb11e58484c5d0bca17b8c209916d106d2079 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:48:54 +0000 -Subject: [PATCH 09/94] truehd: break out part of rematrix_channels into - platform-specific callback. - -Verified with profiling that this doesn't have a measurable effect upon -overall performance. ---- - lib/ffmpeg/libavcodec/mlpdec.c | 37 ++++++++++++------------------------- - lib/ffmpeg/libavcodec/mlpdsp.c | 35 ++++++++++++++++++++++++++++++++++- - lib/ffmpeg/libavcodec/mlpdsp.h | 23 +++++++++++++++++++++++ - 3 files changed, 69 insertions(+), 26 deletions(-) - -diff --git a/lib/ffmpeg/libavcodec/mlpdec.c b/lib/ffmpeg/libavcodec/mlpdec.c -index c763624..e9343a5 100644 ---- a/lib/ffmpeg/libavcodec/mlpdec.c -+++ b/lib/ffmpeg/libavcodec/mlpdec.c -@@ -958,7 +958,7 @@ static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr) - static void rematrix_channels(MLPDecodeContext *m, unsigned int substr) - { - SubStream *s = &m->substream[substr]; -- unsigned int mat, src_ch, i; -+ unsigned int mat; - unsigned int maxchan; - - maxchan = s->max_matrix_channel; -@@ -970,31 +970,18 @@ static void rematrix_channels(MLPDecodeContext *m, unsigned int substr) - } - - for (mat = 0; mat < s->num_primitive_matrices; mat++) { -- int matrix_noise_shift = s->matrix_noise_shift[mat]; - unsigned int dest_ch = s->matrix_out_ch[mat]; -- int32_t mask = MSB_MASK(s->quant_step_size[dest_ch]); -- int32_t *coeffs = s->matrix_coeff[mat]; -- int index = s->num_primitive_matrices - mat; -- int index2 = 2 * index + 1; -- -- /* TODO: DSPContext? */ -- -- for (i = 0; i < s->blockpos; i++) { -- int32_t bypassed_lsb = m->bypassed_lsbs[i][mat]; -- int32_t *samples = m->sample_buffer[i]; -- int64_t accum = 0; -- -- for (src_ch = 0; src_ch <= maxchan; src_ch++) -- accum += (int64_t) samples[src_ch] * coeffs[src_ch]; -- -- if (matrix_noise_shift) { -- index &= m->access_unit_size_pow2 - 1; -- accum += m->noise_buffer[index] << (matrix_noise_shift + 7); -- index += index2; -- } -- -- samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb; -- } -+ m->dsp.mlp_rematrix_channel(&m->sample_buffer[0][0], -+ s->matrix_coeff[mat], -+ &m->bypassed_lsbs[0][mat], -+ m->noise_buffer, -+ s->num_primitive_matrices - mat, -+ dest_ch, -+ s->blockpos, -+ maxchan, -+ s->matrix_noise_shift[mat], -+ m->access_unit_size_pow2, -+ MSB_MASK(s->quant_step_size[dest_ch])); - } - } - -diff --git a/lib/ffmpeg/libavcodec/mlpdsp.c b/lib/ffmpeg/libavcodec/mlpdsp.c -index 9a376e2..1f912fb 100644 ---- a/lib/ffmpeg/libavcodec/mlpdsp.c -+++ b/lib/ffmpeg/libavcodec/mlpdsp.c -@@ -56,9 +56,42 @@ static void ff_mlp_filter_channel(int32_t *state, const int32_t *coeff, - } - } - --void ff_mlpdsp_init(MLPDSPContext *c) -+void ff_mlp_rematrix_channel(int32_t *samples, -+ const int32_t *coeffs, -+ const uint8_t *bypassed_lsbs, -+ const int8_t *noise_buffer, -+ int index, -+ unsigned int dest_ch, -+ uint16_t blockpos, -+ unsigned int maxchan, -+ int matrix_noise_shift, -+ int access_unit_size_pow2, -+ int32_t mask) -+{ -+ unsigned int src_ch, i; -+ int index2 = 2 * index + 1; -+ for (i = 0; i < blockpos; i++) { -+ int64_t accum = 0; -+ -+ for (src_ch = 0; src_ch <= maxchan; src_ch++) -+ accum += (int64_t) samples[src_ch] * coeffs[src_ch]; -+ -+ if (matrix_noise_shift) { -+ index &= access_unit_size_pow2 - 1; -+ accum += noise_buffer[index] << (matrix_noise_shift + 7); -+ index += index2; -+ } -+ -+ samples[dest_ch] = ((accum >> 14) & mask) + *bypassed_lsbs; -+ bypassed_lsbs += MAX_CHANNELS; -+ samples += MAX_CHANNELS; -+ } -+} -+ -+av_cold void ff_mlpdsp_init(MLPDSPContext *c) - { - c->mlp_filter_channel = ff_mlp_filter_channel; -+ c->mlp_rematrix_channel = ff_mlp_rematrix_channel; - if (ARCH_X86) - ff_mlpdsp_init_x86(c); - } -diff --git a/lib/ffmpeg/libavcodec/mlpdsp.h b/lib/ffmpeg/libavcodec/mlpdsp.h -index 129bcfe..f98e9be 100644 ---- a/lib/ffmpeg/libavcodec/mlpdsp.h -+++ b/lib/ffmpeg/libavcodec/mlpdsp.h -@@ -24,11 +24,34 @@ - - #include <stdint.h> - -+void ff_mlp_rematrix_channel(int32_t *samples, -+ const int32_t *coeffs, -+ const uint8_t *bypassed_lsbs, -+ const int8_t *noise_buffer, -+ int index, -+ unsigned int dest_ch, -+ uint16_t blockpos, -+ unsigned int maxchan, -+ int matrix_noise_shift, -+ int access_unit_size_pow2, -+ int32_t mask); -+ - typedef struct MLPDSPContext { - void (*mlp_filter_channel)(int32_t *state, const int32_t *coeff, - int firorder, int iirorder, - unsigned int filter_shift, int32_t mask, - int blocksize, int32_t *sample_buffer); -+ void (*mlp_rematrix_channel)(int32_t *samples, -+ const int32_t *coeffs, -+ const uint8_t *bypassed_lsbs, -+ const int8_t *noise_buffer, -+ int index, -+ unsigned int dest_ch, -+ uint16_t blockpos, -+ unsigned int maxchan, -+ int matrix_noise_shift, -+ int access_unit_size_pow2, -+ int32_t mask); - } MLPDSPContext; - - void ff_mlpdsp_init(MLPDSPContext *c); --- -1.9.3 - - -From 0bb8daacca4b35d716addbc591fec43fd4fe6467 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:49:48 +0000 -Subject: [PATCH 10/94] truehd: add hand-scheduled ARM asm version of - ff_mlp_rematrix_channel. - -Profiling results for overall audio decode and the rematrix_channels function -in particular are as follows: - - Before After - Mean StdDev Mean StdDev Confidence Change -6:2 total 370.8 17.0 348.8 20.1 99.9% +6.3% -6:2 function 46.4 8.4 45.8 6.6 18.0% +1.2% (insignificant) -8:2 total 343.2 19.0 339.1 15.4 54.7% +1.2% (insignificant) -8:2 function 38.9 3.9 40.2 6.9 52.4% -3.2% (insignificant) -6:6 total 658.4 15.7 604.6 20.8 100.0% +8.9% -6:6 function 109.0 8.7 59.5 5.4 100.0% +83.3% -8:8 total 896.2 24.5 766.4 17.6 100.0% +16.9% -8:8 function 223.4 12.8 93.8 5.0 100.0% +138.3% - -The assembly version has also been tested with a fuzz tester to ensure that -any combinations of inputs not exercised by my available test streams still -generate mathematically identical results to the C version. ---- - lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S | 231 ++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c | 12 ++ - 2 files changed, 243 insertions(+) - -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -index 114496f..10008fe 100644 ---- a/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -@@ -428,3 +428,234 @@ endfunc - .unreq ST3 - .unreq I - .unreq PSAMP -+ -+/********************************************************************/ -+ -+PSA .req a1 // samples -+PCO .req a2 // coeffs -+PBL .req a3 // bypassed_lsbs -+INDEX .req a4 -+CO0 .req v1 -+CO1 .req v2 -+CO2 .req v3 -+CO3 .req v4 -+SA0 .req v5 -+SA1 .req v6 -+SA2 .req sl -+SA3 .req fp -+AC0 .req ip -+AC1 .req lr -+NOISE .req SA0 -+LSB .req SA1 -+DCH .req SA2 // dest_ch -+MASK .req SA3 -+ -+ // INDEX is used as follows: -+ // bits 0..6 index2 (values up to 17, but wider so that we can -+ // add to index field without needing to mask) -+ // bits 7..14 i (values up to 160) -+ // bit 15 underflow detect for i -+ // bits 25..31 (if access_unit_size_pow2 == 128) \ index -+ // bits 26..31 (if access_unit_size_pow2 == 64) / -+ -+.macro implement_rematrix shift, index_mask, mask_minus1, maxchan -+ .if \maxchan == 1 -+ // We can just leave the coefficients in registers in this case -+ ldrd CO0, CO1, [PCO] -+ .endif -+1: -+ .if \maxchan == 1 -+ ldrd SA0, SA1, [PSA] -+ smull AC0, AC1, CO0, SA0 -+ .elseif \maxchan == 5 -+ ldr CO0, [PCO, #0] -+ ldr SA0, [PSA, #0] -+ ldr CO1, [PCO, #4] -+ ldr SA1, [PSA, #4] -+ ldrd CO2, CO3, [PCO, #8] -+ smull AC0, AC1, CO0, SA0 -+ ldrd SA2, SA3, [PSA, #8] -+ smlal AC0, AC1, CO1, SA1 -+ ldrd CO0, CO1, [PCO, #16] -+ smlal AC0, AC1, CO2, SA2 -+ ldrd SA0, SA1, [PSA, #16] -+ smlal AC0, AC1, CO3, SA3 -+ smlal AC0, AC1, CO0, SA0 -+ .else // \maxchan == 7 -+ ldr CO2, [PCO, #0] -+ ldr SA2, [PSA, #0] -+ ldr CO3, [PCO, #4] -+ ldr SA3, [PSA, #4] -+ ldrd CO0, CO1, [PCO, #8] -+ smull AC0, AC1, CO2, SA2 -+ ldrd SA0, SA1, [PSA, #8] -+ smlal AC0, AC1, CO3, SA3 -+ ldrd CO2, CO3, [PCO, #16] -+ smlal AC0, AC1, CO0, SA0 -+ ldrd SA2, SA3, [PSA, #16] -+ smlal AC0, AC1, CO1, SA1 -+ ldrd CO0, CO1, [PCO, #24] -+ smlal AC0, AC1, CO2, SA2 -+ ldrd SA0, SA1, [PSA, #24] -+ smlal AC0, AC1, CO3, SA3 -+ smlal AC0, AC1, CO0, SA0 -+ .endif -+ ldm sp, {NOISE, DCH, MASK} -+ smlal AC0, AC1, CO1, SA1 -+ .if \shift != 0 -+ .if \index_mask == 63 -+ add NOISE, NOISE, INDEX, lsr #32-6 -+ ldrb LSB, [PBL], #MAX_CHANNELS -+ ldrsb NOISE, [NOISE] -+ add INDEX, INDEX, INDEX, lsl #32-6 -+ .else // \index_mask == 127 -+ add NOISE, NOISE, INDEX, lsr #32-7 -+ ldrb LSB, [PBL], #MAX_CHANNELS -+ ldrsb NOISE, [NOISE] -+ add INDEX, INDEX, INDEX, lsl #32-7 -+ .endif -+ sub INDEX, INDEX, #1<<7 -+ adds AC0, AC0, NOISE, lsl #\shift + 7 -+ adc AC1, AC1, NOISE, asr #31 -+ .else -+ ldrb LSB, [PBL], #MAX_CHANNELS -+ sub INDEX, INDEX, #1<<7 -+ .endif -+ add PSA, PSA, #MAX_CHANNELS*4 -+ mov AC0, AC0, lsr #14 -+ orr AC0, AC0, AC1, lsl #18 -+ .if !\mask_minus1 -+ and AC0, AC0, MASK -+ .endif -+ add AC0, AC0, LSB -+ tst INDEX, #1<<15 -+ str AC0, [PSA, DCH, lsl #2] // DCH is precompensated for the early increment of PSA -+ beq 1b -+ b 98f -+.endm -+ -+.macro switch_on_maxchan shift, index_mask, mask_minus1 -+ cmp v4, #5 -+ blo 51f -+ beq 50f -+ implement_rematrix \shift, \index_mask, \mask_minus1, 7 -+50: implement_rematrix \shift, \index_mask, \mask_minus1, 5 -+51: implement_rematrix \shift, \index_mask, \mask_minus1, 1 -+.endm -+ -+.macro switch_on_mask shift, index_mask -+ cmp sl, #-1 -+ bne 40f -+ switch_on_maxchan \shift, \index_mask, 1 -+40: switch_on_maxchan \shift, \index_mask, 0 -+.endm -+ -+.macro switch_on_au_size shift -+ .if \shift == 0 -+ switch_on_mask \shift, undefined -+ .else -+ teq v6, #64 -+ bne 30f -+ orr INDEX, INDEX, v1, lsl #32-6 -+ switch_on_mask \shift, 63 -+30: orr INDEX, INDEX, v1, lsl #32-7 -+ switch_on_mask \shift, 127 -+ .endif -+.endm -+ -+/* void ff_mlp_rematrix_channel_arm(int32_t *samples, -+ * const int32_t *coeffs, -+ * const uint8_t *bypassed_lsbs, -+ * const int8_t *noise_buffer, -+ * int index, -+ * unsigned int dest_ch, -+ * uint16_t blockpos, -+ * unsigned int maxchan, -+ * int matrix_noise_shift, -+ * int access_unit_size_pow2, -+ * int32_t mask); -+ */ -+function ff_mlp_rematrix_channel_arm, export=1 -+ push {v1-fp,lr} -+ add v1, sp, #9*4 // point at arguments on stack -+ ldm v1, {v1-sl} -+ teq v4, #1 -+ teqne v4, #5 -+ teqne v4, #7 -+ bne 99f -+ teq v6, #64 -+ teqne v6, #128 -+ bne 99f -+ sub v2, v2, #MAX_CHANNELS -+ push {a4,v2,sl} // initialise NOISE,DCH,MASK; make sp dword-aligned -+ movs INDEX, v3, lsl #7 -+ beq 98f // just in case, do nothing if blockpos = 0 -+ subs INDEX, INDEX, #1<<7 // offset by 1 so we borrow at the right time -+ adc lr, v1, v1 // calculate index2 (C was set by preceding subs) -+ orr INDEX, INDEX, lr -+ // Switch on matrix_noise_shift: values 0 and 1 are -+ // disproportionately common so do those in a form the branch -+ // predictor can accelerate. Values can only go up to 15. -+ cmp v5, #1 -+ beq 11f -+ blo 10f -+ ldr pc, [pc, v5, lsl #2] -+ .word 0 -+ .word 0 -+ .word 0 -+ .word 12f -+ .word 13f -+ .word 14f -+ .word 15f -+ .word 16f -+ .word 17f -+ .word 18f -+ .word 19f -+ .word 20f -+ .word 21f -+ .word 22f -+ .word 23f -+ .word 24f -+ .word 25f -+10: switch_on_au_size 0 -+11: switch_on_au_size 1 -+12: switch_on_au_size 2 -+13: switch_on_au_size 3 -+14: switch_on_au_size 4 -+15: switch_on_au_size 5 -+16: switch_on_au_size 6 -+17: switch_on_au_size 7 -+18: switch_on_au_size 8 -+19: switch_on_au_size 9 -+20: switch_on_au_size 10 -+21: switch_on_au_size 11 -+22: switch_on_au_size 12 -+23: switch_on_au_size 13 -+24: switch_on_au_size 14 -+25: switch_on_au_size 15 -+ -+98: add sp, sp, #3*4 -+ pop {v1-fp,pc} -+99: // Can't handle these parameters, drop back to C -+ pop {v1-fp,lr} -+ b X(ff_mlp_rematrix_channel) -+endfunc -+ -+ .unreq PSA -+ .unreq PCO -+ .unreq PBL -+ .unreq INDEX -+ .unreq CO0 -+ .unreq CO1 -+ .unreq CO2 -+ .unreq CO3 -+ .unreq SA0 -+ .unreq SA1 -+ .unreq SA2 -+ .unreq SA3 -+ .unreq AC0 -+ .unreq AC1 -+ .unreq NOISE -+ .unreq LSB -+ .unreq DCH -+ .unreq MASK -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -index f0ea285..268dfdd 100644 ---- a/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -@@ -29,8 +29,20 @@ void ff_mlp_filter_channel_arm(int32_t *state, const int32_t *coeff, - int firorder, int iirorder, - unsigned int filter_shift, int32_t mask, - int blocksize, int32_t *sample_buffer); -+void ff_mlp_rematrix_channel_arm(int32_t *samples, -+ const int32_t *coeffs, -+ const uint8_t *bypassed_lsbs, -+ const int8_t *noise_buffer, -+ int index, -+ unsigned int dest_ch, -+ uint16_t blockpos, -+ unsigned int maxchan, -+ int matrix_noise_shift, -+ int access_unit_size_pow2, -+ int32_t mask); - - av_cold void ff_mlpdsp_init_arm(MLPDSPContext *c) - { - c->mlp_filter_channel = ff_mlp_filter_channel_arm; -+ c->mlp_rematrix_channel = ff_mlp_rematrix_channel_arm; - } --- -1.9.3 - - -From 034e1a8920aec0fa36ffc7da8f63e48c68364e15 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:50:36 +0000 -Subject: [PATCH 11/94] truehd: tune VLC decoding for ARM. - -Profiling on a Raspberry Pi revealed the best performance to correspond -with VLC_BITS = 5. Results for overall audio decode and the get_vlc2 function -in particular are as follows: - - Before After - Mean StdDev Mean StdDev Confidence Change -6:2 total 348.8 20.1 339.6 15.1 88.8% +2.7% (insignificant) -6:2 function 38.1 8.1 26.4 4.1 100.0% +44.5% -8:2 total 339.1 15.4 324.5 15.5 99.4% +4.5% -8:2 function 33.8 7.0 27.3 5.6 99.7% +23.6% -6:6 total 604.6 20.8 572.8 20.6 100.0% +5.6% -6:6 function 95.8 8.4 68.9 8.2 100.0% +39.1% -8:8 total 766.4 17.6 741.5 21.2 100.0% +3.4% -8:8 function 106.0 11.4 86.1 9.9 100.0% +23.1% ---- - lib/ffmpeg/libavcodec/mlpdec.c | 13 ++++++++++--- - 1 file changed, 10 insertions(+), 3 deletions(-) - -diff --git a/lib/ffmpeg/libavcodec/mlpdec.c b/lib/ffmpeg/libavcodec/mlpdec.c -index e9343a5..a998dac 100644 ---- a/lib/ffmpeg/libavcodec/mlpdec.c -+++ b/lib/ffmpeg/libavcodec/mlpdec.c -@@ -36,9 +36,16 @@ - #include "mlp_parser.h" - #include "mlpdsp.h" - #include "mlp.h" -+#include "config.h" - - /** number of bits used for VLC lookup - longest Huffman code is 9 */ -+#if ARCH_ARM == 1 -+#define VLC_BITS 5 -+#define VLC_STATIC_SIZE 64 -+#else - #define VLC_BITS 9 -+#define VLC_STATIC_SIZE 512 -+#endif - - typedef struct SubStream { - /// Set if a valid restart header has been read. Otherwise the substream cannot be decoded. -@@ -190,13 +197,13 @@ static av_cold void init_static(void) - if (!huff_vlc[0].bits) { - INIT_VLC_STATIC(&huff_vlc[0], VLC_BITS, 18, - &ff_mlp_huffman_tables[0][0][1], 2, 1, -- &ff_mlp_huffman_tables[0][0][0], 2, 1, 512); -+ &ff_mlp_huffman_tables[0][0][0], 2, 1, VLC_STATIC_SIZE); - INIT_VLC_STATIC(&huff_vlc[1], VLC_BITS, 16, - &ff_mlp_huffman_tables[1][0][1], 2, 1, -- &ff_mlp_huffman_tables[1][0][0], 2, 1, 512); -+ &ff_mlp_huffman_tables[1][0][0], 2, 1, VLC_STATIC_SIZE); - INIT_VLC_STATIC(&huff_vlc[2], VLC_BITS, 15, - &ff_mlp_huffman_tables[2][0][1], 2, 1, -- &ff_mlp_huffman_tables[2][0][0], 2, 1, 512); -+ &ff_mlp_huffman_tables[2][0][0], 2, 1, VLC_STATIC_SIZE); - } - - ff_mlp_init_crc(); --- -1.9.3 - - -From 25ab0401ebb7f035bcf7291452e6772a9c7b233a Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:54:07 +0000 -Subject: [PATCH 12/94] truehd: break out part of output_data into - platform-specific callback. - -Verified with profiling that this doesn't have a measurable effect upon -overall performance. ---- - lib/ffmpeg/libavcodec/mlpdec.c | 40 +++++++++++++++++++++++----------------- - lib/ffmpeg/libavcodec/mlpdsp.c | 36 ++++++++++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/mlpdsp.h | 22 ++++++++++++++++++++++ - 3 files changed, 81 insertions(+), 17 deletions(-) - -diff --git a/lib/ffmpeg/libavcodec/mlpdec.c b/lib/ffmpeg/libavcodec/mlpdec.c -index a998dac..6d7c803 100644 ---- a/lib/ffmpeg/libavcodec/mlpdec.c -+++ b/lib/ffmpeg/libavcodec/mlpdec.c -@@ -359,6 +359,10 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb) - m->avctx->sample_fmt = AV_SAMPLE_FMT_S32; - else - m->avctx->sample_fmt = AV_SAMPLE_FMT_S16; -+ m->dsp.mlp_pack_output = m->dsp.mlp_select_pack_output(m->substream[m->max_decoded_substream].max_matrix_channel, -+ m->avctx->sample_fmt == AV_SAMPLE_FMT_S32, -+ m->substream[m->max_decoded_substream].ch_assign, -+ m->substream[m->max_decoded_substream].output_shift); - - m->params_valid = 1; - for (substr = 0; substr < MAX_SUBSTREAMS; substr++) -@@ -553,6 +557,10 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp, - if (substr == m->max_decoded_substream) { - m->avctx->channels = s->max_matrix_channel + 1; - m->avctx->channel_layout = s->ch_layout; -+ m->dsp.mlp_pack_output = m->dsp.mlp_select_pack_output(s->max_matrix_channel, -+ m->avctx->sample_fmt == AV_SAMPLE_FMT_S32, -+ s->ch_assign, -+ s->output_shift); - - if (m->avctx->codec_id == AV_CODEC_ID_MLP && m->needs_reordering) { - if (m->avctx->channel_layout == (AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY) || -@@ -798,9 +806,15 @@ static int read_decoding_params(MLPDecodeContext *m, GetBitContext *gbp, - return ret; - - if (s->param_presence_flags & PARAM_OUTSHIFT) -- if (get_bits1(gbp)) -+ if (get_bits1(gbp)) { - for (ch = 0; ch <= s->max_matrix_channel; ch++) - s->output_shift[ch] = get_sbits(gbp, 4); -+ if (substr == m->max_decoded_substream) -+ m->dsp.mlp_pack_output = m->dsp.mlp_select_pack_output(s->max_matrix_channel, -+ m->avctx->sample_fmt == AV_SAMPLE_FMT_S32, -+ s->ch_assign, -+ s->output_shift); -+ } - - if (s->param_presence_flags & PARAM_QUANTSTEP) - if (get_bits1(gbp)) -@@ -999,9 +1013,6 @@ static int output_data(MLPDecodeContext *m, unsigned int substr, - { - AVCodecContext *avctx = m->avctx; - SubStream *s = &m->substream[substr]; -- unsigned int i, out_ch = 0; -- int32_t *data_32; -- int16_t *data_16; - int ret; - int is32 = (m->avctx->sample_fmt == AV_SAMPLE_FMT_S32); - -@@ -1021,19 +1032,14 @@ static int output_data(MLPDecodeContext *m, unsigned int substr, - av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); - return ret; - } -- data_32 = (int32_t *)frame->data[0]; -- data_16 = (int16_t *)frame->data[0]; -- -- for (i = 0; i < s->blockpos; i++) { -- for (out_ch = 0; out_ch <= s->max_matrix_channel; out_ch++) { -- int mat_ch = s->ch_assign[out_ch]; -- int32_t sample = m->sample_buffer[i][mat_ch] -- << s->output_shift[mat_ch]; -- s->lossless_check_data ^= (sample & 0xffffff) << mat_ch; -- if (is32) *data_32++ = sample << 8; -- else *data_16++ = sample >> 8; -- } -- } -+ s->lossless_check_data = m->dsp.mlp_pack_output(s->lossless_check_data, -+ m->sample_buffer, -+ frame->data[0], -+ s->blockpos, -+ s->max_matrix_channel, -+ is32, -+ s->ch_assign, -+ s->output_shift); - - *got_frame_ptr = 1; - -diff --git a/lib/ffmpeg/libavcodec/mlpdsp.c b/lib/ffmpeg/libavcodec/mlpdsp.c -index 1f912fb..2bb5cec 100644 ---- a/lib/ffmpeg/libavcodec/mlpdsp.c -+++ b/lib/ffmpeg/libavcodec/mlpdsp.c -@@ -88,10 +88,46 @@ void ff_mlp_rematrix_channel(int32_t *samples, - } - } - -+static int32_t (*mlp_select_pack_output(uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift))(int32_t, int32_t (*)[], void *, uint16_t, uint8_t, int, uint8_t*, int8_t *) -+{ -+ return ff_mlp_pack_output; -+} -+ -+int32_t ff_mlp_pack_output(int32_t lossless_check_data, -+ int32_t (*sample_buffer)[MAX_CHANNELS], -+ void *data, -+ uint16_t blockpos, -+ uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift) -+{ -+ unsigned int i, out_ch = 0; -+ int32_t *data_32 = (int32_t *)data; -+ int16_t *data_16 = (int16_t *)data; -+ -+ for (i = 0; i < blockpos; i++) { -+ for (out_ch = 0; out_ch <= max_matrix_channel; out_ch++) { -+ int mat_ch = ch_assign[out_ch]; -+ int32_t sample = sample_buffer[i][mat_ch] -+ << output_shift[mat_ch]; -+ lossless_check_data ^= (sample & 0xffffff) << mat_ch; -+ if (is32) *data_32++ = sample << 8; -+ else *data_16++ = sample >> 8; -+ } -+ } -+ return lossless_check_data; -+} -+ - av_cold void ff_mlpdsp_init(MLPDSPContext *c) - { - c->mlp_filter_channel = ff_mlp_filter_channel; - c->mlp_rematrix_channel = ff_mlp_rematrix_channel; -+ c->mlp_select_pack_output = mlp_select_pack_output; -+ c->mlp_pack_output = ff_mlp_pack_output; - if (ARCH_X86) - ff_mlpdsp_init_x86(c); - } -diff --git a/lib/ffmpeg/libavcodec/mlpdsp.h b/lib/ffmpeg/libavcodec/mlpdsp.h -index f98e9be..5bc901f 100644 ---- a/lib/ffmpeg/libavcodec/mlpdsp.h -+++ b/lib/ffmpeg/libavcodec/mlpdsp.h -@@ -23,6 +23,7 @@ - #define AVCODEC_MLPDSP_H - - #include <stdint.h> -+#include "mlp.h" - - void ff_mlp_rematrix_channel(int32_t *samples, - const int32_t *coeffs, -@@ -36,6 +37,15 @@ void ff_mlp_rematrix_channel(int32_t *samples, - int access_unit_size_pow2, - int32_t mask); - -+int32_t ff_mlp_pack_output(int32_t lossless_check_data, -+ int32_t (*sample_buffer)[MAX_CHANNELS], -+ void *data, -+ uint16_t blockpos, -+ uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift); -+ - typedef struct MLPDSPContext { - void (*mlp_filter_channel)(int32_t *state, const int32_t *coeff, - int firorder, int iirorder, -@@ -52,6 +62,18 @@ typedef struct MLPDSPContext { - int matrix_noise_shift, - int access_unit_size_pow2, - int32_t mask); -+ int32_t (*(*mlp_select_pack_output)(uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift))(int32_t, int32_t (*)[], void *, uint16_t, uint8_t, int, uint8_t*, int8_t *); -+ int32_t (*mlp_pack_output)(int32_t lossless_check_data, -+ int32_t (*sample_buffer)[MAX_CHANNELS], -+ void *data, -+ uint16_t blockpos, -+ uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift); - } MLPDSPContext; - - void ff_mlpdsp_init(MLPDSPContext *c); --- -1.9.3 - - -From bdefac00779c5601816f949353d9bbeb3b199611 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 19 Mar 2014 17:54:59 +0000 -Subject: [PATCH 13/94] truehd: add hand-scheduled ARM asm version of - ff_mlp_pack_output. - -Profiling results for overall decode and the output_data function in -particular are as follows: - - Before After - Mean StdDev Mean StdDev Confidence Change -6:2 total 339.6 15.1 329.3 16.0 95.8% +3.1% (insignificant) -6:2 function 24.6 6.0 9.9 3.1 100.0% +148.5% -8:2 total 324.5 15.5 323.6 14.3 15.2% +0.3% (insignificant) -8:2 function 20.4 3.9 9.9 3.4 100.0% +104.7% -6:6 total 572.8 20.6 539.9 24.2 100.0% +6.1% -6:6 function 54.5 5.6 16.0 3.8 100.0% +240.9% -8:8 total 741.5 21.2 702.5 18.5 100.0% +5.6% -8:8 function 63.9 7.6 18.4 4.8 100.0% +247.3% - -The assembly version has also been tested with a fuzz tester to ensure that -any combinations of inputs not exercised by my available test streams still -generate mathematically identical results to the C version. ---- - lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S | 503 ++++++++++++++++++++++++++++ - lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c | 64 ++++ - 2 files changed, 567 insertions(+) - -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -index 10008fe..338d323 100644 ---- a/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_arm.S -@@ -98,6 +98,26 @@ A .endif - .endif - .endm - -+.macro loadregoffsh2 group, index, base, offgroup, offindex -+ .altmacro -+ loadregoffsh2_ \group, %(\index), \base, \offgroup, %(\offindex) -+ .noaltmacro -+.endm -+ -+.macro loadregoffsh2_ group, index, base, offgroup, offindex -+ ldr \group\index, [\base, \offgroup\offindex, lsl #2] -+.endm -+ -+.macro eorlslreg check, data, group, index -+ .altmacro -+ eorlslreg_ \check, \data, \group, %(\index) -+ .noaltmacro -+.endm -+ -+.macro eorlslreg_ check, data, group, index -+ eor \check, \check, \data, lsl \group\index -+.endm -+ - // A macro to update the load register number and load offsets - - .macro inc howmany -@@ -659,3 +679,486 @@ endfunc - .unreq LSB - .unreq DCH - .unreq MASK -+ -+/********************************************************************/ -+ -+.macro decr_modulo var, by, modulus -+ .set \var, \var - \by -+ .if \var == 0 -+ .set \var, \modulus -+ .endif -+.endm -+ -+ .macro load_group1 size, channels, r0, r1, r2, r3, pointer_dead=0 -+ .if \size == 2 -+ ldrd \r0, \r1, [IN], #(\size + 8 - \channels) * 4 -+ .else // size == 4 -+ .if IDX1 > 4 || \channels==8 -+ ldm IN!, {\r0, \r1, \r2, \r3} -+ .else -+ ldm IN, {\r0, \r1, \r2, \r3} -+ .if !\pointer_dead -+ add IN, IN, #(4 + 8 - \channels) * 4 -+ .endif -+ .endif -+ .endif -+ decr_modulo IDX1, \size, \channels -+ .endm -+ -+ .macro load_group2 size, channels, r0, r1, r2, r3, pointer_dead=0 -+ .if \size == 2 -+ .if IDX1 > 2 -+ ldm IN!, {\r2, \r3} -+ .else -+//A .ifc \r2, ip -+//A .if \pointer_dead -+//A ldm IN, {\r2, \r3} -+//A .else -+//A ldr \r2, [IN], #4 -+//A ldr \r3, [IN], #(\size - 1 + 8 - \channels) * 4 -+//A .endif -+//A .else -+ ldrd \r2, \r3, [IN], #(\size + 8 - \channels) * 4 -+//A .endif -+ .endif -+ .endif -+ decr_modulo IDX1, \size, \channels -+ .endm -+ -+.macro implement_pack inorder, channels, shift -+.if \inorder -+.ifc \shift, mixed -+ -+CHECK .req a1 -+IN .req a2 -+OUT .req a3 -+COUNT .req a4 -+DAT0 .req v1 -+DAT1 .req v2 -+DAT2 .req v3 -+DAT3 .req v4 -+SHIFT0 .req v5 -+SHIFT1 .req v6 -+SHIFT2 .req sl -+SHIFT3 .req fp -+SHIFT4 .req ip -+SHIFT5 .req lr -+ -+ .macro output4words -+ .set SIZE_GROUP1, IDX1 -+ .if SIZE_GROUP1 > 4 -+ .set SIZE_GROUP1, 4 -+ .endif -+ .set SIZE_GROUP2, 4 - SIZE_GROUP1 -+ load_group1 SIZE_GROUP1, \channels, DAT0, DAT1, DAT2, DAT3 -+ load_group2 SIZE_GROUP2, \channels, DAT0, DAT1, DAT2, DAT3 -+ .if \channels == 2 -+ lsl DAT0, SHIFT0 -+ lsl DAT1, SHIFT1 -+ lsl DAT2, SHIFT0 -+ lsl DAT3, SHIFT1 -+ .elseif \channels == 6 -+ .if IDX2 == 6 -+ lsl DAT0, SHIFT0 -+ lsl DAT1, SHIFT1 -+ lsl DAT2, SHIFT2 -+ lsl DAT3, SHIFT3 -+ .elseif IDX2 == 2 -+ lsl DAT0, SHIFT4 -+ lsl DAT1, SHIFT5 -+ lsl DAT2, SHIFT0 -+ lsl DAT3, SHIFT1 -+ .else // IDX2 == 4 -+ lsl DAT0, SHIFT2 -+ lsl DAT1, SHIFT3 -+ lsl DAT2, SHIFT4 -+ lsl DAT3, SHIFT5 -+ .endif -+ .elseif \channels == 8 -+ .if IDX2 == 8 -+ uxtb SHIFT0, SHIFT4, ror #0 -+ uxtb SHIFT1, SHIFT4, ror #8 -+ uxtb SHIFT2, SHIFT4, ror #16 -+ uxtb SHIFT3, SHIFT4, ror #24 -+ .else -+ uxtb SHIFT0, SHIFT5, ror #0 -+ uxtb SHIFT1, SHIFT5, ror #8 -+ uxtb SHIFT2, SHIFT5, ror #16 -+ uxtb SHIFT3, SHIFT5, ror #24 -+ .endif -+ lsl DAT0, SHIFT0 -+ lsl DAT1, SHIFT1 -+ lsl DAT2, SHIFT2 -+ lsl DAT3, SHIFT3 -+ .endif -+ eor CHECK, CHECK, DAT0, lsr #8 - (\channels - IDX2) -+ eor CHECK, CHECK, DAT1, lsr #7 - (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ eor CHECK, CHECK, DAT2, lsr #8 - (\channels - IDX2) -+ eor CHECK, CHECK, DAT3, lsr #7 - (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ stm OUT!, {DAT0 - DAT3} -+ .endm -+ -+ .set WORDS_PER_LOOP, \channels // calculate LCM (channels, 4) -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP * 4 -+ .set SAMPLES_PER_LOOP, WORDS_PER_LOOP / \channels -+ -+function ff_mlp_pack_output_inorder_\channels\()ch_mixedshift_arm, export=1 -+ .if SAMPLES_PER_LOOP > 1 -+ tst COUNT, #SAMPLES_PER_LOOP - 1 // always seems to be in practice -+ bne X(ff_mlp_pack_output) // but just in case, branch to C implementation if not -+ .endif -+ teq COUNT, #0 -+ bxeq lr -+ push {v1-v6,sl,fp,lr} -+ ldr SHIFT0, [sp, #(9+3)*4] // get output_shift from stack -+ ldr SHIFT1, =0x08080808 -+ ldr SHIFT4, [SHIFT0] -+ .if \channels == 2 -+ uadd8 SHIFT4, SHIFT4, SHIFT1 // increase all shifts by 8 -+ uxtb SHIFT0, SHIFT4, ror #0 -+ uxtb SHIFT1, SHIFT4, ror #8 -+ .else -+ ldr SHIFT5, [SHIFT0, #4] -+ uadd8 SHIFT4, SHIFT4, SHIFT1 // increase all shifts by 8 -+ uadd8 SHIFT5, SHIFT5, SHIFT1 -+ .if \channels == 6 -+ uxtb SHIFT0, SHIFT4, ror #0 -+ uxtb SHIFT1, SHIFT4, ror #8 -+ uxtb SHIFT2, SHIFT4, ror #16 -+ uxtb SHIFT3, SHIFT4, ror #24 -+ uxtb SHIFT4, SHIFT5, ror #0 -+ uxtb SHIFT5, SHIFT5, ror #8 -+ .endif -+ .endif -+ .set IDX1, \channels -+ .set IDX2, \channels -+0: -+ .rept WORDS_PER_LOOP / 4 -+ output4words -+ .endr -+ subs COUNT, COUNT, #SAMPLES_PER_LOOP -+ bne 0b -+ pop {v1-v6,sl,fp,pc} -+ .ltorg -+endfunc -+ .purgem output4words -+ -+ .unreq CHECK -+ .unreq IN -+ .unreq OUT -+ .unreq COUNT -+ .unreq DAT0 -+ .unreq DAT1 -+ .unreq DAT2 -+ .unreq DAT3 -+ .unreq SHIFT0 -+ .unreq SHIFT1 -+ .unreq SHIFT2 -+ .unreq SHIFT3 -+ .unreq SHIFT4 -+ .unreq SHIFT5 -+ -+.else // not mixed -+ -+CHECK .req a1 -+IN .req a2 -+OUT .req a3 -+COUNT .req a4 -+DAT0 .req v1 -+DAT1 .req v2 -+DAT2 .req v3 -+DAT3 .req v4 -+DAT4 .req v5 -+DAT5 .req v6 -+DAT6 .req sl // use these rather than the otherwise unused -+DAT7 .req fp // ip and lr so that we can load them usinf LDRD -+ -+ .macro output4words tail, head, r0, r1, r2, r3, r4, r5, r6, r7, pointer_dead=0 -+ .if \head -+ .set SIZE_GROUP1, IDX1 -+ .if SIZE_GROUP1 > 4 -+ .set SIZE_GROUP1, 4 -+ .endif -+ .set SIZE_GROUP2, 4 - SIZE_GROUP1 -+ load_group1 SIZE_GROUP1, \channels, \r0, \r1, \r2, \r3, \pointer_dead -+ .endif -+ .if \tail -+ eor CHECK, CHECK, \r4, lsr #8 - (\channels - IDX2) -+ eor CHECK, CHECK, \r5, lsr #7 - (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ .endif -+ .if \head -+ load_group2 SIZE_GROUP2, \channels, \r0, \r1, \r2, \r3, \pointer_dead -+ .endif -+ .if \tail -+ eor CHECK, CHECK, \r6, lsr #8 - (\channels - IDX2) -+ eor CHECK, CHECK, \r7, lsr #7 - (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ stm OUT!, {\r4, \r5, \r6, \r7} -+ .endif -+ .if \head -+ lsl \r0, #8 + \shift -+ lsl \r1, #8 + \shift -+ lsl \r2, #8 + \shift -+ lsl \r3, #8 + \shift -+ .endif -+ .endm -+ -+ .set WORDS_PER_LOOP, \channels // calculate LCM (channels, 8) -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP * 8 -+ .set SAMPLES_PER_LOOP, WORDS_PER_LOOP / \channels -+ -+function ff_mlp_pack_output_inorder_\channels\()ch_\shift\()shift_arm, export=1 -+ .if SAMPLES_PER_LOOP > 1 -+ tst COUNT, #SAMPLES_PER_LOOP - 1 // always seems to be in practice -+ bne X(ff_mlp_pack_output) // but just in case, branch to C implementation if not -+ .endif -+ subs COUNT, COUNT, #SAMPLES_PER_LOOP -+ bxlo lr -+ push {v1-v6,sl,fp,lr} -+ .set IDX1, \channels -+ .set IDX2, \channels -+ output4words 0, 1, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7 -+0: beq 1f -+ .rept WORDS_PER_LOOP / 8 -+ output4words 1, 1, DAT4, DAT5, DAT6, DAT7, DAT0, DAT1, DAT2, DAT3 -+ output4words 1, 1, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7 -+ .endr -+ subs COUNT, COUNT, #SAMPLES_PER_LOOP -+ bne 0b -+1: -+ .rept WORDS_PER_LOOP / 8 - 1 -+ output4words 1, 1, DAT4, DAT5, DAT6, DAT7, DAT0, DAT1, DAT2, DAT3 -+ output4words 1, 1, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7 -+ .endr -+ output4words 1, 1, DAT4, DAT5, DAT6, DAT7, DAT0, DAT1, DAT2, DAT3, pointer_dead=1 -+ output4words 1, 0, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7 -+ pop {v1-v6,sl,fp,pc} -+endfunc -+ .purgem output4words -+ -+ .unreq CHECK -+ .unreq IN -+ .unreq OUT -+ .unreq COUNT -+ .unreq DAT0 -+ .unreq DAT1 -+ .unreq DAT2 -+ .unreq DAT3 -+ .unreq DAT4 -+ .unreq DAT5 -+ .unreq DAT6 -+ .unreq DAT7 -+ -+.endif // mixed -+.else // not inorder -+.ifc \shift, mixed -+ -+// This case not currently handled -+ -+.else // not mixed -+ -+CHECK .req a1 -+IN .req a2 -+OUT .req a3 -+COUNT .req a4 -+DAT0 .req v1 -+DAT1 .req v2 -+DAT2 .req v3 -+DAT3 .req v4 -+CHAN0 .req v5 -+CHAN1 .req v6 -+CHAN2 .req sl -+CHAN3 .req fp -+CHAN4 .req ip -+CHAN5 .req lr -+ -+ .macro output4words -+ .if \channels == 8 -+ .if IDX1 == 8 -+ uxtb CHAN0, CHAN4, ror #0 -+ uxtb CHAN1, CHAN4, ror #8 -+ uxtb CHAN2, CHAN4, ror #16 -+ uxtb CHAN3, CHAN4, ror #24 -+ .else -+ uxtb CHAN0, CHAN5, ror #0 -+ uxtb CHAN1, CHAN5, ror #8 -+ uxtb CHAN2, CHAN5, ror #16 -+ uxtb CHAN3, CHAN5, ror #24 -+ .endif -+ ldr DAT0, [IN, CHAN0, lsl #2] -+ ldr DAT1, [IN, CHAN1, lsl #2] -+ ldr DAT2, [IN, CHAN2, lsl #2] -+ ldr DAT3, [IN, CHAN3, lsl #2] -+ .if IDX1 == 4 -+ add IN, IN, #8*4 -+ .endif -+ decr_modulo IDX1, 4, \channels -+ .else -+ .set SIZE_GROUP1, IDX1 -+ .if SIZE_GROUP1 > 4 -+ .set SIZE_GROUP1, 4 -+ .endif -+ .set SIZE_GROUP2, 4 - SIZE_GROUP1 -+ .if SIZE_GROUP1 == 2 -+ loadregoffsh2 DAT, 0, IN, CHAN, 0 + (\channels - IDX1) -+ loadregoffsh2 DAT, 1, IN, CHAN, 1 + (\channels - IDX1) -+ add IN, IN, #8*4 -+ .else // SIZE_GROUP1 == 4 -+ loadregoffsh2 DAT, 0, IN, CHAN, 0 + (\channels - IDX1) -+ loadregoffsh2 DAT, 1, IN, CHAN, 1 + (\channels - IDX1) -+ loadregoffsh2 DAT, 2, IN, CHAN, 2 + (\channels - IDX1) -+ loadregoffsh2 DAT, 3, IN, CHAN, 3 + (\channels - IDX1) -+ .if IDX1 == 4 -+ add IN, IN, #8*4 -+ .endif -+ .endif -+ decr_modulo IDX1, SIZE_GROUP1, \channels -+ .if SIZE_GROUP2 == 2 -+ loadregoffsh2 DAT, 2, IN, CHAN, 0 + (\channels - IDX1) -+ loadregoffsh2 DAT, 3, IN, CHAN, 1 + (\channels - IDX1) -+ .if IDX1 == 2 -+ add IN, IN, #8*4 -+ .endif -+ .endif -+ decr_modulo IDX1, SIZE_GROUP2, \channels -+ .endif -+ .if \channels == 8 // in this case we can corrupt CHAN0-3 -+ rsb CHAN0, CHAN0, #8 -+ rsb CHAN1, CHAN1, #8 -+ rsb CHAN2, CHAN2, #8 -+ rsb CHAN3, CHAN3, #8 -+ lsl DAT0, #8 + \shift -+ lsl DAT1, #8 + \shift -+ lsl DAT2, #8 + \shift -+ lsl DAT3, #8 + \shift -+ eor CHECK, CHECK, DAT0, lsr CHAN0 -+ eor CHECK, CHECK, DAT1, lsr CHAN1 -+ eor CHECK, CHECK, DAT2, lsr CHAN2 -+ eor CHECK, CHECK, DAT3, lsr CHAN3 -+ .else -+ .if \shift != 0 -+ lsl DAT0, #\shift -+ lsl DAT1, #\shift -+ lsl DAT2, #\shift -+ lsl DAT3, #\shift -+ .endif -+ bic DAT0, DAT0, #0xff000000 -+ bic DAT1, DAT1, #0xff000000 -+ bic DAT2, DAT2, #0xff000000 -+ bic DAT3, DAT3, #0xff000000 -+ eorlslreg CHECK, DAT0, CHAN, 0 + (\channels - IDX2) -+ eorlslreg CHECK, DAT1, CHAN, 1 + (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ eorlslreg CHECK, DAT2, CHAN, 0 + (\channels - IDX2) -+ eorlslreg CHECK, DAT3, CHAN, 1 + (\channels - IDX2) -+ decr_modulo IDX2, 2, \channels -+ lsl DAT0, #8 -+ lsl DAT1, #8 -+ lsl DAT2, #8 -+ lsl DAT3, #8 -+ .endif -+ stm OUT!, {DAT0 - DAT3} -+ .endm -+ -+ .set WORDS_PER_LOOP, \channels // calculate LCM (channels, 4) -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .if (WORDS_PER_LOOP % 2) == 0 -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP / 2 -+ .endif -+ .set WORDS_PER_LOOP, WORDS_PER_LOOP * 4 -+ .set SAMPLES_PER_LOOP, WORDS_PER_LOOP / \channels -+ -+function ff_mlp_pack_output_outoforder_\channels\()ch_\shift\()shift_arm, export=1 -+ .if SAMPLES_PER_LOOP > 1 -+ tst COUNT, #SAMPLES_PER_LOOP - 1 // always seems to be in practice -+ bne X(ff_mlp_pack_output) // but just in case, branch to C implementation if not -+ .endif -+ teq COUNT, #0 -+ bxeq lr -+ push {v1-v6,sl,fp,lr} -+ ldr CHAN0, [sp, #(9+2)*4] // get ch_assign from stack -+ ldr CHAN4, [CHAN0] -+ .if \channels == 2 -+ uxtb CHAN0, CHAN4, ror #0 -+ uxtb CHAN1, CHAN4, ror #8 -+ .else -+ ldr CHAN5, [CHAN0, #4] -+ .if \channels == 6 -+ uxtb CHAN0, CHAN4, ror #0 -+ uxtb CHAN1, CHAN4, ror #8 -+ uxtb CHAN2, CHAN4, ror #16 -+ uxtb CHAN3, CHAN4, ror #24 -+ uxtb CHAN4, CHAN5, ror #0 -+ uxtb CHAN5, CHAN5, ror #8 -+ .endif -+ .endif -+ .set IDX1, \channels -+ .set IDX2, \channels -+0: -+ .rept WORDS_PER_LOOP / 4 -+ output4words -+ .endr -+ subs COUNT, COUNT, #SAMPLES_PER_LOOP -+ bne 0b -+ pop {v1-v6,sl,fp,pc} -+ .ltorg -+endfunc -+ .purgem output4words -+ -+ .unreq CHECK -+ .unreq IN -+ .unreq OUT -+ .unreq COUNT -+ .unreq DAT0 -+ .unreq DAT1 -+ .unreq DAT2 -+ .unreq DAT3 -+ .unreq CHAN0 -+ .unreq CHAN1 -+ .unreq CHAN2 -+ .unreq CHAN3 -+ .unreq CHAN4 -+ .unreq CHAN5 -+ -+.endif // mixed -+.endif // inorder -+.endm // implement_pack -+ -+.macro pack_channels inorder, channels -+ implement_pack \inorder, \channels, 0 -+ implement_pack \inorder, \channels, 1 -+ implement_pack \inorder, \channels, 2 -+ implement_pack \inorder, \channels, 3 -+ implement_pack \inorder, \channels, 4 -+ implement_pack \inorder, \channels, 5 -+ implement_pack \inorder, \channels, mixed -+.endm -+ -+.macro pack_order inorder -+ pack_channels \inorder, 2 -+ pack_channels \inorder, 6 -+ pack_channels \inorder, 8 -+.endm -+ -+ pack_order 0 -+ pack_order 1 -diff --git a/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -index 268dfdd..2d8b98d 100644 ---- a/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -+++ b/lib/ffmpeg/libavcodec/arm/mlpdsp_init_arm.c -@@ -41,8 +41,72 @@ void ff_mlp_rematrix_channel_arm(int32_t *samples, - int access_unit_size_pow2, - int32_t mask); - -+#define DECLARE_PACK(order,channels,shift) \ -+ int32_t ff_mlp_pack_output_##order##order_##channels##ch_##shift##shift_arm(int32_t, int32_t (*)[], void *, uint16_t, uint8_t, int, uint8_t*, int8_t *); -+#define ENUMERATE_PACK(order,channels,shift) \ -+ ff_mlp_pack_output_##order##order_##channels##ch_##shift##shift_arm, -+#define PACK_CHANNELS(macro,order,channels) \ -+ macro(order,channels,0) \ -+ macro(order,channels,1) \ -+ macro(order,channels,2) \ -+ macro(order,channels,3) \ -+ macro(order,channels,4) \ -+ macro(order,channels,5) \ -+ macro(order,channels,mixed) -+#define PACK_ORDER(macro,order) \ -+ PACK_CHANNELS(macro,order,2) \ -+ PACK_CHANNELS(macro,order,6) \ -+ PACK_CHANNELS(macro,order,8) -+#define PACK_ALL(macro) \ -+ PACK_ORDER(macro,outof) \ -+ PACK_ORDER(macro,in) -+PACK_ALL(DECLARE_PACK) -+ -+#define ff_mlp_pack_output_outoforder_2ch_mixedshift_arm 0 -+#define ff_mlp_pack_output_outoforder_6ch_mixedshift_arm 0 -+#define ff_mlp_pack_output_outoforder_8ch_mixedshift_arm 0 -+ -+static int32_t (*mlp_select_pack_output_arm(uint8_t max_matrix_channel, -+ int is32, -+ uint8_t *ch_assign, -+ int8_t *output_shift))(int32_t, int32_t (*)[], void *, uint16_t, uint8_t, int, uint8_t*, int8_t *) -+{ -+ int ch_index; -+ int shift = output_shift[0] < 0 || output_shift[0] > 5 ? 6 : output_shift[0]; -+ int inorder = 1; -+ static int32_t (*const routine[2*3*7])(int32_t, int32_t (*)[], void *, uint16_t, uint8_t, int, uint8_t*, int8_t *) = { -+ PACK_ALL(ENUMERATE_PACK) -+ }; -+ int i; -+ -+ if (!is32) // don't support 16-bit output (it's not used by TrueHD) -+ return ff_mlp_pack_output; -+ -+ switch (max_matrix_channel) { -+ case 1: ch_index = 0; break; -+ case 5: ch_index = 1; break; -+ case 7: ch_index = 2; break; -+ default: return ff_mlp_pack_output; -+ } -+ -+ for (i = 0; i <= max_matrix_channel; i++) { -+ if (shift != 6 && output_shift[i] != shift) -+ shift = 6; // indicate mixed shifts -+ if (ch_assign[i] != i) -+ inorder = 0; -+ } -+ if (shift == 6 && !inorder) -+ return ff_mlp_pack_output; // can't currently handle both an order array and a shift array -+ -+ return routine[(inorder*3+ch_index)*7+shift]; -+} -+ - av_cold void ff_mlpdsp_init_arm(MLPDSPContext *c) - { -+ int cpu_flags = av_get_cpu_flags(); -+ - c->mlp_filter_channel = ff_mlp_filter_channel_arm; - c->mlp_rematrix_channel = ff_mlp_rematrix_channel_arm; -+ if (cpu_flags & AV_CPU_FLAG_ARMV6) -+ c->mlp_select_pack_output = mlp_select_pack_output_arm; - } --- -1.9.3 - - -From 9af15bf0b7bc7940bd8bcc9ddae23178c9723bd6 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Thu, 14 Nov 2013 19:48:41 +0000 -Subject: [PATCH 14/94] More efficient infobool expression evaluator - -Expession infobools are evaluated at runtime from one or more single infobools -and a combination of boolean NOT, AND and OR operators. Previously, parsing -produced a vector of operands (leaf nodes) and operators in postfix -(reverse-Polish) form, and evaluated all leaf nodes every time the expression -was evaluated. But this ignores the fact that in many cases, once one operand -of an AND or OR operation has been evaluated, there is no need to evaluate the -other operand because its value can have no effect on the ultimate result. It -is also worth noting that AND and OR operations are associative, meaning they -can be rearranged at runtime to better suit the selected skin. - -This patch rewrites the expression parsing and evaluation code. Now the -internal repreentation is in the form of a tree where leaf nodes represent a -single infobool, and branch nodes represent either an AND or an OR operation -on two or more child nodes. - -Expressions are rewritten at parse time into a form which favours the -formation of groups of associative nodes. These groups are then reordered at -evaluation time such that nodes whose value renders the evaluation of the -remainder of the group unnecessary tend to be evaluated first (these are -true nodes for OR subexpressions, or false nodes for AND subexpressions). -The end effect is to minimise the number of leaf nodes that need to be -evaluated in order to determine the value of the expression. The runtime -adaptability has the advantage of not being customised for any particular skin. - -The modifications to the expression at parse time fall into two groups: -1) Moving logical NOTs so that they are only applied to leaf nodes. - For example, rewriting ![A+B]|C as !A|!B|C allows reordering such that - any of the three leaves can be evaluated first. -2) Combining adjacent AND or OR operations such that each path from the root - to a leaf encounters a strictly alternating pattern of AND and OR - operations. So [A|B]|[C|D+[[E|F]|G] becomes A|B|C|[D+[E|F|G]]. - -I measured the effect while the Videos window of the default skin was open -(but idle) on a Raspberry Pi, and this reduced the CPU usage by 2.8% from -41.9% to 39.1%: - - Before After - Mean StdDev Mean StdDev Confidence Change -IdleCPU% 41.9 0.5 39.1 0.9 100.0% +7.0% ---- - xbmc/interfaces/info/InfoExpression.cpp | 313 +++++++++++++++++++++----------- - xbmc/interfaces/info/InfoExpression.h | 63 ++++++- - 2 files changed, 269 insertions(+), 107 deletions(-) - -diff --git a/xbmc/interfaces/info/InfoExpression.cpp b/xbmc/interfaces/info/InfoExpression.cpp -index f4d32c1..db461dd 100644 ---- a/xbmc/interfaces/info/InfoExpression.cpp -+++ b/xbmc/interfaces/info/InfoExpression.cpp -@@ -22,6 +22,9 @@ - #include <stack> - #include "utils/log.h" - #include "GUIInfoManager.h" -+#include <list> -+#include <boost/shared_ptr.hpp> -+#include <boost/make_shared.hpp> - - using namespace std; - using namespace INFO; -@@ -40,21 +43,89 @@ void InfoSingle::Update(const CGUIListItem *item) - InfoExpression::InfoExpression(const std::string &expression, int context) - : InfoBool(expression, context) - { -- Parse(expression); -+ if (!Parse(expression)) -+ CLog::Log(LOGERROR, "Error parsing boolean expression %s", expression.c_str()); - } - - void InfoExpression::Update(const CGUIListItem *item) - { -- Evaluate(item, m_value); -+ m_value = m_expression_tree->Evaluate(item); - } - --#define OPERATOR_LB 5 --#define OPERATOR_RB 4 --#define OPERATOR_NOT 3 --#define OPERATOR_AND 2 --#define OPERATOR_OR 1 -+/* Expressions are rewritten at parse time into a form which favours the -+ * formation of groups of associative nodes. These groups are then reordered at -+ * evaluation time such that nodes whose value renders the evaluation of the -+ * remainder of the group unnecessary tend to be evaluated first (these are -+ * true nodes for OR subexpressions, or false nodes for AND subexpressions). -+ * The end effect is to minimise the number of leaf nodes that need to be -+ * evaluated in order to determine the value of the expression. The runtime -+ * adaptability has the advantage of not being customised for any particular skin. -+ * -+ * The modifications to the expression at parse time fall into two groups: -+ * 1) Moving logical NOTs so that they are only applied to leaf nodes. -+ * For example, rewriting ![A+B]|C as !A|!B|C allows reordering such that -+ * any of the three leaves can be evaluated first. -+ * 2) Combining adjacent AND or OR operations such that each path from the root -+ * to a leaf encounters a strictly alternating pattern of AND and OR -+ * operations. So [A|B]|[C|D+[[E|F]|G] becomes A|B|C|[D+[E|F|G]]. -+ */ -+ -+bool InfoExpression::InfoLeaf::Evaluate(const CGUIListItem *item) -+{ -+ return m_invert ^ m_info->Get(item); -+} - --short InfoExpression::GetOperator(const char ch) const -+InfoExpression::InfoAssociativeGroup::InfoAssociativeGroup( -+ bool and_not_or, -+ const InfoSubexpressionPtr &left, -+ const InfoSubexpressionPtr &right) -+ : m_and_not_or(and_not_or) -+{ -+ AddChild(right); -+ AddChild(left); -+} -+ -+void InfoExpression::InfoAssociativeGroup::AddChild(const InfoSubexpressionPtr &child) -+{ -+ m_children.push_front(child); // largely undoes the effect of parsing right-associative -+} -+ -+void InfoExpression::InfoAssociativeGroup::Merge(InfoAssociativeGroup *other) -+{ -+ m_children.splice(m_children.end(), other->m_children); -+} -+ -+bool InfoExpression::InfoAssociativeGroup::Evaluate(const CGUIListItem *item) -+{ -+ /* Handle either AND or OR by using the relation -+ * A AND B == !(!A OR !B) -+ * to convert ANDs into ORs -+ */ -+ std::list<InfoSubexpressionPtr>::iterator last = m_children.end(); -+ std::list<InfoSubexpressionPtr>::iterator it = m_children.begin(); -+ bool result = m_and_not_or ^ (*it)->Evaluate(item); -+ while (!result && ++it != last) -+ { -+ result = m_and_not_or ^ (*it)->Evaluate(item); -+ if (result) -+ { -+ /* Move this child to the head of the list so we evaluate faster next time */ -+ InfoSubexpressionPtr p = *it; -+ m_children.erase(it); -+ m_children.push_front(p); -+ } -+ } -+ return m_and_not_or ^ result; -+} -+ -+/* Expressions are parsed using the shunting-yard algorithm. Binary operators -+ * (AND/OR) are treated as right-associative so that we don't need to make a -+ * special case for the unary NOT operator. This has no effect upon the answers -+ * generated, though the initial sequence of evaluation of leaves may be -+ * different from what you might expect. -+ */ -+ -+InfoExpression::operator_t InfoExpression::GetOperator(char ch) - { - if (ch == '[') - return OPERATOR_LB; -@@ -67,122 +138,160 @@ short InfoExpression::GetOperator(const char ch) const - else if (ch == '|') - return OPERATOR_OR; - else -- return 0; -+ return OPERATOR_NONE; - } - --void InfoExpression::Parse(const std::string &expression) -+void InfoExpression::OperatorPop(std::stack<operator_t> &operator_stack, bool &invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes) - { -- stack<char> operators; -- std::string operand; -- for (unsigned int i = 0; i < expression.size(); i++) -+ operator_t op2 = operator_stack.top(); -+ operator_stack.pop(); -+ if (op2 == OPERATOR_NOT) - { -- if (GetOperator(expression[i])) -+ invert = !invert; -+ } -+ else -+ { -+ // At this point, it can only be OPERATOR_AND or OPERATOR_OR -+ if (invert) -+ op2 = (operator_t) (OPERATOR_AND ^ OPERATOR_OR ^ op2); -+ node_type_t new_type = op2 == OPERATOR_AND ? NODE_AND : NODE_OR; -+ -+ InfoSubexpressionPtr right = nodes.top(); -+ nodes.pop(); -+ InfoSubexpressionPtr left = nodes.top(); -+ -+ node_type_t right_type = node_types.top(); -+ node_types.pop(); -+ node_type_t left_type = node_types.top(); -+ -+ // Combine associative operations into the same node where possible -+ if (left_type == new_type && right_type == new_type) -+ (static_cast<InfoAssociativeGroup *>(left.get()))->Merge(static_cast<InfoAssociativeGroup *>(right.get())); -+ else if (left_type == new_type) -+ (static_cast<InfoAssociativeGroup *>(left.get()))->AddChild(right); -+ else - { -- // cleanup any operand, translate and put into our expression list -- if (!operand.empty()) -+ nodes.pop(); -+ node_types.pop(); -+ if (right_type == new_type) - { -- InfoPtr info = g_infoManager.Register(operand, m_context); -- if (info) -- { -- m_listItemDependent |= info->ListItemDependent(); -- m_postfix.push_back(m_operands.size()); -- m_operands.push_back(info); -- } -- operand.clear(); -+ (static_cast<InfoAssociativeGroup *>(right.get()))->AddChild(left); -+ nodes.push(right); - } -- // handle closing parenthesis -- if (expression[i] == ']') -- { -- while (!operators.empty()) -- { -- char oper = operators.top(); -- operators.pop(); -+ else -+ nodes.push(boost::make_shared<InfoAssociativeGroup>(new_type == NODE_AND, left, right)); -+ node_types.push(new_type); -+ } -+ } -+} -+ -+void InfoExpression::ProcessOperator(operator_t op, std::stack<operator_t> &operator_stack, bool &invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes) -+{ -+ // Handle any higher-priority stacked operators, except when the new operator is left-bracket. -+ // For a right-bracket, this will stop with the matching left-bracket at the top of the operator stack. -+ if (op != OPERATOR_LB) -+ { -+ while (operator_stack.size() > 0 && operator_stack.top() > op) -+ OperatorPop(operator_stack, invert, node_types, nodes); -+ } -+ if (op == OPERATOR_RB) -+ operator_stack.pop(); // remove the matching left-bracket -+ else -+ operator_stack.push(op); -+ if (op == OPERATOR_NOT) -+ invert = !invert; -+} - -- if (oper == '[') -- break; -+bool InfoExpression::ProcessOperand(std::string &operand, bool invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes) -+{ -+ InfoPtr info = g_infoManager.Register(operand, m_context); -+ if (!info) -+ return false; -+ m_listItemDependent |= info->ListItemDependent(); -+ nodes.push(boost::make_shared<InfoLeaf>(info, invert)); -+ node_types.push(NODE_LEAF); -+ operand.clear(); -+ return true; -+} - -- m_postfix.push_back(-GetOperator(oper)); // negative denotes operator -- } -+bool InfoExpression::Parse(const std::string &expression) -+{ -+ const char *s = expression.c_str(); -+ std::string operand; -+ std::stack<operator_t> operator_stack; -+ bool invert = false; -+ std::stack<node_type_t> node_types; -+ std::stack<InfoSubexpressionPtr> nodes; -+ // The next two are for syntax-checking purposes -+ bool after_binaryoperator = true; -+ int bracket_count = 0; -+ -+ char c; -+ // Skip leading whitespace - don't want it to count as an operand if that's all there is -+ do -+ { -+ c = *s++; -+ } while (c == ' ' || c == '\t' || c == '\r' || c == '\n'); -+ s--; -+ while ((c = *s++) != '\0') -+ { -+ operator_t op; -+ if ((op = GetOperator(c)) != OPERATOR_NONE) -+ { -+ // Character is an operator -+ if ((!after_binaryoperator && (c == '!' || c == '[')) || -+ (after_binaryoperator && (c == ']' || c == '+' || c == '|'))) -+ { -+ CLog::Log(LOGERROR, "Misplaced %c", c); -+ return false; - } -- else -+ if (c == '[') -+ bracket_count++; -+ else if (c == ']' && bracket_count-- == 0) -+ { -+ CLog::Log(LOGERROR, "Unmatched ]"); -+ return false; -+ } -+ if (operand.size() > 0 && !ProcessOperand(operand, invert, node_types, nodes)) - { -- // all other operators we pop off the stack any operator -- // that has a higher priority than the one we have. -- while (!operators.empty() && GetOperator(operators.top()) > GetOperator(expression[i])) -- { -- // only handle parenthesis once they're closed. -- if (operators.top() == '[' && expression[i] != ']') -- break; -- -- m_postfix.push_back(-GetOperator(operators.top())); // negative denotes operator -- operators.pop(); -- } -- operators.push(expression[i]); -+ CLog::Log(LOGERROR, "Bad operand '%s'", operand.c_str()); -+ return false; - } -+ ProcessOperator(op, operator_stack, invert, node_types, nodes); -+ if (c == '+' || c == '|') -+ after_binaryoperator = true; -+ // Skip trailing whitespace - don't want it to count as an operand if that's all there is -+ do -+ { -+ c = *s++; -+ } while (c == ' ' || c == '\t' || c == '\r' || c == '\n'); -+ s--; - } - else - { -- operand += expression[i]; -+ // Character is part of operand -+ operand += c; -+ after_binaryoperator = false; - } - } -- -- if (!operand.empty()) -+ if (bracket_count > 0) - { -- InfoPtr info = g_infoManager.Register(operand, m_context); -- if (info) -- { -- m_listItemDependent |= info->ListItemDependent(); -- m_postfix.push_back(m_operands.size()); -- m_operands.push_back(info); -- } -+ CLog::Log(LOGERROR, "Unmatched ["); -+ return false; - } -- -- // finish up by adding any operators -- while (!operators.empty()) -+ if (after_binaryoperator) - { -- m_postfix.push_back(-GetOperator(operators.top())); // negative denotes operator -- operators.pop(); -+ CLog::Log(LOGERROR, "Missing operand"); -+ return false; - } -- -- // test evaluate -- bool test; -- if (!Evaluate(NULL, test)) -- CLog::Log(LOGERROR, "Error evaluating boolean expression %s", expression.c_str()); --} -- --bool InfoExpression::Evaluate(const CGUIListItem *item, bool &result) --{ -- stack<bool> save; -- for (vector<short>::const_iterator it = m_postfix.begin(); it != m_postfix.end(); ++it) -+ if (operand.size() > 0 && !ProcessOperand(operand, invert, node_types, nodes)) - { -- short expr = *it; -- if (expr == -OPERATOR_NOT) -- { // NOT the top item on the stack -- if (save.empty()) return false; -- bool expr = save.top(); -- save.pop(); -- save.push(!expr); -- } -- else if (expr == -OPERATOR_AND) -- { // AND the top two items on the stack -- if (save.size() < 2) return false; -- bool right = save.top(); save.pop(); -- bool left = save.top(); save.pop(); -- save.push(left && right); -- } -- else if (expr == -OPERATOR_OR) -- { // OR the top two items on the stack -- if (save.size() < 2) return false; -- bool right = save.top(); save.pop(); -- bool left = save.top(); save.pop(); -- save.push(left || right); -- } -- else if (expr >= 0) // operand -- save.push(m_operands[expr]->Get(item)); -- } -- if (save.size() != 1) -+ CLog::Log(LOGERROR, "Bad operand '%s'", operand.c_str()); - return false; -- result = save.top(); -+ } -+ while (operator_stack.size() > 0) -+ OperatorPop(operator_stack, invert, node_types, nodes); -+ -+ m_expression_tree = nodes.top(); - return true; - } -- -diff --git a/xbmc/interfaces/info/InfoExpression.h b/xbmc/interfaces/info/InfoExpression.h -index 4e0faee..0a91399 100644 ---- a/xbmc/interfaces/info/InfoExpression.h -+++ b/xbmc/interfaces/info/InfoExpression.h -@@ -21,6 +21,8 @@ - #pragma once - - #include <vector> -+#include <list> -+#include <stack> - #include "InfoBool.h" - - class CGUIListItem; -@@ -50,12 +52,63 @@ class InfoExpression : public InfoBool - - virtual void Update(const CGUIListItem *item); - private: -- void Parse(const std::string &expression); -- bool Evaluate(const CGUIListItem *item, bool &result); -- short GetOperator(const char ch) const; -+ typedef enum -+ { -+ OPERATOR_NONE = 0, -+ OPERATOR_LB, // 1 -+ OPERATOR_RB, // 2 -+ OPERATOR_OR, // 3 -+ OPERATOR_AND, // 4 -+ OPERATOR_NOT, // 5 -+ } operator_t; - -- std::vector<short> m_postfix; ///< the postfix form of the expression (operators and operand indicies) -- std::vector<InfoPtr> m_operands; ///< the operands in the expression -+ typedef enum -+ { -+ NODE_LEAF, -+ NODE_AND, -+ NODE_OR, -+ } node_type_t; -+ -+ // An abstract base class for nodes in the expression tree -+ class InfoSubexpression -+ { -+ public: -+ virtual ~InfoSubexpression(void) {}; // so we can destruct derived classes using a pointer to their base class -+ virtual bool Evaluate(const CGUIListItem *item) = 0; -+ }; -+ -+ typedef boost::shared_ptr<InfoSubexpression> InfoSubexpressionPtr; -+ -+ // A leaf node in the expression tree -+ class InfoLeaf : public InfoSubexpression -+ { -+ public: -+ InfoLeaf(InfoPtr info, bool invert) : m_info(info), m_invert(invert) {}; -+ virtual bool Evaluate(const CGUIListItem *item); -+ private: -+ InfoPtr m_info; -+ bool m_invert; -+ }; -+ -+ // A branch node in the expression tree -+ class InfoAssociativeGroup : public InfoSubexpression -+ { -+ public: -+ InfoAssociativeGroup(bool and_not_or, const InfoSubexpressionPtr &left, const InfoSubexpressionPtr &right); -+ void AddChild(const InfoSubexpressionPtr &child); -+ void Merge(InfoAssociativeGroup *other); -+ virtual bool Evaluate(const CGUIListItem *item); -+ private: -+ bool m_and_not_or; -+ std::list<InfoSubexpressionPtr> m_children; -+ }; -+ -+ static operator_t GetOperator(char ch); -+ static void OperatorPop(std::stack<operator_t> &operator_stack, bool &invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes); -+ static void ProcessOperator(operator_t op, std::stack<operator_t> &operator_stack, bool &invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes); -+ bool ProcessOperand(std::string &operand, bool invert, std::stack<node_type_t> &node_types, std::stack<InfoSubexpressionPtr> &nodes); -+ bool Parse(const std::string &expression); -+ InfoSubexpressionPtr m_expression_tree; - }; - - }; --- -1.9.3 - - -From 36067cf823d539a00eea75d561ac78a4b1431a66 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 24 Mar 2014 22:26:21 +0000 -Subject: [PATCH 15/94] Where an infobool expression failed to parse, evaluate - the infobool as false. Previously, this would result in a segfault due to the - dereferencing of an uninitialised pointer to the head of the expression tree. - ---- - xbmc/interfaces/info/InfoExpression.cpp | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/xbmc/interfaces/info/InfoExpression.cpp b/xbmc/interfaces/info/InfoExpression.cpp -index db461dd..7c54064 100644 ---- a/xbmc/interfaces/info/InfoExpression.cpp -+++ b/xbmc/interfaces/info/InfoExpression.cpp -@@ -44,7 +44,10 @@ InfoExpression::InfoExpression(const std::string &expression, int context) - : InfoBool(expression, context) - { - if (!Parse(expression)) -+ { - CLog::Log(LOGERROR, "Error parsing boolean expression %s", expression.c_str()); -+ m_expression_tree = boost::make_shared<InfoLeaf>(g_infoManager.Register("false", 0), false); -+ } - } - - void InfoExpression::Update(const CGUIListItem *item) --- -1.9.3 - - -From 7f2870606f1e183d70b1dc2dbc07fa8bc437d0cc Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 26 Nov 2013 20:09:48 +0000 -Subject: [PATCH 16/94] Add caching of infolabels - -The functions CGUIInfoLabel::GetLabel and CGUIInfoLabel::GetItemLabel take -a number of strings returned from CGUIInfoManager::GetImage or -CGUIInfoManager::GetLabel, and combine them with various constant strings -which were determined during CGUIInfoLabel::Parse. - -Rather than perform all the string operations on every call, this patch -changes to use a two-pass process: first it queries all the GetImage/GetLabel -strings, and then only if at least one of them has changed does it bother -rebuilding the resultant string - otherwise it re-uses the copy built on a -preceding call. - -CGUIInfoLabel::GetLabel/GetItemLabel are also changed to return string -references, rather than forcing an additional string copy. - -I have measured the effect while the Videos window of the default skin was -open (but idle) on a Raspberry Pi, and this reduced the CPU usage by 0.8% -from 36.2% to 35.4%: - - Before After - Mean StdDev Mean StdDev Confidence Change -IdleCPU% 36.2 0.5 35.4 0.5 99.9% +2.2% ---- - xbmc/guilib/GUIInfoTypes.cpp | 102 +++++++++++++++++++++++++++++++++---------- - xbmc/guilib/GUIInfoTypes.h | 11 ++++- - 2 files changed, 87 insertions(+), 26 deletions(-) - -diff --git a/xbmc/guilib/GUIInfoTypes.cpp b/xbmc/guilib/GUIInfoTypes.cpp -index 6977e0f..d78c26a 100644 ---- a/xbmc/guilib/GUIInfoTypes.cpp -+++ b/xbmc/guilib/GUIInfoTypes.cpp -@@ -136,37 +136,64 @@ void CGUIInfoLabel::SetLabel(const CStdString &label, const CStdString &fallback - Parse(label, context); - } - --CStdString CGUIInfoLabel::GetLabel(int contextWindow, bool preferImage, CStdString *fallback /*= NULL*/) const -+const std::string &CGUIInfoLabel::GetLabel(int contextWindow, bool preferImage, CStdString *fallback /*= NULL*/) const - { -- CStdString label; -- for (unsigned int i = 0; i < m_info.size(); i++) -+ for (unsigned int i = 0, j = 0; i < m_info.size(); i++) - { - const CInfoPortion &portion = m_info[i]; - if (portion.m_info) - { -- CStdString infoLabel; -+ std::string infoLabel; - if (preferImage) - infoLabel = g_infoManager.GetImage(portion.m_info, contextWindow, fallback); - if (infoLabel.empty()) - infoLabel = g_infoManager.GetLabel(portion.m_info, contextWindow, fallback); -- if (!infoLabel.empty()) -- label += portion.GetLabel(infoLabel); -+ if (j == m_labelPortions.size()) -+ m_labelPortions.push_back(infoLabel); -+ else if (infoLabel != m_labelPortions[j]) -+ { -+ m_labelPortions[j] = infoLabel; -+ m_labelDirty = true; -+ } -+ j++; - } -- else -- { // no info, so just append the prefix -- label += portion.m_prefix; -+ } -+ if (m_labelDirty) -+ { -+ m_label.clear(); -+ for (unsigned int i = 0, j= 0; i < m_info.size(); i++) -+ { -+ const CInfoPortion &portion = m_info[i]; -+ if (portion.m_info) -+ { -+ if (!m_labelPortions[j].empty()) -+ m_label += portion.GetLabel(m_labelPortions[j]); -+ j++; -+ } -+ else -+ { // no info, so just append the prefix -+ m_label += portion.m_prefix; -+ } - } -+ if (m_label.empty()) // empty label, use the fallback -+ m_label = m_fallback; -+ m_labelDirty = false; - } -- if (label.empty()) // empty label, use the fallback -- return m_fallback; -- return label; -+ return m_label; - } - --CStdString CGUIInfoLabel::GetItemLabel(const CGUIListItem *item, bool preferImages, CStdString *fallback /*= NULL*/) const -+const std::string &CGUIInfoLabel::GetItemLabel(const CGUIListItem *item, bool preferImages, CStdString *fallback /*= NULL*/) const - { -- if (!item->IsFileItem()) return ""; -- CStdString label; -- for (unsigned int i = 0; i < m_info.size(); i++) -+ if (!item->IsFileItem()) -+ { -+ if (m_itemLabelDirty) -+ { -+ m_itemLabel = ""; -+ m_itemLabelDirty = false; -+ } -+ return m_itemLabel; -+ } -+ for (unsigned int i = 0, j = 0; i < m_info.size(); i++) - { - const CInfoPortion &portion = m_info[i]; - if (portion.m_info) -@@ -176,17 +203,38 @@ CStdString CGUIInfoLabel::GetItemLabel(const CGUIListItem *item, bool preferImag - infoLabel = g_infoManager.GetItemImage((const CFileItem *)item, portion.m_info, fallback); - else - infoLabel = g_infoManager.GetItemLabel((const CFileItem *)item, portion.m_info, fallback); -- if (!infoLabel.empty()) -- label += portion.GetLabel(infoLabel); -+ if (j == m_itemLabelPortions.size()) -+ m_itemLabelPortions.push_back(infoLabel); -+ else if (infoLabel != m_itemLabelPortions[j]) -+ { -+ m_itemLabelPortions[j] = infoLabel; -+ m_itemLabelDirty = true; -+ } -+ j++; - } -- else -- { // no info, so just append the prefix -- label += portion.m_prefix; -+ } -+ if (m_itemLabelDirty) -+ { -+ m_itemLabel.clear(); -+ for (unsigned int i = 0, j = 0; i < m_info.size(); i++) -+ { -+ const CInfoPortion &portion = m_info[i]; -+ if (portion.m_info) -+ { -+ if (!m_itemLabelPortions[j].empty()) -+ m_itemLabel += portion.GetLabel(m_itemLabelPortions[j]); -+ j++; -+ } -+ else -+ { // no info, so just append the prefix -+ m_itemLabel += portion.m_prefix; -+ } - } -+ if (m_itemLabel.empty()) -+ m_itemLabel = m_fallback; -+ m_itemLabelDirty = false; - } -- if (label.empty()) -- return m_fallback; -- return label; -+ return m_itemLabel; - } - - bool CGUIInfoLabel::IsEmpty() const -@@ -277,6 +325,12 @@ const static infoformat infoformatmap[] = {{ "$INFO[", FORMATINFO }, - void CGUIInfoLabel::Parse(const CStdString &label, int context) - { - m_info.clear(); -+ m_labelDirty = true; -+ m_label.clear(); -+ m_labelPortions.clear(); -+ m_itemLabelDirty = true; -+ m_itemLabel.clear(); -+ m_itemLabelPortions.clear(); - // Step 1: Replace all $LOCALIZE[number] with the real string - CStdString work = ReplaceLocalize(label); - // Step 2: Replace all $ADDON[id number] with the real string -diff --git a/xbmc/guilib/GUIInfoTypes.h b/xbmc/guilib/GUIInfoTypes.h -index 8c1c1dc..418b2c4 100644 ---- a/xbmc/guilib/GUIInfoTypes.h -+++ b/xbmc/guilib/GUIInfoTypes.h -@@ -83,7 +83,7 @@ class CGUIInfoLabel - \param fallback if non-NULL, is set to an alternate value to use should the actual value be not appropriate. Defaults to NULL. - \return label (or image). - */ -- CStdString GetLabel(int contextWindow, bool preferImage = false, CStdString *fallback = NULL) const; -+ const std::string &GetLabel(int contextWindow, bool preferImage = false, CStdString *fallback = NULL) const; - - /*! - \brief Gets a label (or image) for a given listitem from the info manager. -@@ -92,7 +92,7 @@ class CGUIInfoLabel - \param fallback if non-NULL, is set to an alternate value to use should the actual value be not appropriate. Defaults to NULL. - \return label (or image). - */ -- CStdString GetItemLabel(const CGUIListItem *item, bool preferImage = false, CStdString *fallback = NULL) const; -+ const std::string &GetItemLabel(const CGUIListItem *item, bool preferImage = false, CStdString *fallback = NULL) const; - - bool IsConstant() const; - bool IsEmpty() const; -@@ -132,6 +132,13 @@ class CGUIInfoLabel - - CStdString m_fallback; - std::vector<CInfoPortion> m_info; -+ -+ mutable bool m_labelDirty; -+ mutable std::string m_label; -+ mutable std::vector<std::string> m_labelPortions; -+ mutable bool m_itemLabelDirty; -+ mutable std::string m_itemLabel; -+ mutable std::vector<std::string> m_itemLabelPortions; - }; - - #endif --- -1.9.3 - - -From 3d5a1912ffd4556ec09208fea50d2a2919775c9f Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 10 Dec 2013 01:12:31 +0000 -Subject: [PATCH 17/94] De-duplication of string cache for non-item and item - labels - ---- - xbmc/guilib/GUIInfoTypes.cpp | 50 +++++++++++++++++++++++++------------------- - xbmc/guilib/GUIInfoTypes.h | 4 +--- - 2 files changed, 29 insertions(+), 25 deletions(-) - -diff --git a/xbmc/guilib/GUIInfoTypes.cpp b/xbmc/guilib/GUIInfoTypes.cpp -index d78c26a..8bd131f 100644 ---- a/xbmc/guilib/GUIInfoTypes.cpp -+++ b/xbmc/guilib/GUIInfoTypes.cpp -@@ -121,7 +121,7 @@ void CGUIInfoColor::Parse(const CStdString &label, int context) - m_color = g_colorManager.GetColor(label); - } - --CGUIInfoLabel::CGUIInfoLabel() -+CGUIInfoLabel::CGUIInfoLabel() : m_labelDirty(true) - { - } - -@@ -178,7 +178,10 @@ const std::string &CGUIInfoLabel::GetLabel(int contextWindow, bool preferImage, - if (m_label.empty()) // empty label, use the fallback - m_label = m_fallback; - m_labelDirty = false; -+ m_isLabelOfListItem = false; - } -+ else -+ assert(m_isLabelOfListItem == false); - return m_label; - } - -@@ -186,12 +189,15 @@ const std::string &CGUIInfoLabel::GetItemLabel(const CGUIListItem *item, bool pr - { - if (!item->IsFileItem()) - { -- if (m_itemLabelDirty) -+ if (m_labelDirty) - { -- m_itemLabel = ""; -- m_itemLabelDirty = false; -+ m_label = ""; -+ m_labelDirty = false; -+ m_isLabelOfListItem = true; - } -- return m_itemLabel; -+ else -+ assert(m_isLabelOfListItem == true); -+ return m_label; - } - for (unsigned int i = 0, j = 0; i < m_info.size(); i++) - { -@@ -203,38 +209,41 @@ const std::string &CGUIInfoLabel::GetItemLabel(const CGUIListItem *item, bool pr - infoLabel = g_infoManager.GetItemImage((const CFileItem *)item, portion.m_info, fallback); - else - infoLabel = g_infoManager.GetItemLabel((const CFileItem *)item, portion.m_info, fallback); -- if (j == m_itemLabelPortions.size()) -- m_itemLabelPortions.push_back(infoLabel); -- else if (infoLabel != m_itemLabelPortions[j]) -+ if (j == m_labelPortions.size()) -+ m_labelPortions.push_back(infoLabel); -+ else if (infoLabel != m_labelPortions[j]) - { -- m_itemLabelPortions[j] = infoLabel; -- m_itemLabelDirty = true; -+ m_labelPortions[j] = infoLabel; -+ m_labelDirty = true; - } - j++; - } - } -- if (m_itemLabelDirty) -+ if (m_labelDirty) - { -- m_itemLabel.clear(); -+ m_label.clear(); - for (unsigned int i = 0, j = 0; i < m_info.size(); i++) - { - const CInfoPortion &portion = m_info[i]; - if (portion.m_info) - { -- if (!m_itemLabelPortions[j].empty()) -- m_itemLabel += portion.GetLabel(m_itemLabelPortions[j]); -+ if (!m_labelPortions[j].empty()) -+ m_label += portion.GetLabel(m_labelPortions[j]); - j++; - } - else - { // no info, so just append the prefix -- m_itemLabel += portion.m_prefix; -+ m_label += portion.m_prefix; - } - } -- if (m_itemLabel.empty()) -- m_itemLabel = m_fallback; -- m_itemLabelDirty = false; -+ if (m_label.empty()) -+ m_label = m_fallback; -+ m_labelDirty = false; -+ m_isLabelOfListItem = true; - } -- return m_itemLabel; -+ else -+ assert(m_isLabelOfListItem == true); -+ return m_label; - } - - bool CGUIInfoLabel::IsEmpty() const -@@ -328,9 +337,6 @@ void CGUIInfoLabel::Parse(const CStdString &label, int context) - m_labelDirty = true; - m_label.clear(); - m_labelPortions.clear(); -- m_itemLabelDirty = true; -- m_itemLabel.clear(); -- m_itemLabelPortions.clear(); - // Step 1: Replace all $LOCALIZE[number] with the real string - CStdString work = ReplaceLocalize(label); - // Step 2: Replace all $ADDON[id number] with the real string -diff --git a/xbmc/guilib/GUIInfoTypes.h b/xbmc/guilib/GUIInfoTypes.h -index 418b2c4..6d9ebf7 100644 ---- a/xbmc/guilib/GUIInfoTypes.h -+++ b/xbmc/guilib/GUIInfoTypes.h -@@ -133,12 +133,10 @@ class CGUIInfoLabel - CStdString m_fallback; - std::vector<CInfoPortion> m_info; - -+ mutable bool m_isLabelOfListItem; - mutable bool m_labelDirty; - mutable std::string m_label; - mutable std::vector<std::string> m_labelPortions; -- mutable bool m_itemLabelDirty; -- mutable std::string m_itemLabel; -- mutable std::vector<std::string> m_itemLabelPortions; - }; - - #endif --- -1.9.3 - - -From 1427baf4395b760227afbef8e17956ba251f2fbe Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Fri, 21 Feb 2014 15:16:13 +0000 -Subject: [PATCH 18/94] Faster and simpler portable implementation of - MathUtils::round_int(). - -Much as I like a bit of inline assembler, I have also removed the ARM versions -of MathUtils::truncate_int() and MathUtils::round_int(). The former was just -how any sane compiler should have assembled a cast from double to signed int -anyway. The latter was a much too complicated way to achieve the desired -effect, and was switched out in most ARM builds anyway in favour of the old -portable implementation that used floor(). - -Verified that MathUtils::test() still passes, and that GCC is now able to -inline MathUtils::round_int(), where it didn't previously. - -I tested on a Raspberry Pi with the default theme, displaying the front page -with the RSS ticker enabled. This saturates the CPU, so I'm measuring the -improvement using the debug window's FPS figure. This patch improves this from -~50.8 FPS to ~52.6 FPS. ---- - xbmc/utils/MathUtils.h | 129 +++++++++++++++++++++++-------------------------- - 1 file changed, 61 insertions(+), 68 deletions(-) - -diff --git a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h -index 96af9f4..0dae77d 100644 ---- a/xbmc/utils/MathUtils.h -+++ b/xbmc/utils/MathUtils.h -@@ -34,17 +34,13 @@ - - #if defined(__ppc__) || \ - defined(__powerpc__) || \ -- (defined(TARGET_DARWIN_IOS) && defined(__llvm__)) || \ -- (defined(TARGET_ANDROID) && defined(__arm__)) || \ -- defined(TARGET_RASPBERRY_PI) -+ defined(__arm__) - #define DISABLE_MATHUTILS_ASM_ROUND_INT - #endif - - #if defined(__ppc__) || \ - defined(__powerpc__) || \ -- (defined(TARGET_DARWIN) && defined(__llvm__)) || \ -- (defined(TARGET_ANDROID) && defined(__arm__)) || \ -- defined(TARGET_RASPBERRY_PI) -+ defined(__arm__) - #define DISABLE_MATHUTILS_ASM_TRUNCATE_INT - #endif - -@@ -73,60 +69,63 @@ namespace MathUtils - { - assert(x > static_cast<double>(INT_MIN / 2) - 1.0); - assert(x < static_cast<double>(INT_MAX / 2) + 1.0); -- const float round_to_nearest = 0.5f; -- int i; - - #if defined(DISABLE_MATHUTILS_ASM_ROUND_INT) -- i = floor(x + round_to_nearest); -- --#elif defined(__arm__) -- // From 'ARM-v7-M Architecture Reference Manual' page A7-569: -- // "The floating-point to integer operation (vcvt) [normally] uses the Round towards Zero rounding mode" -- // Because of this...we must use some less-than-straightforward logic to perform this operation without -- // changing the rounding mode flags -- -- /* The assembly below implements the following logic: -- if (x < 0) -- inc = -0.5f -- else -- inc = 0.5f -- int_val = trunc(x+inc); -- err = x - int_val; -- if (err == 0.5f) -- int_val++; -- return int_val; -- */ -+ /* This implementation warrants some further explanation. -+ * -+ * First, a couple of notes on rounding: -+ * 1) C casts from float/double to integer round towards zero. -+ * 2) Float/double additions are rounded according to the normal rules, -+ * in other words: on some architectures, it's fixed at compile-time, -+ * and on others it can be set using fesetround()). The following -+ * analysis assumes round-to-nearest with ties rounding to even. This -+ * is a fairly sensible choice, and is the default with ARM VFP. -+ * -+ * What this function wants is round-to-nearest with ties rounding to -+ * +infinity. This isn't an IEEE rounding mode, even if we could guarantee -+ * that all architectures supported fesetround(), which they don't. Instead, -+ * this adds an offset of 2147483648.5 (= 0x80000000.8p0), then casts to -+ * an unsigned int (crucially, all possible inputs are now in a range where -+ * round to zero acts the same as round to -infinity) and then subtracts -+ * 0x80000000 in the integer domain. The 0.5 component of the offset -+ * converts what is effectively a round down into a round to nearest, with -+ * ties rounding up, as desired. -+ * -+ * There is a catch, that because there is a double rounding, there is a -+ * small region where the input falls just *below* a tie, where the addition -+ * of the offset causes a round *up* to an exact integer, due to the finite -+ * level of precision available in floating point. You need to be aware of -+ * this when calling this function, although at present it is not believed -+ * that XBMC ever attempts to round numbers in this window. -+ * -+ * It is worth proving the size of the affected window. Recall that double -+ * precision employs a mantissa of 52 bits. -+ * 1) For all inputs -0.5 <= x <= INT_MAX -+ * Once the offset is applied, the most significant binary digit in the -+ * floating-point representation is +2^31. -+ * At this magnitude, the smallest step representable in double precision -+ * is 2^31 / 2^52 = 0.000000476837158203125 -+ * So the size of the range which is rounded up due to the addition is -+ * half the size of this step, or 0.0000002384185791015625 -+ * -+ * 2) For all inputs INT_MIN/2 < x < -0.5 -+ * Once the offset is applied, the most significant binary digit in the -+ * floating-point representation is +2^30. -+ * At this magnitude, the smallest step representable in double precision -+ * is 2^30 / 2^52 = 0.0000002384185791015625 -+ * So the size of the range which is rounded up due to the addition is -+ * half the size of this step, or 0.00000011920928955078125 -+ * -+ * 3) For all inputs INT_MIN <= x <= INT_MIN/2 -+ * The representation once the offset is applied has equal or greater -+ * precision than the input, so the addition does not cause rounding. -+ */ -+ return ((unsigned int) (x + 0x80000000.8p0)) - 0x80000000; - -- __asm__ __volatile__ ( --#if defined(__ARM_PCS_VFP) -- "fconstd d1,#%G[rnd_val] \n\t" // Copy round_to_nearest into a working register (d1 = 0.5) - #else -- "vmov.F64 d1,%[rnd_val] \n\t" --#endif -- "fcmpezd %P[value] \n\t" // Check value against zero (value == 0?) -- "fmstat \n\t" // Copy the floating-point status flags into the general-purpose status flags -- "it mi \n\t" -- "vnegmi.F64 d1, d1 \n\t" // if N-flag is set, negate round_to_nearest (if (value < 0) d1 = -1 * d1) -- "vadd.F64 d1,%P[value],d1 \n\t" // Add round_to_nearest to value, store result in working register (d1 += value) -- "vcvt.S32.F64 s3,d1 \n\t" // Truncate(round towards zero) (s3 = (int)d1) -- "vmov %[result],s3 \n\t" // Store the integer result in a general-purpose register (result = s3) -- "vcvt.F64.S32 d1,s3 \n\t" // Convert back to floating-point (d1 = (double)s3) -- "vsub.F64 d1,%P[value],d1 \n\t" // Calculate the error (d1 = value - d1) --#if defined(__ARM_PCS_VFP) -- "fconstd d2,#%G[rnd_val] \n\t" // d2 = 0.5; --#else -- "vmov.F64 d2,%[rnd_val] \n\t" --#endif -- "fcmped d1, d2 \n\t" // (d1 == 0.5?) -- "fmstat \n\t" // Copy the floating-point status flags into the general-purpose status flags -- "it eq \n\t" -- "addeq %[result],#1 \n\t" // (if (d1 == d2) result++;) -- : [result] "=r"(i) // Outputs -- : [rnd_val] "Dv" (round_to_nearest), [value] "w"(x) // Inputs -- : "d1", "d2", "s3" // Clobbers -- ); -- --#elif defined(__SSE2__) -+ const float round_to_nearest = 0.5f; -+ int i; -+#if defined(__SSE2__) - const float round_dn_to_nearest = 0.4999999f; - i = (x > 0) ? _mm_cvttsd_si32(_mm_set_sd(x + round_to_nearest)) : _mm_cvttsd_si32(_mm_set_sd(x - round_dn_to_nearest)); - -@@ -150,8 +149,8 @@ namespace MathUtils - ); - - #endif -- - return i; -+#endif - } - - /*! \brief Truncate to nearest integer. -@@ -165,20 +164,13 @@ namespace MathUtils - { - assert(x > static_cast<double>(INT_MIN / 2) - 1.0); - assert(x < static_cast<double>(INT_MAX / 2) + 1.0); -- int i; - - #if defined(DISABLE_MATHUTILS_ASM_TRUNCATE_INT) -- return i = (int)x; -- --#elif defined(__arm__) -- __asm__ __volatile__ ( -- "vcvt.S32.F64 %[result],%P[value] \n\t" // Truncate(round towards zero) and store the result -- : [result] "=w"(i) // Outputs -- : [value] "w"(x) // Inputs -- ); -- return i; -+ return x; - --#elif defined(TARGET_WINDOWS) -+#else -+ int i; -+#if defined(TARGET_WINDOWS) - const float round_towards_m_i = -0.5f; - __asm - { -@@ -204,6 +196,7 @@ namespace MathUtils - if (x < 0) - i = -i; - return (i); -+#endif - } - - inline int64_t abs(int64_t a) --- -1.9.3 - - -From 0ad4df440ea225cc951a65bf9553b1f00f416d85 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 11 Dec 2013 17:21:54 +0000 -Subject: [PATCH 19/94] Move the reference-counting of Begin and End calls from - DX and GL source files into GUIFontTTF.cpp. - ---- - xbmc/guilib/GUIFontTTF.cpp | 21 ++++++++ - xbmc/guilib/GUIFontTTF.h | 6 ++- - xbmc/guilib/GUIFontTTFDX.cpp | 79 +++++++++++++---------------- - xbmc/guilib/GUIFontTTFDX.h | 4 +- - xbmc/guilib/GUIFontTTFGL.cpp | 118 +++++++++++++++++++------------------------ - xbmc/guilib/GUIFontTTFGL.h | 4 +- - 6 files changed, 117 insertions(+), 115 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 9c8e516..90b9c4a 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -309,6 +309,27 @@ bool CGUIFontTTFBase::Load(const CStdString& strFilename, float height, float as - return true; - } - -+void CGUIFontTTFBase::Begin() -+{ -+ if (m_nestedBeginCount == 0 && m_texture != NULL && FirstBegin()) -+ { -+ m_vertex_count = 0; -+ } -+ // Keep track of the nested begin/end calls. -+ m_nestedBeginCount++; -+} -+ -+void CGUIFontTTFBase::End() -+{ -+ if (m_nestedBeginCount == 0) -+ return; -+ -+ if (--m_nestedBeginCount > 0) -+ return; -+ -+ LastEnd(); -+} -+ - void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors, const vecText &text, uint32_t alignment, float maxPixelWidth, bool scrolling) - { - Begin(); -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 9723a43..c1c4507 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -77,8 +77,8 @@ class CGUIFontTTFBase - - bool Load(const CStdString& strFilename, float height = 20.0f, float aspect = 1.0f, float lineSpacing = 1.0f, bool border = false); - -- virtual void Begin() = 0; -- virtual void End() = 0; -+ void Begin(); -+ void End(); - - const CStdString& GetFileName() const { return m_strFileName; }; - -@@ -169,6 +169,8 @@ class CGUIFontTTFBase - CStdString m_strFileName; - - private: -+ virtual bool FirstBegin() = 0; -+ virtual void LastEnd() = 0; - CGUIFontTTFBase(const CGUIFontTTFBase&); - CGUIFontTTFBase& operator=(const CGUIFontTTFBase&); - int m_referenceCount; -diff --git a/xbmc/guilib/GUIFontTTFDX.cpp b/xbmc/guilib/GUIFontTTFDX.cpp -index e3eba24..2f90668 100644 ---- a/xbmc/guilib/GUIFontTTFDX.cpp -+++ b/xbmc/guilib/GUIFontTTFDX.cpp -@@ -51,65 +51,56 @@ CGUIFontTTFDX::~CGUIFontTTFDX(void) - free(m_index); - } - --void CGUIFontTTFDX::Begin() -+bool CGUIFontTTFDX::FirstBegin() - { - LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice(); - - if (pD3DDevice == NULL) -+ { - CLog::Log(LOGERROR, __FUNCTION__" - failed to get Direct3D device"); -+ return false; -+ } - -- if (m_nestedBeginCount == 0 && pD3DDevice != NULL && m_texture != NULL) -+ int unit = 0; -+ // just have to blit from our texture. -+ m_texture->BindToUnit(unit); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); // only use diffuse -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG1, D3DTA_DIFFUSE); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); -+ unit++; -+ -+ if(g_Windowing.UseLimitedColor()) - { -- int unit = 0; -- // just have to blit from our texture. -- m_texture->BindToUnit(unit); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); // only use diffuse -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG1, D3DTA_DIFFUSE); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP , D3DTOP_ADD ); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG1, D3DTA_CURRENT) ; -+ pD3DDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_RGBA(16,16,16,0) ); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG2, D3DTA_TFACTOR ); - unit++; -- -- if(g_Windowing.UseLimitedColor()) -- { -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP , D3DTOP_ADD ); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG1, D3DTA_CURRENT) ; -- pD3DDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_RGBA(16,16,16,0) ); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLORARG2, D3DTA_TFACTOR ); -- unit++; -- } -- -- // no other texture stages needed -- pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP, D3DTOP_DISABLE); -- pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAOP, D3DTOP_DISABLE); -- -- pD3DDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); -- pD3DDevice->SetRenderState( D3DRS_FOGENABLE, FALSE ); -- pD3DDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); -- pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); -- pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); -- pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); -- pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); -- pD3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE); -- -- pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); -- m_vertex_count = 0; - } - -- // Keep track of the nested begin/end calls. -- m_nestedBeginCount++; -+ // no other texture stages needed -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_COLOROP, D3DTOP_DISABLE); -+ pD3DDevice->SetTextureStageState( unit, D3DTSS_ALPHAOP, D3DTOP_DISABLE); -+ -+ pD3DDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); -+ pD3DDevice->SetRenderState( D3DRS_FOGENABLE, FALSE ); -+ pD3DDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); -+ pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); -+ pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); -+ pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); -+ pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); -+ pD3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE); -+ -+ pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); -+ return true; - } - --void CGUIFontTTFDX::End() -+void CGUIFontTTFDX::LastEnd() - { - LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice(); - -- if (m_nestedBeginCount == 0) -- return; -- -- if (--m_nestedBeginCount > 0) -- return; -- - if (m_vertex_count == 0) - return; - -diff --git a/xbmc/guilib/GUIFontTTFDX.h b/xbmc/guilib/GUIFontTTFDX.h -index 0431085..17dfefe 100644 ---- a/xbmc/guilib/GUIFontTTFDX.h -+++ b/xbmc/guilib/GUIFontTTFDX.h -@@ -41,8 +41,8 @@ class CGUIFontTTFDX : public CGUIFontTTFBase - CGUIFontTTFDX(const CStdString& strFileName); - virtual ~CGUIFontTTFDX(void); - -- virtual void Begin(); -- virtual void End(); -+ virtual bool FirstBegin(); -+ virtual void LastEnd(); - - protected: - virtual CBaseTexture* ReallocTexture(unsigned int& newHeight); -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index 3358a5a..93b7ea6 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -50,90 +50,78 @@ CGUIFontTTFGL::~CGUIFontTTFGL(void) - { - } - --void CGUIFontTTFGL::Begin() -+bool CGUIFontTTFGL::FirstBegin() - { -- if (m_nestedBeginCount == 0 && m_texture != NULL) -+ if (!m_bTextureLoaded) - { -- if (!m_bTextureLoaded) -- { -- // Have OpenGL generate a texture object handle for us -- glGenTextures(1, (GLuint*) &m_nTexture); -+ // Have OpenGL generate a texture object handle for us -+ glGenTextures(1, (GLuint*) &m_nTexture); - -- // Bind the texture object -- glBindTexture(GL_TEXTURE_2D, m_nTexture); -+ // Bind the texture object -+ glBindTexture(GL_TEXTURE_2D, m_nTexture); - #ifdef HAS_GL -- glEnable(GL_TEXTURE_2D); -+ glEnable(GL_TEXTURE_2D); - #endif -- // Set the texture's stretching properties -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -+ // Set the texture's stretching properties -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - -- // Set the texture image -- THIS WORKS, so the pixels must be wrong. -- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, m_texture->GetWidth(), m_texture->GetHeight(), 0, -- GL_ALPHA, GL_UNSIGNED_BYTE, m_texture->GetPixels()); -+ // Set the texture image -- THIS WORKS, so the pixels must be wrong. -+ glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, m_texture->GetWidth(), m_texture->GetHeight(), 0, -+ GL_ALPHA, GL_UNSIGNED_BYTE, m_texture->GetPixels()); - -- VerifyGLState(); -- m_bTextureLoaded = true; -- } -+ VerifyGLState(); -+ m_bTextureLoaded = true; -+ } - -- // Turn Blending On -- glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE); -- glEnable(GL_BLEND); -+ // Turn Blending On -+ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE); -+ glEnable(GL_BLEND); - #ifdef HAS_GL -- glEnable(GL_TEXTURE_2D); -+ glEnable(GL_TEXTURE_2D); - #endif -- glBindTexture(GL_TEXTURE_2D, m_nTexture); -+ glBindTexture(GL_TEXTURE_2D, m_nTexture); - - #ifdef HAS_GL -- glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE); -- glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_REPLACE); -- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR); -- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); -- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); -- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE0); -- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); -- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PRIMARY_COLOR); -- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); -- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -- VerifyGLState(); -+ glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE); -+ glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_REPLACE); -+ glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR); -+ glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); -+ glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); -+ glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE0); -+ glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); -+ glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PRIMARY_COLOR); -+ glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); -+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -+ VerifyGLState(); -+ -+ if(g_Windowing.UseLimitedColor()) -+ { -+ glActiveTexture(GL_TEXTURE1); -+ glBindTexture(GL_TEXTURE_2D, m_nTexture); // dummy bind -+ glEnable(GL_TEXTURE_2D); - -- if(g_Windowing.UseLimitedColor()) -- { -- glActiveTexture(GL_TEXTURE1); -- glBindTexture(GL_TEXTURE_2D, m_nTexture); // dummy bind -- glEnable(GL_TEXTURE_2D); -- -- const GLfloat rgba[4] = {16.0f / 255.0f, 16.0f / 255.0f, 16.0f / 255.0f, 0.0f}; -- glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_COMBINE); -- glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba); -- glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB , GL_ADD); -- glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB , GL_PREVIOUS); -- glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE1_RGB , GL_CONSTANT); -- glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB , GL_SRC_COLOR); -- glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_RGB , GL_SRC_COLOR); -- glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA , GL_REPLACE); -- glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_ALPHA , GL_PREVIOUS); -- VerifyGLState(); -- } -+ const GLfloat rgba[4] = {16.0f / 255.0f, 16.0f / 255.0f, 16.0f / 255.0f, 0.0f}; -+ glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_COMBINE); -+ glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba); -+ glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB , GL_ADD); -+ glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB , GL_PREVIOUS); -+ glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE1_RGB , GL_CONSTANT); -+ glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB , GL_SRC_COLOR); -+ glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_RGB , GL_SRC_COLOR); -+ glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA , GL_REPLACE); -+ glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_ALPHA , GL_PREVIOUS); -+ VerifyGLState(); -+ } - - #else -- g_Windowing.EnableGUIShader(SM_FONTS); -+ g_Windowing.EnableGUIShader(SM_FONTS); - #endif -- -- m_vertex_count = 0; -- } -- // Keep track of the nested begin/end calls. -- m_nestedBeginCount++; -+ return true; - } - --void CGUIFontTTFGL::End() -+void CGUIFontTTFGL::LastEnd() - { -- if (m_nestedBeginCount == 0) -- return; -- -- if (--m_nestedBeginCount > 0) -- return; -- - #ifdef HAS_GL - glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); - -diff --git a/xbmc/guilib/GUIFontTTFGL.h b/xbmc/guilib/GUIFontTTFGL.h -index a0dacba..6736cf7 100644 ---- a/xbmc/guilib/GUIFontTTFGL.h -+++ b/xbmc/guilib/GUIFontTTFGL.h -@@ -41,8 +41,8 @@ class CGUIFontTTFGL : public CGUIFontTTFBase - CGUIFontTTFGL(const CStdString& strFileName); - virtual ~CGUIFontTTFGL(void); - -- virtual void Begin(); -- virtual void End(); -+ virtual bool FirstBegin(); -+ virtual void LastEnd(); - - protected: - virtual CBaseTexture* ReallocTexture(unsigned int& newHeight); --- -1.9.3 - - -From 427373ae5bb96489afb22529714c16e8f82c2195 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 11 Dec 2013 18:47:54 +0000 -Subject: [PATCH 20/94] Convert CGUIFontTTFBase::m_vertex to be managed as a - std::vector. Also retired CGUIFontTTFBase::m_vertex_count and - CGUIFontTTFBase::m_vertex_size because these can be derived from vector - member functions. - ---- - xbmc/guilib/GUIFontTTF.cpp | 29 +++++------------------------ - xbmc/guilib/GUIFontTTF.h | 4 +--- - xbmc/guilib/GUIFontTTFDX.cpp | 12 ++++++------ - xbmc/guilib/GUIFontTTFGL.cpp | 12 ++++++------ - 4 files changed, 18 insertions(+), 39 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 90b9c4a..3f219d9 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -139,8 +139,7 @@ CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) - m_nestedBeginCount = 0; - - m_bTextureLoaded = false; -- m_vertex_size = 4*1024; -- m_vertex = (SVertex*)malloc(m_vertex_size * sizeof(SVertex)); -+ m_vertex.reserve(4*1024); - - m_face = NULL; - m_stroker = NULL; -@@ -155,7 +154,6 @@ CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) - m_textureScaleX = m_textureScaleY = 0.0; - m_ellipsesWidth = m_height = 0.0f; - m_color = 0; -- m_vertex_count = 0; - m_nTexture = 0; - } - -@@ -216,9 +214,7 @@ void CGUIFontTTFBase::Clear() - g_freeTypeLibrary.ReleaseStroker(m_stroker); - m_stroker = NULL; - -- free(m_vertex); -- m_vertex = NULL; -- m_vertex_count = 0; -+ m_vertex.clear(); - } - - bool CGUIFontTTFBase::Load(const CStdString& strFilename, float height, float aspect, float lineSpacing, bool border) -@@ -313,7 +309,7 @@ void CGUIFontTTFBase::Begin() - { - if (m_nestedBeginCount == 0 && m_texture != NULL && FirstBegin()) - { -- m_vertex_count = 0; -+ m_vertex.clear(); - } - // Keep track of the nested begin/end calls. - m_nestedBeginCount++; -@@ -746,22 +742,9 @@ void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *c - float tt = texture.y1 * m_textureScaleY; - float tb = texture.y2 * m_textureScaleY; - -- // grow the vertex buffer if required -- if(m_vertex_count >= m_vertex_size) -- { -- m_vertex_size *= 2; -- void* old = m_vertex; -- m_vertex = (SVertex*)realloc(m_vertex, m_vertex_size * sizeof(SVertex)); -- if (!m_vertex) -- { -- free(old); -- CLog::Log(LOGSEVERE, "%s: can't allocate %"PRIdS" bytes for texture", __FUNCTION__ , m_vertex_size * sizeof(SVertex)); -- return; -- } -- } -- -+ m_vertex.resize(m_vertex.size() + 4); -+ SVertex* v = &m_vertex[m_vertex.size() - 4]; - m_color = color; -- SVertex* v = m_vertex + m_vertex_count; - - unsigned char r = GET_R(color) - , g = GET_G(color) -@@ -828,8 +811,6 @@ void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *c - v[3].y = y[2]; - v[3].z = z[2]; - #endif -- -- m_vertex_count+=4; - } - - // Oblique code - original taken from freetype2 (ftsynth.c) -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index c1c4507..35e3cf9 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -157,9 +157,7 @@ class CGUIFontTTFBase - bool m_bTextureLoaded; - unsigned int m_nTexture; - -- SVertex* m_vertex; -- int m_vertex_count; -- int m_vertex_size; -+ std::vector<SVertex> m_vertex; - - float m_textureScaleX; - float m_textureScaleY; -diff --git a/xbmc/guilib/GUIFontTTFDX.cpp b/xbmc/guilib/GUIFontTTFDX.cpp -index 2f90668..6ef8984 100644 ---- a/xbmc/guilib/GUIFontTTFDX.cpp -+++ b/xbmc/guilib/GUIFontTTFDX.cpp -@@ -101,17 +101,17 @@ void CGUIFontTTFDX::LastEnd() - { - LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice(); - -- if (m_vertex_count == 0) -+ if (m_vertex.size() == 0) - return; - -- unsigned index_size = m_vertex_size * 6 / 4; -+ unsigned index_size = m_vertex.capacity() * 6 / 4; - if(m_index_size < index_size) - { - uint16_t* id = (uint16_t*)calloc(index_size, sizeof(uint16_t)); - if(id == NULL) - return; - -- for(int i = 0, b = 0; i < m_vertex_size; i += 4, b += 6) -+ for(int i = 0, b = 0; i < m_vertex.capacity(); i += 4, b += 6) - { - id[b+0] = i + 0; - id[b+1] = i + 1; -@@ -140,11 +140,11 @@ void CGUIFontTTFDX::LastEnd() - - pD3DDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST - , 0 -- , m_vertex_count -- , m_vertex_count / 2 -+ , m_vertex.size() -+ , m_vertex.size() / 2 - , m_index - , D3DFMT_INDEX16 -- , m_vertex -+ , &m_vertex[0] - , sizeof(SVertex)); - pD3DDevice->SetTransform(D3DTS_WORLD, &orig); - -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index 93b7ea6..a4e8571 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -125,13 +125,13 @@ void CGUIFontTTFGL::LastEnd() - #ifdef HAS_GL - glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); - -- glColorPointer (4, GL_UNSIGNED_BYTE, sizeof(SVertex), (char*)m_vertex + offsetof(SVertex, r)); -- glVertexPointer (3, GL_FLOAT , sizeof(SVertex), (char*)m_vertex + offsetof(SVertex, x)); -- glTexCoordPointer(2, GL_FLOAT , sizeof(SVertex), (char*)m_vertex + offsetof(SVertex, u)); -+ glColorPointer (4, GL_UNSIGNED_BYTE, sizeof(SVertex), (char*)&m_vertex[0] + offsetof(SVertex, r)); -+ glVertexPointer (3, GL_FLOAT , sizeof(SVertex), (char*)&m_vertex[0] + offsetof(SVertex, x)); -+ glTexCoordPointer(2, GL_FLOAT , sizeof(SVertex), (char*)&m_vertex[0] + offsetof(SVertex, u)); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); -- glDrawArrays(GL_QUADS, 0, m_vertex_count); -+ glDrawArrays(GL_QUADS, 0, m_vertex.size()); - glPopClientAttrib(); - - glActiveTexture(GL_TEXTURE1); -@@ -147,10 +147,10 @@ void CGUIFontTTFGL::LastEnd() - GLint tex0Loc = g_Windowing.GUIShaderGetCoord0(); - - // stack object until VBOs will be used -- std::vector<SVertex> vecVertices( 6 * (m_vertex_count / 4) ); -+ std::vector<SVertex> vecVertices( 6 * (m_vertex.size() / 4) ); - SVertex *vertices = &vecVertices[0]; - -- for (int i=0; i<m_vertex_count; i+=4) -+ for (size_t i=0; i<m_vertex.size(); i+=4) - { - *vertices++ = m_vertex[i]; - *vertices++ = m_vertex[i+1]; --- -1.9.3 - - -From a3e8e7f1055726a050e04d1e4ab61a5355cdbd6a Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 16 Dec 2013 18:58:12 +0000 -Subject: [PATCH 21/94] CGUIFontTTFBase::RenderCharacter can now append to - arbitrary vectors of vertices rather than only CGUIFontTTFBase::m_vertex - ---- - xbmc/guilib/GUIFontTTF.cpp | 12 +++++++----- - xbmc/guilib/GUIFontTTF.h | 2 +- - 2 files changed, 8 insertions(+), 6 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 3f219d9..1aaf68b 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -330,6 +330,8 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - { - Begin(); - -+ std::vector<SVertex> &vertices = m_vertex; -+ - // save the origin, which is scaled separately - m_originX = x; - m_originY = y; -@@ -410,7 +412,7 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - - for (int i = 0; i < 3; i++) - { -- RenderCharacter(startX + cursorX, startY, period, color, !scrolling); -+ RenderCharacter(startX + cursorX, startY, period, color, !scrolling, vertices); - cursorX += period->advance; - } - break; -@@ -419,7 +421,7 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - else if (maxPixelWidth > 0 && cursorX > maxPixelWidth) - break; // exceeded max allowed width - stop rendering - -- RenderCharacter(startX + cursorX, startY, ch, color, !scrolling); -+ RenderCharacter(startX + cursorX, startY, ch, color, !scrolling, vertices); - if ( alignment & XBFONT_JUSTIFIED ) - { - if ((*pos & 0xffff) == L' ') -@@ -676,7 +678,7 @@ bool CGUIFontTTFBase::CacheCharacter(wchar_t letter, uint32_t style, Character * - return true; - } - --void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *ch, color_t color, bool roundX) -+void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *ch, color_t color, bool roundX, std::vector<SVertex> &vertices) - { - // actual image width isn't same as the character width as that is - // just baseline width and height should include the descent -@@ -742,8 +744,8 @@ void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *c - float tt = texture.y1 * m_textureScaleY; - float tb = texture.y2 * m_textureScaleY; - -- m_vertex.resize(m_vertex.size() + 4); -- SVertex* v = &m_vertex[m_vertex.size() - 4]; -+ vertices.resize(vertices.size() + 4); -+ SVertex* v = &vertices[vertices.size() - 4]; - m_color = color; - - unsigned char r = GET_R(color) -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 35e3cf9..4a6a696 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -109,7 +109,7 @@ class CGUIFontTTFBase - // Stuff for pre-rendering for speed - inline Character *GetCharacter(character_t letter); - bool CacheCharacter(wchar_t letter, uint32_t style, Character *ch); -- void RenderCharacter(float posX, float posY, const Character *ch, color_t color, bool roundX); -+ void RenderCharacter(float posX, float posY, const Character *ch, color_t color, bool roundX, std::vector<SVertex> &vertices); - void ClearCharacterCache(); - - virtual CBaseTexture* ReallocTexture(unsigned int& newHeight) = 0; --- -1.9.3 - - -From 79263f02e56ef10410984c98a844aaa9bf43199e Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 15 Jan 2014 17:18:38 +0000 -Subject: [PATCH 22/94] Add a cache of font glyph bounding box vertices. This - is implemented as a template because ultimately we will key on different - parameters and store values of different types, depending upon whether we - have a GLES or non-GLES backend, and for GLES, whether or not the currently - applicable transformation matrices permit the use of hardware clipping. - ---- - xbmc/guilib/GUIFontCache.cpp | 105 ++++++++++++++++++++ - xbmc/guilib/GUIFontCache.h | 217 ++++++++++++++++++++++++++++++++++++++++++ - xbmc/guilib/GUIFontTTF.cpp | 181 +++++++++++++++++++---------------- - xbmc/guilib/GUIFontTTF.h | 5 + - xbmc/guilib/GUIFontTTFGL.cpp | 1 + - xbmc/guilib/GraphicContext.h | 1 + - xbmc/guilib/Makefile.in | 1 + - xbmc/guilib/TransformMatrix.h | 11 +++ - 8 files changed, 438 insertions(+), 84 deletions(-) - create mode 100644 xbmc/guilib/GUIFontCache.cpp - create mode 100644 xbmc/guilib/GUIFontCache.h - -diff --git a/xbmc/guilib/GUIFontCache.cpp b/xbmc/guilib/GUIFontCache.cpp -new file mode 100644 -index 0000000..c029713 ---- /dev/null -+++ b/xbmc/guilib/GUIFontCache.cpp -@@ -0,0 +1,105 @@ -+/* -+ * Copyright (C) 2005-2013 Team XBMC -+ * http://xbmc.org -+ * -+ * This Program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * This Program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with XBMC; see the file COPYING. If not, see -+ * <http://www.gnu.org/licenses/>. -+ * -+ */ -+ -+#include <stdint.h> -+#include <vector> -+#include "utils/StdString.h" // required by GUIFontTTF.h -+#include "GUIFontTTF.h" -+#include "GraphicContext.h" -+ -+template<class Position, class Value> -+void CGUIFontCacheEntry<Position, Value>::Reassign::operator()(CGUIFontCacheEntry<Position, Value> &entry) -+{ -+ entry.m_key.m_pos = m_key.m_pos; -+ entry.m_key.m_colors.assign(m_key.m_colors.begin(), m_key.m_colors.end()); -+ entry.m_key.m_text.assign(m_key.m_text.begin(), m_key.m_text.end()); -+ entry.m_key.m_alignment = m_key.m_alignment; -+ entry.m_key.m_maxPixelWidth = m_key.m_maxPixelWidth; -+ entry.m_key.m_scrolling = m_key.m_scrolling; -+ entry.m_matrix = m_key.m_matrix; -+ entry.m_key.m_scaleX = m_key.m_scaleX; -+ entry.m_key.m_scaleY = m_key.m_scaleY; -+ -+ entry.m_lastUsedMillis = m_nowMillis; -+ entry.m_value.clear(); -+} -+ -+template<class Position, class Value> -+CGUIFontCacheEntry<Position, Value>::~CGUIFontCacheEntry() -+{ -+ delete &m_key.m_colors; -+ delete &m_key.m_text; -+ m_value.clear(); -+} -+ -+template<class Position, class Value> -+Value &CGUIFontCache<Position, Value>::Lookup(Position &pos, -+ const vecColors &colors, const vecText &text, -+ uint32_t alignment, float maxPixelWidth, -+ bool scrolling, -+ unsigned int nowMillis, bool &dirtyCache) -+{ -+ const CGUIFontCacheKey<Position> key(pos, -+ const_cast<vecColors &>(colors), const_cast<vecText &>(text), -+ alignment, maxPixelWidth, -+ scrolling, g_graphicsContext.GetGUIMatrix(), -+ g_graphicsContext.GetGUIScaleX(), g_graphicsContext.GetGUIScaleY()); -+ EntryHashIterator i = m_list.get<Hash>().find(key); -+ if (i == m_list.get<Hash>().end()) -+ { -+ /* Cache miss */ -+ EntryAgeIterator oldest = m_list.get<Age>().begin(); -+ if (!m_list.get<Age>().empty() && nowMillis - oldest->m_lastUsedMillis > FONT_CACHE_TIME_LIMIT) -+ { -+ /* The oldest existing entry is old enough to expire and reuse */ -+ m_list.get<Hash>().modify(m_list.project<Hash>(oldest), typename CGUIFontCacheEntry<Position, Value>::Reassign(key, nowMillis)); -+ m_list.get<Age>().relocate(m_list.get<Age>().end(), oldest); -+ } -+ else -+ { -+ /* We need a new entry instead */ -+ /* Yes, this causes the creation an destruction of a temporary entry, but -+ * this code ought to only be used infrequently, when the cache needs to grow */ -+ m_list.get<Age>().push_back(CGUIFontCacheEntry<Position, Value>(*this, key, nowMillis)); -+ } -+ dirtyCache = true; -+ return (--m_list.get<Age>().end())->m_value; -+ } -+ else -+ { -+ /* Cache hit */ -+ /* Update time in entry and move to the back of the list */ -+ i->m_lastUsedMillis = nowMillis; -+ m_list.get<Age>().relocate(m_list.get<Age>().end(), m_list.project<Age>(i)); -+ dirtyCache = false; -+ return i->m_value; -+ } -+} -+ -+template<class Position, class Value> -+void CGUIFontCache<Position, Value>::Flush() -+{ -+ m_list.get<Age>().clear(); -+} -+ -+template void CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Reassign::operator()(CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue> &entry); -+template CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::~CGUIFontCacheEntry(); -+template CGUIFontCacheStaticValue &CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Lookup(CGUIFontCacheStaticPosition &, const vecColors &, const vecText &, uint32_t, float, bool, unsigned int, bool &); -+template void CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Flush(); -diff --git a/xbmc/guilib/GUIFontCache.h b/xbmc/guilib/GUIFontCache.h -new file mode 100644 -index 0000000..ef65845 ---- /dev/null -+++ b/xbmc/guilib/GUIFontCache.h -@@ -0,0 +1,217 @@ -+/*! -+\file GUIFontCache.h -+\brief -+*/ -+ -+#ifndef CGUILIB_GUIFONTCACHE_H -+#define CGUILIB_GUIFONTCACHE_H -+#pragma once -+ -+/* -+ * Copyright (C) 2005-2013 Team XBMC -+ * http://xbmc.org -+ * -+ * This Program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * This Program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with XBMC; see the file COPYING. If not, see -+ * <http://www.gnu.org/licenses/>. -+ * -+ */ -+ -+#include <cstddef> -+#include <cstring> -+#include <stdint.h> -+ -+#include <algorithm> -+#include <vector> -+ -+#include "boost/multi_index_container.hpp" -+#include "boost/multi_index/sequenced_index.hpp" -+#include "boost/multi_index/hashed_index.hpp" -+#include "boost/multi_index/member.hpp" -+ -+#include "TransformMatrix.h" -+ -+using namespace boost::multi_index; -+ -+#define FONT_CACHE_TIME_LIMIT (1000) -+ -+template<class Position, class Value> class CGUIFontCache; -+class CGUIFontTTFBase; -+ -+template<class Position> -+struct CGUIFontCacheKey -+{ -+ Position m_pos; -+ vecColors &m_colors; -+ vecText &m_text; -+ uint32_t m_alignment; -+ float m_maxPixelWidth; -+ bool m_scrolling; -+ const TransformMatrix &m_matrix; -+ float m_scaleX; -+ float m_scaleY; -+ -+ CGUIFontCacheKey(Position pos, -+ vecColors &colors, vecText &text, -+ uint32_t alignment, float maxPixelWidth, -+ bool scrolling, const TransformMatrix &matrix, -+ float scaleX, float scaleY) : -+ m_pos(pos), -+ m_colors(colors), m_text(text), -+ m_alignment(alignment), m_maxPixelWidth(maxPixelWidth), -+ m_scrolling(scrolling), m_matrix(matrix), -+ m_scaleX(scaleX), m_scaleY(scaleY) -+ {} -+}; -+ -+template<class Position, class Value> -+struct CGUIFontCacheEntry -+{ -+ const CGUIFontCache<Position, Value> &m_cache; -+ CGUIFontCacheKey<Position> m_key; -+ TransformMatrix m_matrix; -+ -+ /* These need to be declared as mutable to get round the fact that only -+ * const iterators are available. These fields do not affect comparison or -+ * hash functors, so from the container's point of view, they are mutable. */ -+ mutable unsigned int m_lastUsedMillis; -+ mutable Value m_value; -+ -+ CGUIFontCacheEntry(const CGUIFontCache<Position, Value> &cache, const CGUIFontCacheKey<Position> &key, unsigned int nowMillis) : -+ m_cache(cache), -+ m_key(key.m_pos, -+ *new vecColors, *new vecText, -+ key.m_alignment, key.m_maxPixelWidth, -+ key.m_scrolling, m_matrix, -+ key.m_scaleX, key.m_scaleY), -+ m_lastUsedMillis(nowMillis) -+ { -+ m_key.m_colors.assign(key.m_colors.begin(), key.m_colors.end()); -+ m_key.m_text.assign(key.m_text.begin(), key.m_text.end()); -+ m_matrix = key.m_matrix; -+ } -+ -+ CGUIFontCacheEntry(const CGUIFontCacheEntry &other) : -+ m_cache(other.m_cache), -+ m_key(other.m_key.m_pos, -+ *new vecColors, *new vecText, -+ other.m_key.m_alignment, other.m_key.m_maxPixelWidth, -+ other.m_key.m_scrolling, m_matrix, -+ other.m_key.m_scaleX, other.m_key.m_scaleY), -+ m_lastUsedMillis(other.m_lastUsedMillis), -+ m_value(other.m_value) -+ { -+ m_key.m_colors.assign(other.m_key.m_colors.begin(), other.m_key.m_colors.end()); -+ m_key.m_text.assign(other.m_key.m_text.begin(), other.m_key.m_text.end()); -+ m_matrix = other.m_key.m_matrix; -+ } -+ -+ struct Reassign -+ { -+ Reassign(const CGUIFontCacheKey<Position> &key, unsigned int nowMillis) : m_key(key), m_nowMillis(nowMillis) {} -+ void operator()(CGUIFontCacheEntry &entry); -+ private: -+ const CGUIFontCacheKey<Position> &m_key; -+ unsigned int m_nowMillis; -+ }; -+ -+ ~CGUIFontCacheEntry(); -+}; -+ -+template<class Position> -+struct CGUIFontCacheHash -+{ -+ size_t operator()(const CGUIFontCacheKey<Position> &key) const -+ { -+ /* Not much effort has gone into choosing this hash function */ -+ size_t hash = 0, i; -+ for (i = 0; i < 3 && i < key.m_text.size(); ++i) -+ hash += key.m_text[i]; -+ if (key.m_colors.size()) -+ hash += key.m_colors[0]; -+ hash += MatrixHashContribution(key); -+ return hash; -+ } -+}; -+ -+template<class Position> -+struct CGUIFontCacheKeysMatch -+{ -+ bool operator()(const CGUIFontCacheKey<Position> &a, const CGUIFontCacheKey<Position> &b) const -+ { -+ return a.m_text == b.m_text && -+ a.m_colors == b.m_colors && -+ a.m_alignment == b.m_alignment && -+ a.m_scrolling == b.m_scrolling && -+ a.m_maxPixelWidth == b.m_maxPixelWidth && -+ Match(a.m_pos, a.m_matrix, b.m_pos, b.m_matrix, a.m_scrolling) && -+ a.m_scaleX == b.m_scaleX && -+ a.m_scaleY == b.m_scaleY; -+ } -+}; -+ -+template<class Position, class Value> -+class CGUIFontCache -+{ -+ /* Empty structs used as tags to identify indexes */ -+ struct Age {}; -+ struct Hash {}; -+ -+ typedef multi_index_container< -+ CGUIFontCacheEntry<Position, Value>, -+ indexed_by< -+ sequenced<tag<Age> >, -+ hashed_unique<tag<Hash>, member<CGUIFontCacheEntry<Position, Value>, CGUIFontCacheKey<Position>, &CGUIFontCacheEntry<Position, Value>::m_key>, CGUIFontCacheHash<Position>, CGUIFontCacheKeysMatch<Position> > -+ > -+ > EntryList; -+ -+ typedef typename EntryList::template index<Age>::type::iterator EntryAgeIterator; -+ typedef typename EntryList::template index<Hash>::type::iterator EntryHashIterator; -+ -+ EntryList m_list; -+ -+public: -+ const CGUIFontTTFBase &m_font; -+ -+ CGUIFontCache(CGUIFontTTFBase &font) : m_font(font) {} -+ Value &Lookup(Position &pos, -+ const vecColors &colors, const vecText &text, -+ uint32_t alignment, float maxPixelWidth, -+ bool scrolling, -+ unsigned int nowMillis, bool &dirtyCache); -+ void Flush(); -+}; -+ -+struct CGUIFontCacheStaticPosition -+{ -+ float m_x; -+ float m_y; -+ CGUIFontCacheStaticPosition(float x, float y) : m_x(x), m_y(y) {} -+}; -+ -+typedef std::vector<SVertex> CGUIFontCacheStaticValue; -+ -+inline bool Match(const CGUIFontCacheStaticPosition &a, const TransformMatrix &a_m, -+ const CGUIFontCacheStaticPosition &b, const TransformMatrix &b_m, -+ bool scrolling) -+{ -+ return a.m_x == b.m_x && a.m_y == b.m_y && a_m == b_m; -+} -+ -+inline float MatrixHashContribution(const CGUIFontCacheKey<CGUIFontCacheStaticPosition> &a) -+{ -+ /* Ensure horizontally translated versions end up in different buckets */ -+ return a.m_matrix.m[0][3]; -+} -+ -+#endif -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 1aaf68b..288e61a 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -27,6 +27,7 @@ - #include "utils/MathUtils.h" - #include "utils/log.h" - #include "windowing/WindowingFactory.h" -+#include "threads/SystemClock.h" - - #include <math.h> - -@@ -131,7 +132,7 @@ class CFreeTypeLibrary - XBMC_GLOBAL_REF(CFreeTypeLibrary, g_freeTypeLibrary); // our freetype library - #define g_freeTypeLibrary XBMC_GLOBAL_USE(CFreeTypeLibrary) - --CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) -+CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) : m_staticCache(*this) - { - m_texture = NULL; - m_char = NULL; -@@ -330,108 +331,120 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - { - Begin(); - -- std::vector<SVertex> &vertices = m_vertex; -- -- // save the origin, which is scaled separately -- m_originX = x; -- m_originY = y; -- -- // Check if we will really need to truncate or justify the text -- if ( alignment & XBFONT_TRUNCATED ) -+ bool dirtyCache; -+ CGUIFontCacheStaticPosition staticPos(x, y); -+ std::vector<SVertex> &vertices = m_staticCache.Lookup(staticPos, -+ colors, text, -+ alignment, maxPixelWidth, -+ scrolling, -+ XbmcThreads::SystemClockMillis(), -+ dirtyCache); -+ if (dirtyCache) - { -- if ( maxPixelWidth <= 0.0f || GetTextWidthInternal(text.begin(), text.end()) <= maxPixelWidth) -- alignment &= ~XBFONT_TRUNCATED; -- } -- else if ( alignment & XBFONT_JUSTIFIED ) -- { -- if ( maxPixelWidth <= 0.0f ) -- alignment &= ~XBFONT_JUSTIFIED; -- } -+ // save the origin, which is scaled separately -+ m_originX = x; -+ m_originY = y; - -- // calculate sizing information -- float startX = 0; -- float startY = (alignment & XBFONT_CENTER_Y) ? -0.5f*m_cellHeight : 0; // vertical centering -+ // Check if we will really need to truncate or justify the text -+ if ( alignment & XBFONT_TRUNCATED ) -+ { -+ if ( maxPixelWidth <= 0.0f || GetTextWidthInternal(text.begin(), text.end()) <= maxPixelWidth) -+ alignment &= ~XBFONT_TRUNCATED; -+ } -+ else if ( alignment & XBFONT_JUSTIFIED ) -+ { -+ if ( maxPixelWidth <= 0.0f ) -+ alignment &= ~XBFONT_JUSTIFIED; -+ } - -- if ( alignment & (XBFONT_RIGHT | XBFONT_CENTER_X) ) -- { -- // Get the extent of this line -- float w = GetTextWidthInternal( text.begin(), text.end() ); -+ // calculate sizing information -+ float startX = 0; -+ float startY = (alignment & XBFONT_CENTER_Y) ? -0.5f*m_cellHeight : 0; // vertical centering - -- if ( alignment & XBFONT_TRUNCATED && w > maxPixelWidth + 0.5f ) // + 0.5f due to rounding issues -- w = maxPixelWidth; -+ if ( alignment & (XBFONT_RIGHT | XBFONT_CENTER_X) ) -+ { -+ // Get the extent of this line -+ float w = GetTextWidthInternal( text.begin(), text.end() ); - -- if ( alignment & XBFONT_CENTER_X) -- w *= 0.5f; -- // Offset this line's starting position -- startX -= w; -- } -+ if ( alignment & XBFONT_TRUNCATED && w > maxPixelWidth + 0.5f ) // + 0.5f due to rounding issues -+ w = maxPixelWidth; - -- float spacePerLetter = 0; // for justification effects -- if ( alignment & XBFONT_JUSTIFIED ) -- { -- // first compute the size of the text to render in both characters and pixels -- unsigned int lineChars = 0; -- float linePixels = 0; -- for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) -+ if ( alignment & XBFONT_CENTER_X) -+ w *= 0.5f; -+ // Offset this line's starting position -+ startX -= w; -+ } -+ -+ float spacePerLetter = 0; // for justification effects -+ if ( alignment & XBFONT_JUSTIFIED ) - { -- Character *ch = GetCharacter(*pos); -- if (ch) -- { // spaces have multiple times the justification spacing of normal letters -- lineChars += ((*pos & 0xffff) == L' ') ? justification_word_weight : 1; -- linePixels += ch->advance; -+ // first compute the size of the text to render in both characters and pixels -+ unsigned int lineChars = 0; -+ float linePixels = 0; -+ for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) -+ { -+ Character *ch = GetCharacter(*pos); -+ if (ch) -+ { // spaces have multiple times the justification spacing of normal letters -+ lineChars += ((*pos & 0xffff) == L' ') ? justification_word_weight : 1; -+ linePixels += ch->advance; -+ } - } -+ if (lineChars > 1) -+ spacePerLetter = (maxPixelWidth - linePixels) / (lineChars - 1); - } -- if (lineChars > 1) -- spacePerLetter = (maxPixelWidth - linePixels) / (lineChars - 1); -- } -- float cursorX = 0; // current position along the line -- -- for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) -- { -- // If starting text on a new line, determine justification effects -- // Get the current letter in the CStdString -- color_t color = (*pos & 0xff0000) >> 16; -- if (color >= colors.size()) -- color = 0; -- color = colors[color]; -+ float cursorX = 0; // current position along the line - -- // grab the next character -- Character *ch = GetCharacter(*pos); -- if (!ch) continue; -- -- if ( alignment & XBFONT_TRUNCATED ) -+ for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) - { -- // Check if we will be exceeded the max allowed width -- if ( cursorX + ch->advance + 3 * m_ellipsesWidth > maxPixelWidth ) -- { -- // Yup. Let's draw the ellipses, then bail -- // Perhaps we should really bail to the next line in this case?? -- Character *period = GetCharacter(L'.'); -- if (!period) -- break; -+ // If starting text on a new line, determine justification effects -+ // Get the current letter in the CStdString -+ color_t color = (*pos & 0xff0000) >> 16; -+ if (color >= colors.size()) -+ color = 0; -+ color = colors[color]; -+ -+ // grab the next character -+ Character *ch = GetCharacter(*pos); -+ if (!ch) continue; - -- for (int i = 0; i < 3; i++) -+ if ( alignment & XBFONT_TRUNCATED ) -+ { -+ // Check if we will be exceeded the max allowed width -+ if ( cursorX + ch->advance + 3 * m_ellipsesWidth > maxPixelWidth ) - { -- RenderCharacter(startX + cursorX, startY, period, color, !scrolling, vertices); -- cursorX += period->advance; -+ // Yup. Let's draw the ellipses, then bail -+ // Perhaps we should really bail to the next line in this case?? -+ Character *period = GetCharacter(L'.'); -+ if (!period) -+ break; -+ -+ for (int i = 0; i < 3; i++) -+ { -+ RenderCharacter(startX + cursorX, startY, period, color, !scrolling, vertices); -+ cursorX += period->advance; -+ } -+ break; - } -- break; - } -- } -- else if (maxPixelWidth > 0 && cursorX > maxPixelWidth) -- break; // exceeded max allowed width - stop rendering -+ else if (maxPixelWidth > 0 && cursorX > maxPixelWidth) -+ break; // exceeded max allowed width - stop rendering - -- RenderCharacter(startX + cursorX, startY, ch, color, !scrolling, vertices); -- if ( alignment & XBFONT_JUSTIFIED ) -- { -- if ((*pos & 0xffff) == L' ') -- cursorX += ch->advance + spacePerLetter * justification_word_weight; -+ RenderCharacter(startX + cursorX, startY, ch, color, !scrolling, vertices); -+ if ( alignment & XBFONT_JUSTIFIED ) -+ { -+ if ((*pos & 0xffff) == L' ') -+ cursorX += ch->advance + spacePerLetter * justification_word_weight; -+ else -+ cursorX += ch->advance + spacePerLetter; -+ } - else -- cursorX += ch->advance + spacePerLetter; -+ cursorX += ch->advance; - } -- else -- cursorX += ch->advance; - } -+ /* Append the new vertices (from the cache or otherwise) to the set collected -+ * since the first Begin() call */ -+ m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); - - End(); - } -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 4a6a696..7cb4669 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -64,6 +64,9 @@ struct SVertex - }; - - -+#include "GUIFontCache.h" -+ -+ - class CGUIFontTTFBase - { - friend class CGUIFont; -@@ -166,6 +169,8 @@ class CGUIFontTTFBase - - CStdString m_strFileName; - -+ CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue> m_staticCache; -+ - private: - virtual bool FirstBegin() = 0; - virtual void LastEnd() = 0; -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index a4e8571..cb56987 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -200,6 +200,7 @@ CBaseTexture* CGUIFontTTFGL::ReallocTexture(unsigned int& newHeight) - m_textureScaleX = 1.0f / m_textureWidth; - if (m_textureHeight < newHeight) - CLog::Log(LOGWARNING, "%s: allocated new texture with height of %d, requested %d", __FUNCTION__, m_textureHeight, newHeight); -+ m_staticCache.Flush(); - - memset(newTexture->GetPixels(), 0, m_textureHeight * newTexture->GetPitch()); - if (m_texture) -diff --git a/xbmc/guilib/GraphicContext.h b/xbmc/guilib/GraphicContext.h -index 6c2dcd4..bab2457 100644 ---- a/xbmc/guilib/GraphicContext.h -+++ b/xbmc/guilib/GraphicContext.h -@@ -146,6 +146,7 @@ class CGraphicContext : public CCriticalSection, - inline void ScaleFinalCoords(float &x, float &y, float &z) const XBMC_FORCE_INLINE { m_finalTransform.matrix.TransformPosition(x, y, z); } - bool RectIsAngled(float x1, float y1, float x2, float y2) const; - -+ inline const TransformMatrix &GetGUIMatrix() const XBMC_FORCE_INLINE { return m_finalTransform.matrix; } - inline float GetGUIScaleX() const XBMC_FORCE_INLINE { return m_finalTransform.scaleX; } - inline float GetGUIScaleY() const XBMC_FORCE_INLINE { return m_finalTransform.scaleY; } - inline color_t MergeAlpha(color_t color) const XBMC_FORCE_INLINE -diff --git a/xbmc/guilib/Makefile.in b/xbmc/guilib/Makefile.in -index 086fb0d..af82979 100644 ---- a/xbmc/guilib/Makefile.in -+++ b/xbmc/guilib/Makefile.in -@@ -23,6 +23,7 @@ SRCS += GUIEditControl.cpp - SRCS += GUIFadeLabelControl.cpp - SRCS += GUIFixedListContainer.cpp - SRCS += GUIFont.cpp -+SRCS += GUIFontCache.cpp - SRCS += GUIFontManager.cpp - SRCS += GUIFontTTF.cpp - SRCS += GUIImage.cpp -diff --git a/xbmc/guilib/TransformMatrix.h b/xbmc/guilib/TransformMatrix.h -index f351c99..9036ba9 100644 ---- a/xbmc/guilib/TransformMatrix.h -+++ b/xbmc/guilib/TransformMatrix.h -@@ -245,3 +245,14 @@ class TransformMatrix - float alpha; - bool identity; - }; -+ -+inline bool operator==(const TransformMatrix &a, const TransformMatrix &b) -+{ -+ return a.alpha == b.alpha && ((a.identity && b.identity) || -+ (!a.identity && !b.identity && std::equal(&a.m[0][0], &a.m[0][0] + sizeof a.m / sizeof a.m[0][0], &b.m[0][0]))); -+} -+ -+inline bool operator!=(const TransformMatrix &a, const TransformMatrix &b) -+{ -+ return !operator==(a, b); -+} --- -1.9.3 - - -From 65d2b7f112b400f75140de44579e6cdf98378b67 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Thu, 23 Jan 2014 22:24:17 +0000 -Subject: [PATCH 23/94] Lay the groundwork for hardware clipping. - -For glScissor() to replace CGraphicContext::ClipRect, a necessary condition -is that no shear or rotation is introduced between the coordinate systems -they use; this depends upon the settings of the GUI matrix m_finalTransform -as well as the OpenGL model-view and projection matrices. These all remain -unchanged between paired calls of CGUIShader::OnEnabled and -CGUIShader::OnDisabled, so we scan the matrices in CGUIShader::OnEnabled to -see whether hardware clipping is possible. - -Then, in CGUIFontTTFBase::RenderCharacter, we don't apply software clipping -in such cases. However, because vertices arising from multiple -CGUIFontTTFBase::DrawTextInternal calls (each of which often uses a different -clip rectangle) get lumped into the same vector, which only at the end is -passed to OpenGL for rendering, we need to wait a few commits before we can -actually apply hardware clipping. In the meantime, expect to see rendering -errors. ---- - xbmc/guilib/GUIFontTTF.cpp | 3 +- - xbmc/guilib/GUIShader.cpp | 80 +++++++++++++++++++++++++++++++- - xbmc/guilib/GUIShader.h | 11 +++++ - xbmc/guilib/GraphicContext.cpp | 10 ++++ - xbmc/guilib/GraphicContext.h | 1 + - xbmc/rendering/RenderSystem.h | 2 + - xbmc/rendering/gles/RenderSystemGLES.cpp | 22 +++++++++ - xbmc/rendering/gles/RenderSystemGLES.h | 2 + - 8 files changed, 128 insertions(+), 3 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 288e61a..19c7ff4 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -710,7 +710,8 @@ void CGUIFontTTFBase::RenderCharacter(float posX, float posY, const Character *c - (posY + ch->offsetY + height) * g_graphicsContext.GetGUIScaleY()); - vertex += CPoint(m_originX, m_originY); - CRect texture(ch->left, ch->top, ch->right, ch->bottom); -- g_graphicsContext.ClipRect(vertex, texture); -+ if (!g_Windowing.ScissorsCanEffectClipping()) -+ g_graphicsContext.ClipRect(vertex, texture); - - // transform our positions - note, no scaling due to GUI calibration/resolution occurs - float x[4], y[4], z[4]; -diff --git a/xbmc/guilib/GUIShader.cpp b/xbmc/guilib/GUIShader.cpp -index 11089b8..53bce09 100644 ---- a/xbmc/guilib/GUIShader.cpp -+++ b/xbmc/guilib/GUIShader.cpp -@@ -26,6 +26,8 @@ - #include "GUIShader.h" - #include "MatrixGLES.h" - #include "utils/log.h" -+#include "windowing/egl/WinSystemEGL.h" -+#include "guilib/GraphicContext.h" - - CGUIShader::CGUIShader( const char *shader ) : CGLSLShaderProgram("guishader_vert.glsl", shader) - { -@@ -86,8 +88,82 @@ bool CGUIShader::OnEnabled() - { - // This is called after glUseProgram() - -- glUniformMatrix4fv(m_hProj, 1, GL_FALSE, g_matrices.GetMatrix(MM_PROJECTION)); -- glUniformMatrix4fv(m_hModel, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); -+ GLfloat *projMatrix = g_matrices.GetMatrix(MM_PROJECTION); -+ GLfloat *modelMatrix = g_matrices.GetMatrix(MM_MODELVIEW); -+ glUniformMatrix4fv(m_hProj, 1, GL_FALSE, projMatrix); -+ glUniformMatrix4fv(m_hModel, 1, GL_FALSE, modelMatrix); -+ -+ const TransformMatrix &guiMatrix = g_graphicsContext.GetGUIMatrix(); -+ CRect viewPort; // absolute positions of corners -+ g_Windowing.GetViewPort(viewPort); -+ -+ /* glScissor operates in window coordinates. In order that we can use it to -+ * perform clipping, we must ensure that there is an independent linear -+ * transformation from the coordinate system used by CGraphicContext::ClipRect -+ * to window coordinates, separately for X and Y (in other words, no -+ * rotation or shear is introduced at any stage). To do, this, we need to -+ * check that zeros are present in the following locations: -+ * -+ * GUI matrix: -+ * / * 0 * * \ -+ * | 0 * * * | -+ * \ 0 0 * * / -+ * ^ TransformMatrix::TransformX/Y/ZCoord are only ever called with -+ * input z = 0, so this column doesn't matter -+ * Model-view matrix: -+ * / * 0 0 * \ -+ * | 0 * 0 * | -+ * | 0 0 * * | -+ * \ * * * * / <- eye w has no influence on window x/y (last column below -+ * is either 0 or ignored) -+ * Projection matrix: -+ * / * 0 0 0 \ -+ * | 0 * 0 0 | -+ * | * * * * | <- normalised device coordinate z has no influence on window x/y -+ * \ 0 0 * 0 / -+ * -+ * Some of these zeros are not strictly required to ensure this, but they tend -+ * to be zeroed in the common case, so by checking for zeros here, we simplify -+ * the calculation of the window x/y coordinates further down the line. -+ * -+ * (Minor detail: we don't quite deal in window coordinates as defined by -+ * OpenGL, because CRenderSystemGLES::SetScissors flips the Y axis. But all -+ * that's needed to handle that is an effective negation at the stage where -+ * Y is in normalised device coordinates.) -+ */ -+ m_clipPossible = guiMatrix.m[0][1] == 0 && -+ guiMatrix.m[1][0] == 0 && -+ guiMatrix.m[2][0] == 0 && -+ guiMatrix.m[2][1] == 0 && -+ modelMatrix[0+1*4] == 0 && -+ modelMatrix[0+2*4] == 0 && -+ modelMatrix[1+0*4] == 0 && -+ modelMatrix[1+2*4] == 0 && -+ modelMatrix[2+0*4] == 0 && -+ modelMatrix[2+1*4] == 0 && -+ projMatrix[0+1*4] == 0 && -+ projMatrix[0+2*4] == 0 && -+ projMatrix[0+3*4] == 0 && -+ projMatrix[1+0*4] == 0 && -+ projMatrix[1+2*4] == 0 && -+ projMatrix[1+3*4] == 0 && -+ projMatrix[3+0*4] == 0 && -+ projMatrix[3+1*4] == 0 && -+ projMatrix[3+3*4] == 0; -+ if (m_clipPossible) -+ { -+ m_clipXFactor = guiMatrix.m[0][0] * modelMatrix[0+0*4] * projMatrix[0+0*4]; -+ m_clipXOffset = (guiMatrix.m[0][3] * modelMatrix[0+0*4] + modelMatrix[0+3*4]) * projMatrix[0+0*4]; -+ m_clipYFactor = guiMatrix.m[1][1] * modelMatrix[1+1*4] * projMatrix[1+1*4]; -+ m_clipYOffset = (guiMatrix.m[1][3] * modelMatrix[1+1*4] + modelMatrix[1+3*4]) * projMatrix[1+1*4]; -+ float clipW = (guiMatrix.m[2][3] * modelMatrix[2+2*4] + modelMatrix[2+3*4]) * projMatrix[3+2*4]; -+ float xMult = (viewPort.x2 - viewPort.x1) / (2 * clipW); -+ float yMult = (viewPort.y1 - viewPort.y2) / (2 * clipW); // correct for inverted window coordinate scheme -+ m_clipXFactor = m_clipXFactor * xMult; -+ m_clipXOffset = m_clipXOffset * xMult + (viewPort.x2 + viewPort.x1) / 2; -+ m_clipYFactor = m_clipYFactor * yMult; -+ m_clipYOffset = m_clipYOffset * yMult + (viewPort.y2 + viewPort.y1) / 2; -+ } - - return true; - } -diff --git a/xbmc/guilib/GUIShader.h b/xbmc/guilib/GUIShader.h -index c7e95aa..86ce4cc 100644 ---- a/xbmc/guilib/GUIShader.h -+++ b/xbmc/guilib/GUIShader.h -@@ -41,6 +41,11 @@ class CGUIShader : public CGLSLShaderProgram - GLint GetCord1Loc() { return m_hCord1; } - GLint GetUniColLoc() { return m_hUniCol; } - GLint GetCoord0MatrixLoc() { return m_hCoord0Matrix; } -+ bool HardwareClipIsPossible() { return m_clipPossible; } -+ GLfloat GetClipXFactor() { return m_clipXFactor; } -+ GLfloat GetClipXOffset() { return m_clipXOffset; } -+ GLfloat GetClipYFactor() { return m_clipYFactor; } -+ GLfloat GetClipYOffset() { return m_clipYOffset; } - - protected: - GLint m_hTex0; -@@ -56,6 +61,12 @@ class CGUIShader : public CGLSLShaderProgram - - GLfloat *m_proj; - GLfloat *m_model; -+ -+ bool m_clipPossible; -+ GLfloat m_clipXFactor; -+ GLfloat m_clipXOffset; -+ GLfloat m_clipYFactor; -+ GLfloat m_clipYOffset; - }; - - #endif // GUI_SHADER_H -diff --git a/xbmc/guilib/GraphicContext.cpp b/xbmc/guilib/GraphicContext.cpp -index 38f17a7..5bffdf5 100644 ---- a/xbmc/guilib/GraphicContext.cpp -+++ b/xbmc/guilib/GraphicContext.cpp -@@ -167,6 +167,16 @@ void CGraphicContext::ClipRect(CRect &vertex, CRect &texture, CRect *texture2) - } - } - -+CRect CGraphicContext::GetClipRegion() -+{ -+ if (m_clipRegions.empty()) -+ return CRect(0, 0, m_iScreenWidth, m_iScreenHeight); -+ CRect clipRegion(m_clipRegions.top()); -+ if (!m_origins.empty()) -+ clipRegion -= m_origins.top(); -+ return clipRegion; -+} -+ - bool CGraphicContext::SetViewPort(float fx, float fy, float fwidth, float fheight, bool intersectPrevious /* = false */) - { - // transform coordinates - we may have a rotation which changes the positioning of the -diff --git a/xbmc/guilib/GraphicContext.h b/xbmc/guilib/GraphicContext.h -index bab2457..0a27643 100644 ---- a/xbmc/guilib/GraphicContext.h -+++ b/xbmc/guilib/GraphicContext.h -@@ -199,6 +199,7 @@ class CGraphicContext : public CCriticalSection, - void ApplyHardwareTransform(); - void RestoreHardwareTransform(); - void ClipRect(CRect &vertex, CRect &texture, CRect *diffuse = NULL); -+ CRect GetClipRegion(); - inline void AddGUITransform() - { - m_transforms.push(m_finalTransform); -diff --git a/xbmc/rendering/RenderSystem.h b/xbmc/rendering/RenderSystem.h -index fa64eba..c1dfb93 100644 ---- a/xbmc/rendering/RenderSystem.h -+++ b/xbmc/rendering/RenderSystem.h -@@ -110,6 +110,8 @@ class CRenderSystemBase - virtual void GetViewPort(CRect& viewPort) = 0; - virtual void RestoreViewPort() {}; - -+ virtual bool ScissorsCanEffectClipping() { return false; } -+ virtual CRect ClipRectToScissorRect(const CRect &rect) { return CRect(); } - virtual void SetScissors(const CRect &rect) = 0; - virtual void ResetScissors() = 0; - -diff --git a/xbmc/rendering/gles/RenderSystemGLES.cpp b/xbmc/rendering/gles/RenderSystemGLES.cpp -index 653c9ec..deb3afc 100644 ---- a/xbmc/rendering/gles/RenderSystemGLES.cpp -+++ b/xbmc/rendering/gles/RenderSystemGLES.cpp -@@ -533,6 +533,28 @@ void CRenderSystemGLES::SetViewPort(CRect& viewPort) - m_viewPort[3] = viewPort.Height(); - } - -+bool CRenderSystemGLES::ScissorsCanEffectClipping() -+{ -+ if (m_pGUIshader[m_method]) -+ return m_pGUIshader[m_method]->HardwareClipIsPossible(); -+ -+ return false; -+} -+ -+CRect CRenderSystemGLES::ClipRectToScissorRect(const CRect &rect) -+{ -+ if (!m_pGUIshader[m_method]) -+ return CRect(); -+ float xFactor = m_pGUIshader[m_method]->GetClipXFactor(); -+ float xOffset = m_pGUIshader[m_method]->GetClipXOffset(); -+ float yFactor = m_pGUIshader[m_method]->GetClipYFactor(); -+ float yOffset = m_pGUIshader[m_method]->GetClipYOffset(); -+ return CRect(rect.x1 * xFactor + xOffset, -+ rect.y1 * yFactor + yOffset, -+ rect.x2 * xFactor + xOffset, -+ rect.y2 * yFactor + yOffset); -+} -+ - void CRenderSystemGLES::SetScissors(const CRect &rect) - { - if (!m_bRenderCreated) -diff --git a/xbmc/rendering/gles/RenderSystemGLES.h b/xbmc/rendering/gles/RenderSystemGLES.h -index 98e398a..81ee49e 100644 ---- a/xbmc/rendering/gles/RenderSystemGLES.h -+++ b/xbmc/rendering/gles/RenderSystemGLES.h -@@ -63,6 +63,8 @@ class CRenderSystemGLES : public CRenderSystemBase - virtual void SetViewPort(CRect& viewPort); - virtual void GetViewPort(CRect& viewPort); - -+ virtual bool ScissorsCanEffectClipping(); -+ virtual CRect ClipRectToScissorRect(const CRect &rect); - virtual void SetScissors(const CRect& rect); - virtual void ResetScissors(); - --- -1.9.3 - - -From e372121bc53da1b0353b51f5e9897011c5f54033 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Thu, 23 Jan 2014 16:42:22 +0000 -Subject: [PATCH 24/94] Increase font cache hit rate by keying on the - fractional part of m_originX and m_originY *after* they have been through the - graphics context's transformation matrix, plus the scale/rotation elements of - the matrix, rather than the origin in the original frame of reference plus - the complete transformation matrix. All vertices of individual glyph bounding - boxes are a constant offset from this position, and when the fractional part - of the translation is a match, the rounding of each vertex will be in the - same direction; this permits us to calculate the desired vertices from the - cached ones simply by adding the integer parts of the translations with no - additional rounding steps. - -Note that this requires that software clipping is *not* performed. ---- - xbmc/guilib/GUIFontCache.cpp | 8 +++++++ - xbmc/guilib/GUIFontCache.h | 43 +++++++++++++++++++++++++++++++++++ - xbmc/guilib/GUIFontTTF.cpp | 53 +++++++++++++++++++++++++++++++++++--------- - xbmc/guilib/GUIFontTTF.h | 1 + - 4 files changed, 95 insertions(+), 10 deletions(-) - -diff --git a/xbmc/guilib/GUIFontCache.cpp b/xbmc/guilib/GUIFontCache.cpp -index c029713..b66c00b 100644 ---- a/xbmc/guilib/GUIFontCache.cpp -+++ b/xbmc/guilib/GUIFontCache.cpp -@@ -85,6 +85,9 @@ Value &CGUIFontCache<Position, Value>::Lookup(Position &pos, - else - { - /* Cache hit */ -+ /* Update the translation arguments so that they hold the offset to apply -+ * to the cached values (but only in the dynamic case) */ -+ pos.UpdateWithOffsets(i->m_key.m_pos, scrolling); - /* Update time in entry and move to the back of the list */ - i->m_lastUsedMillis = nowMillis; - m_list.get<Age>().relocate(m_list.get<Age>().end(), m_list.project<Age>(i)); -@@ -103,3 +106,8 @@ template void CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStati - template CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::~CGUIFontCacheEntry(); - template CGUIFontCacheStaticValue &CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Lookup(CGUIFontCacheStaticPosition &, const vecColors &, const vecText &, uint32_t, float, bool, unsigned int, bool &); - template void CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Flush(); -+ -+template void CGUIFontCacheEntry<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::Reassign::operator()(CGUIFontCacheEntry<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue> &entry); -+template CGUIFontCacheEntry<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::~CGUIFontCacheEntry(); -+template CGUIFontCacheDynamicValue &CGUIFontCache<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::Lookup(CGUIFontCacheDynamicPosition &, const vecColors &, const vecText &, uint32_t, float, bool, unsigned int, bool &); -+template void CGUIFontCache<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::Flush(); -diff --git a/xbmc/guilib/GUIFontCache.h b/xbmc/guilib/GUIFontCache.h -index ef65845..d913dee 100644 ---- a/xbmc/guilib/GUIFontCache.h -+++ b/xbmc/guilib/GUIFontCache.h -@@ -44,6 +44,7 @@ - using namespace boost::multi_index; - - #define FONT_CACHE_TIME_LIMIT (1000) -+#define FONT_CACHE_DIST_LIMIT (0.01) - - template<class Position, class Value> class CGUIFontCache; - class CGUIFontTTFBase; -@@ -197,6 +198,7 @@ struct CGUIFontCacheStaticPosition - float m_x; - float m_y; - CGUIFontCacheStaticPosition(float x, float y) : m_x(x), m_y(y) {} -+ void UpdateWithOffsets(const CGUIFontCacheStaticPosition &cached, bool scrolling) {} - }; - - typedef std::vector<SVertex> CGUIFontCacheStaticValue; -@@ -214,4 +216,45 @@ inline float MatrixHashContribution(const CGUIFontCacheKey<CGUIFontCacheStaticPo - return a.m_matrix.m[0][3]; - } - -+struct CGUIFontCacheDynamicPosition -+{ -+ float m_x; -+ float m_y; -+ float m_z; -+ CGUIFontCacheDynamicPosition() {} -+ CGUIFontCacheDynamicPosition(float x, float y, float z) : m_x(x), m_y(y), m_z(z) {} -+ void UpdateWithOffsets(const CGUIFontCacheDynamicPosition &cached, bool scrolling) -+ { -+ if (scrolling) -+ m_x = m_x - cached.m_x; -+ else -+ m_x = floorf(m_x - cached.m_x + FONT_CACHE_DIST_LIMIT); -+ m_y = floorf(m_y - cached.m_y + FONT_CACHE_DIST_LIMIT); -+ m_z = floorf(m_z - cached.m_z + FONT_CACHE_DIST_LIMIT); -+ } -+}; -+ -+typedef std::vector<SVertex> CGUIFontCacheDynamicValue; -+ -+inline bool Match(const CGUIFontCacheDynamicPosition &a, const TransformMatrix &a_m, -+ const CGUIFontCacheDynamicPosition &b, const TransformMatrix &b_m, -+ bool scrolling) -+{ -+ float diffX = a.m_x - b.m_x + FONT_CACHE_DIST_LIMIT; -+ float diffY = a.m_y - b.m_y + FONT_CACHE_DIST_LIMIT; -+ float diffZ = a.m_z - b.m_z + FONT_CACHE_DIST_LIMIT; -+ return (scrolling || diffX - floorf(diffX) < 2 * FONT_CACHE_DIST_LIMIT) && -+ diffY - floorf(diffY) < 2 * FONT_CACHE_DIST_LIMIT && -+ diffZ - floorf(diffZ) < 2 * FONT_CACHE_DIST_LIMIT && -+ a_m.m[0][0] == b_m.m[0][0] && -+ a_m.m[1][1] == b_m.m[1][1] && -+ a_m.m[2][2] == b_m.m[2][2]; -+ // We already know the first 3 columns of both matrices are diagonal, so no need to check the other elements -+} -+ -+inline float MatrixHashContribution(const CGUIFontCacheKey<CGUIFontCacheDynamicPosition> &a) -+{ -+ return 0; -+} -+ - #endif -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 19c7ff4..73f0e50 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -132,7 +132,7 @@ class CFreeTypeLibrary - XBMC_GLOBAL_REF(CFreeTypeLibrary, g_freeTypeLibrary); // our freetype library - #define g_freeTypeLibrary XBMC_GLOBAL_USE(CFreeTypeLibrary) - --CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) : m_staticCache(*this) -+CGUIFontTTFBase::CGUIFontTTFBase(const CStdString& strFileName) : m_staticCache(*this), m_dynamicCache(*this) - { - m_texture = NULL; - m_char = NULL; -@@ -332,13 +332,28 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - Begin(); - - bool dirtyCache; -+ bool hardwareClipping = g_Windowing.ScissorsCanEffectClipping(); - CGUIFontCacheStaticPosition staticPos(x, y); -- std::vector<SVertex> &vertices = m_staticCache.Lookup(staticPos, -- colors, text, -- alignment, maxPixelWidth, -- scrolling, -- XbmcThreads::SystemClockMillis(), -- dirtyCache); -+ CGUIFontCacheDynamicPosition dynamicPos; -+ if (hardwareClipping) -+ { -+ dynamicPos = CGUIFontCacheDynamicPosition(g_graphicsContext.ScaleFinalXCoord(x, y), -+ g_graphicsContext.ScaleFinalYCoord(x, y), -+ g_graphicsContext.ScaleFinalZCoord(x, y)); -+ } -+ std::vector<SVertex> &vertices = hardwareClipping ? -+ m_dynamicCache.Lookup(dynamicPos, -+ colors, text, -+ alignment, maxPixelWidth, -+ scrolling, -+ XbmcThreads::SystemClockMillis(), -+ dirtyCache) : -+ m_staticCache.Lookup(staticPos, -+ colors, text, -+ alignment, maxPixelWidth, -+ scrolling, -+ XbmcThreads::SystemClockMillis(), -+ dirtyCache); - if (dirtyCache) - { - // save the origin, which is scaled separately -@@ -441,10 +456,28 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - else - cursorX += ch->advance; - } -+ if (hardwareClipping) -+ /* Append the new vertices (which we have just constructed in the cache) -+ * to the set collected since the first Begin() call */ -+ m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); -+ } -+ else if (hardwareClipping) -+ { -+ /* Apply the translation offset to the vertices from the cache after -+ * appending them to the set collected since the first Begin() call */ -+ m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); -+ SVertex *v; -+ for (v = &*m_vertex.end() - vertices.size(); v != &*m_vertex.end(); v++) -+ { -+ v->x += dynamicPos.m_x; -+ v->y += dynamicPos.m_y; -+ v->z += dynamicPos.m_z; -+ } - } -- /* Append the new vertices (from the cache or otherwise) to the set collected -- * since the first Begin() call */ -- m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); -+ if (!hardwareClipping) -+ /* Append the new vertices (from the cache or otherwise) to the set collected -+ * since the first Begin() call */ -+ m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); - - End(); - } -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 7cb4669..78445ab 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -170,6 +170,7 @@ class CGUIFontTTFBase - CStdString m_strFileName; - - CGUIFontCache<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue> m_staticCache; -+ CGUIFontCache<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue> m_dynamicCache; - - private: - virtual bool FirstBegin() = 0; --- -1.9.3 - - -From 10eeb73ca15798de26abd5f8846214c8938f8b42 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 8 Jan 2014 12:16:33 +0000 -Subject: [PATCH 25/94] Rewrite of scrolling text code. - -No longer shuffles the string round to minimise the number of characters -before the clipping rectangle; this doesn't save much on rendering time but -does harm the effectiveness of the cache. Now uses a pixel offset into the -string rather than a character + pixel offset, and plots the entire string -every time (execpt when the wrap point is visible, in which case the entire -string is plotted twice). - -It also makes motion smoother, because (possibly unintentionally) the -previous code preferred to align the scroll offset with character boundaries. -This would lead to uneven changes of position, especially when the width of -the character currently being scrolled off the edge was only slightly more -than an integral multiple of the scroll increment. ---- - xbmc/guilib/GUIFadeLabelControl.cpp | 8 +-- - xbmc/guilib/GUIFont.cpp | 123 +++++++++++++----------------------- - xbmc/guilib/GUIFont.h | 17 ++--- - xbmc/guilib/GUIRSSControl.cpp | 6 +- - xbmc/utils/RssReader.cpp | 2 +- - xbmc/utils/RssReader.h | 2 +- - 6 files changed, 58 insertions(+), 100 deletions(-) - -diff --git a/xbmc/guilib/GUIFadeLabelControl.cpp b/xbmc/guilib/GUIFadeLabelControl.cpp -index d594c04..86ee73a 100644 ---- a/xbmc/guilib/GUIFadeLabelControl.cpp -+++ b/xbmc/guilib/GUIFadeLabelControl.cpp -@@ -109,18 +109,14 @@ void CGUIFadeLabelControl::Process(unsigned int currentTime, CDirtyRegionList &d - bool moveToNextLabel = false; - if (!m_scrollOut) - { -- vecText text; -- m_textLayout.GetFirstText(text); -- if (m_scrollInfo.characterPos && m_scrollInfo.characterPos < text.size()) -- text.erase(text.begin(), text.begin() + min((int)m_scrollInfo.characterPos - 1, (int)text.size())); -- if (m_label.font->GetTextWidth(text) < m_width) -+ if (m_scrollInfo.pixelPos + m_width > m_scrollInfo.m_textWidth) - { - if (m_fadeAnim.GetProcess() != ANIM_PROCESS_NORMAL) - m_fadeAnim.QueueAnimation(ANIM_PROCESS_NORMAL); - moveToNextLabel = true; - } - } -- else if (m_scrollInfo.characterPos > m_textLayout.GetTextLength()) -+ else if (m_scrollInfo.pixelPos > m_scrollInfo.m_textWidth) - moveToNextLabel = true; - - // apply the fading animation -diff --git a/xbmc/guilib/GUIFont.cpp b/xbmc/guilib/GUIFont.cpp -index a7ee668..eb8efdb 100644 ---- a/xbmc/guilib/GUIFont.cpp -+++ b/xbmc/guilib/GUIFont.cpp -@@ -36,7 +36,12 @@ CScrollInfo::CScrollInfo(unsigned int wait /* = 50 */, float pos /* = 0 */, - initialWait = wait; - initialPos = pos; - SetSpeed(speed ? speed : defaultSpeed); -- g_charsetConverter.utf8ToW(scrollSuffix, suffix); -+ CStdStringW wsuffix; -+ g_charsetConverter.utf8ToW(scrollSuffix, wsuffix); -+ suffix.clear(); -+ suffix.reserve(wsuffix.size()); -+ for (vecText::size_type i = 0; i < wsuffix.size(); i++) -+ suffix.push_back(wsuffix[i]); - Reset(); - } - -@@ -115,11 +120,12 @@ bool CGUIFont::UpdateScrollInfo(const vecText &text, CScrollInfo &scrollInfo) - { - // draw at our scroll position - // we handle the scrolling as follows: -- // We scroll on a per-pixel basis up until we have scrolled the first character outside -- // of our viewport, whereby we cycle the string around, and reset the scroll position. -- // -- // pixelPos is the amount in pixels to move the string by. -- // characterPos is the amount in characters to rotate the string by. -+ // We scroll on a per-pixel basis (eschewing the use of character indices -+ // which were also in use previously). The complete string, including suffix, -+ // is plotted to achieve the desired effect - normally just the one time, but -+ // if there is a wrap point within the viewport then it will be plotted twice. -+ // If the string is smaller than the viewport, then it may be plotted even -+ // more times than that. - // - if (scrollInfo.waitTime) - { -@@ -135,54 +141,19 @@ bool CGUIFont::UpdateScrollInfo(const vecText &text, CScrollInfo &scrollInfo) - // move along by the appropriate scroll amount - float scrollAmount = fabs(scrollInfo.GetPixelsPerFrame() * g_graphicsContext.GetGUIScaleX()); - -- if (scrollInfo.pixelSpeed > 0) -+ if (!scrollInfo.m_widthValid) - { -- // we want to move scrollAmount, grab the next character -- float charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); -- if (scrollInfo.pixelPos + scrollAmount < charWidth) -- scrollInfo.pixelPos += scrollAmount; // within the current character -- else -- { // past the current character, decrement scrollAmount by the charWidth and move to the next character -- while (scrollInfo.pixelPos + scrollAmount >= charWidth) -- { -- scrollAmount -= (charWidth - scrollInfo.pixelPos); -- scrollInfo.pixelPos = 0; -- scrollInfo.characterPos++; -- if (scrollInfo.characterPos >= text.size() + scrollInfo.suffix.size()) -- { -- scrollInfo.Reset(); -- break; -- } -- charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); -- } -- } -- } -- else if (scrollInfo.pixelSpeed < 0) -- { // scrolling backwards -- // we want to move scrollAmount, grab the next character -- float charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); -- if (scrollInfo.pixelPos + scrollAmount < charWidth) -- scrollInfo.pixelPos += scrollAmount; // within the current character -- else -- { // past the current character, decrement scrollAmount by the charWidth and move to the next character -- while (scrollInfo.pixelPos + scrollAmount >= charWidth) -- { -- scrollAmount -= (charWidth - scrollInfo.pixelPos); -- scrollInfo.pixelPos = 0; -- if (scrollInfo.characterPos == 0) -- { -- scrollInfo.Reset(); -- scrollInfo.characterPos = text.size() + scrollInfo.suffix.size() - 1; -- break; -- } -- scrollInfo.characterPos--; -- charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); -- } -- } -+ /* Calculate the pixel width of the complete string */ -+ scrollInfo.m_textWidth = GetTextWidth(text); -+ scrollInfo.m_totalWidth = scrollInfo.m_textWidth + GetTextWidth(scrollInfo.suffix); -+ scrollInfo.m_widthValid = true; - } -+ scrollInfo.pixelPos += scrollAmount; -+ assert(scrollInfo.m_totalWidth != 0); -+ while (scrollInfo.pixelPos >= scrollInfo.m_totalWidth) -+ scrollInfo.pixelPos -= scrollInfo.m_totalWidth; - -- if(scrollInfo.characterPos != old.characterPos -- || scrollInfo.pixelPos != old.pixelPos) -+ if (scrollInfo.pixelPos != old.pixelPos) - return true; - else - return false; -@@ -194,39 +165,27 @@ void CGUIFont::DrawScrollingText(float x, float y, const vecColors &colors, colo - if (!m_font) return; - if (!shadowColor) shadowColor = m_shadowColor; - -- float spaceWidth = GetCharWidth(L' '); -- // max chars on screen + extra margin chars -- vecText::size_type maxChars = -- std::min<vecText::size_type>( -- (text.size() + (vecText::size_type)scrollInfo.suffix.size()), -- (vecText::size_type)((maxWidth * 1.05f) / spaceWidth)); -- - if (!text.size() || ClippedRegionIsEmpty(x, y, maxWidth, alignment)) - return; // nothing to render - -- maxWidth = ROUND((maxWidth + scrollInfo.pixelPos) / g_graphicsContext.GetGUIScaleX()); -+ if (!scrollInfo.m_widthValid) -+ { -+ /* Calculate the pixel width of the complete string */ -+ scrollInfo.m_textWidth = GetTextWidth(text); -+ scrollInfo.m_totalWidth = scrollInfo.m_textWidth + GetTextWidth(scrollInfo.suffix); -+ scrollInfo.m_widthValid = true; -+ } -+ -+ assert(scrollInfo.m_totalWidth != 0); -+ -+ float textPixelWidth = ROUND(scrollInfo.m_textWidth / g_graphicsContext.GetGUIScaleX()); -+ float suffixPixelWidth = ROUND((scrollInfo.m_totalWidth - scrollInfo.m_textWidth) / g_graphicsContext.GetGUIScaleX()); - -- float charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); - float offset; - if(scrollInfo.pixelSpeed >= 0) - offset = scrollInfo.pixelPos; - else -- offset = charWidth - scrollInfo.pixelPos; -- -- // Now rotate our string as needed, only take a slightly larger then visible part of the text. -- unsigned int pos = scrollInfo.characterPos; -- vecText renderText; -- renderText.reserve(maxChars); -- for (vecText::size_type i = 0; i < maxChars; i++) -- { -- if (pos >= text.size() + scrollInfo.suffix.size()) -- pos = 0; -- if (pos < text.size()) -- renderText.push_back(text[pos]); -- else -- renderText.push_back(scrollInfo.suffix[pos - text.size()]); -- pos++; -- } -+ offset = scrollInfo.m_totalWidth - scrollInfo.pixelPos; - - vecColors renderColors; - for (unsigned int i = 0; i < colors.size(); i++) -@@ -239,9 +198,17 @@ void CGUIFont::DrawScrollingText(float x, float y, const vecColors &colors, colo - vecColors shadowColors; - for (unsigned int i = 0; i < renderColors.size(); i++) - shadowColors.push_back((renderColors[i] & 0xff000000) != 0 ? shadowColor : 0); -- m_font->DrawTextInternal(x - offset + 1, y + 1, shadowColors, renderText, alignment, maxWidth + m_font->GetLineHeight(2.0f), scroll); -+ for (float dx = -offset; dx < maxWidth; dx += scrollInfo.m_totalWidth) -+ { -+ m_font->DrawTextInternal(x + dx + 1, y + 1, shadowColors, text, alignment, textPixelWidth, scroll); -+ m_font->DrawTextInternal(x + dx + scrollInfo.m_textWidth + 1, y + 1, shadowColors, scrollInfo.suffix, alignment, suffixPixelWidth, scroll); -+ } -+ } -+ for (float dx = -offset; dx < maxWidth; dx += scrollInfo.m_totalWidth) -+ { -+ m_font->DrawTextInternal(x + dx, y, renderColors, text, alignment, textPixelWidth, scroll); -+ m_font->DrawTextInternal(x + dx + scrollInfo.m_textWidth, y, renderColors, scrollInfo.suffix, alignment, suffixPixelWidth, scroll); - } -- m_font->DrawTextInternal(x - offset, y, renderColors, renderText, alignment, maxWidth + m_font->GetLineHeight(2.0f), scroll); - - g_graphicsContext.RestoreClipRegion(); - } -diff --git a/xbmc/guilib/GUIFont.h b/xbmc/guilib/GUIFont.h -index c55db48..09cf9b3 100644 ---- a/xbmc/guilib/GUIFont.h -+++ b/xbmc/guilib/GUIFont.h -@@ -64,7 +64,6 @@ class CScrollInfo - void Reset() - { - waitTime = initialWait; -- characterPos = 0; - // pixelPos is where we start the current letter, so is measured - // to the left of the text rendering's left edge. Thus, a negative - // value will mean the text starts to the right -@@ -72,25 +71,19 @@ class CScrollInfo - // privates: - m_averageFrameTime = 1000.f / abs(defaultSpeed); - m_lastFrameTime = 0; -- } -- uint32_t GetCurrentChar(const vecText &text) const -- { -- assert(text.size()); -- if (characterPos < text.size()) -- return text[characterPos]; -- else if (characterPos < text.size() + suffix.size()) -- return suffix[characterPos - text.size()]; -- return text[0]; -+ m_widthValid = false; - } - float GetPixelsPerFrame(); - - float pixelPos; - float pixelSpeed; - unsigned int waitTime; -- unsigned int characterPos; - unsigned int initialWait; - float initialPos; -- CStdStringW suffix; -+ vecText suffix; -+ mutable float m_textWidth; -+ mutable float m_totalWidth; -+ mutable bool m_widthValid; - - static const int defaultSpeed = 60; - private: -diff --git a/xbmc/guilib/GUIRSSControl.cpp b/xbmc/guilib/GUIRSSControl.cpp -index 712e118..203c138 100644 ---- a/xbmc/guilib/GUIRSSControl.cpp -+++ b/xbmc/guilib/GUIRSSControl.cpp -@@ -119,7 +119,9 @@ void CGUIRSSControl::Process(unsigned int currentTime, CDirtyRegionList &dirtyre - dirty = true; - - if (CRssManager::Get().GetReader(GetID(), GetParentID(), this, m_pReader)) -- m_scrollInfo.characterPos = m_pReader->m_SavedScrollPos; -+ { -+ m_scrollInfo.pixelPos = m_pReader->m_savedScrollPixelPos; -+ } - else - { - if (m_strRSSTags != "") -@@ -177,7 +179,7 @@ void CGUIRSSControl::Render() - if (m_pReader) - { - m_pReader->CheckForUpdates(); -- m_pReader->m_SavedScrollPos = m_scrollInfo.characterPos; -+ m_pReader->m_savedScrollPixelPos = m_scrollInfo.pixelPos; - } - } - CGUIControl::Render(); -diff --git a/xbmc/utils/RssReader.cpp b/xbmc/utils/RssReader.cpp -index b1e53b7..f68597a 100644 ---- a/xbmc/utils/RssReader.cpp -+++ b/xbmc/utils/RssReader.cpp -@@ -54,7 +54,7 @@ CRssReader::CRssReader() : CThread("RSSReader") - m_pObserver = NULL; - m_spacesBetweenFeeds = 0; - m_bIsRunning = false; -- m_SavedScrollPos = 0; -+ m_savedScrollPixelPos = 0; - m_rtlText = false; - m_requestRefresh = false; - } -diff --git a/xbmc/utils/RssReader.h b/xbmc/utils/RssReader.h -index 2c6f366..b74faf2 100644 ---- a/xbmc/utils/RssReader.h -+++ b/xbmc/utils/RssReader.h -@@ -43,7 +43,7 @@ class CRssReader : public CThread - void SetObserver(IRssObserver* observer); - void CheckForUpdates(); - void requestRefresh(); -- unsigned int m_SavedScrollPos; -+ float m_savedScrollPixelPos; - - private: - void Process(); --- -1.9.3 - - -From 7064920379f68a7f6114813db8ad40a21c4957cc Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Mon, 27 Jan 2014 23:21:10 +0000 -Subject: [PATCH 26/94] Move the application of the translation offsets into - the GLES code. Still all pure software at this stage. Main change is in the - data types at the interface between CGUIFontTTFBase and CGUIFontTTFGL. The - old way (array of vertices in m_vertex) are retained in addition, for the - sake`of cases that need to use software clipping on GLES, as well as for DX - and GL support where the new scheme is not (yet?) used. - ---- - xbmc/guilib/GUIFontTTF.cpp | 19 +++--------- - xbmc/guilib/GUIFontTTF.h | 17 +++++++++++ - xbmc/guilib/GUIFontTTFGL.cpp | 72 ++++++++++++++++++++++++++++++++------------ - 3 files changed, 73 insertions(+), 35 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 73f0e50..ad0a53b 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -215,6 +215,7 @@ void CGUIFontTTFBase::Clear() - g_freeTypeLibrary.ReleaseStroker(m_stroker); - m_stroker = NULL; - -+ m_vertexTrans.clear(); - m_vertex.clear(); - } - -@@ -310,6 +311,7 @@ void CGUIFontTTFBase::Begin() - { - if (m_nestedBeginCount == 0 && m_texture != NULL && FirstBegin()) - { -+ m_vertexTrans.clear(); - m_vertex.clear(); - } - // Keep track of the nested begin/end calls. -@@ -457,23 +459,10 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - cursorX += ch->advance; - } - if (hardwareClipping) -- /* Append the new vertices (which we have just constructed in the cache) -- * to the set collected since the first Begin() call */ -- m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); -+ m_vertexTrans.push_back(CTranslatedVertices(0, 0, 0, &vertices)); - } - else if (hardwareClipping) -- { -- /* Apply the translation offset to the vertices from the cache after -- * appending them to the set collected since the first Begin() call */ -- m_vertex.insert(m_vertex.end(), vertices.begin(), vertices.end()); -- SVertex *v; -- for (v = &*m_vertex.end() - vertices.size(); v != &*m_vertex.end(); v++) -- { -- v->x += dynamicPos.m_x; -- v->y += dynamicPos.m_y; -- v->z += dynamicPos.m_z; -- } -- } -+ m_vertexTrans.push_back(CTranslatedVertices(dynamicPos.m_x, dynamicPos.m_y, dynamicPos.m_z, &vertices)); - if (!hardwareClipping) - /* Append the new vertices (from the cache or otherwise) to the set collected - * since the first Begin() call */ -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 78445ab..c71f90d 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -61,6 +61,14 @@ struct SVertex - unsigned char r, g, b, a; - #endif - float u, v; -+ struct SVertex Offset(float translate[3]) const -+ { -+ SVertex out = *this; -+ out.x += translate[0]; -+ out.y += translate[1]; -+ out.z += translate[2]; -+ return out; -+ } - }; - - -@@ -160,6 +168,15 @@ class CGUIFontTTFBase - bool m_bTextureLoaded; - unsigned int m_nTexture; - -+ struct CTranslatedVertices -+ { -+ float translateX; -+ float translateY; -+ float translateZ; -+ const std::vector<SVertex> *vertexBuffer; -+ CTranslatedVertices(float translateX, float translateY, float translateZ, const std::vector<SVertex> *vertexBuffer) : translateX(translateX), translateY(translateY), translateZ(translateZ), vertexBuffer(vertexBuffer) {} -+ }; -+ std::vector<CTranslatedVertices> m_vertexTrans; - std::vector<SVertex> m_vertex; - - float m_textureScaleX; -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index cb56987..f6aa081 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -146,34 +146,65 @@ void CGUIFontTTFGL::LastEnd() - GLint colLoc = g_Windowing.GUIShaderGetCol(); - GLint tex0Loc = g_Windowing.GUIShaderGetCoord0(); - -- // stack object until VBOs will be used -- std::vector<SVertex> vecVertices( 6 * (m_vertex.size() / 4) ); -- SVertex *vertices = &vecVertices[0]; -+ // Enable the attributes used by this shader -+ glEnableVertexAttribArray(posLoc); -+ glEnableVertexAttribArray(colLoc); -+ glEnableVertexAttribArray(tex0Loc); - -- for (size_t i=0; i<m_vertex.size(); i+=4) -+ if (m_vertex.size() > 0) - { -- *vertices++ = m_vertex[i]; -- *vertices++ = m_vertex[i+1]; -- *vertices++ = m_vertex[i+2]; -+ // Deal with vertices that had to use software clipping -+ std::vector<SVertex> vecVertices( 6 * (m_vertex.size() / 4) ); -+ SVertex *vertices = &vecVertices[0]; - -- *vertices++ = m_vertex[i+1]; -- *vertices++ = m_vertex[i+3]; -- *vertices++ = m_vertex[i+2]; -- } -+ for (size_t i=0; i<m_vertex.size(); i+=4) -+ { -+ *vertices++ = m_vertex[i]; -+ *vertices++ = m_vertex[i+1]; -+ *vertices++ = m_vertex[i+2]; - -- vertices = &vecVertices[0]; -+ *vertices++ = m_vertex[i+1]; -+ *vertices++ = m_vertex[i+3]; -+ *vertices++ = m_vertex[i+2]; -+ } - -- glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -- // Normalize color values. Does not affect Performance at all. -- glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -- glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); -+ vertices = &vecVertices[0]; - -- glEnableVertexAttribArray(posLoc); -- glEnableVertexAttribArray(colLoc); -- glEnableVertexAttribArray(tex0Loc); -+ glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -+ // Normalize color values. Does not affect Performance at all. -+ glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -+ glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); -+ -+ glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ } -+ if (m_vertexTrans.size() > 0) -+ { -+ // Deal with the vertices that can be hardware clipped and therefore translated -+ std::vector<SVertex> vecVertices; -+ for (size_t i = 0; i < m_vertexTrans.size(); i++) -+ { -+ float translate[3] = { m_vertexTrans[i].translateX, m_vertexTrans[i].translateY, m_vertexTrans[i].translateZ }; -+ for (size_t j = 0; j < m_vertexTrans[i].vertexBuffer->size(); j += 4) -+ { -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+3].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2].Offset(translate)); -+ } -+ } -+ SVertex *vertices = &vecVertices[0]; - -- glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -+ // Normalize color values. Does not affect Performance at all. -+ glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -+ glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); -+ -+ glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ } - -+ // Disable the attributes used by this shader - glDisableVertexAttribArray(posLoc); - glDisableVertexAttribArray(colLoc); - glDisableVertexAttribArray(tex0Loc); -@@ -201,6 +232,7 @@ CBaseTexture* CGUIFontTTFGL::ReallocTexture(unsigned int& newHeight) - if (m_textureHeight < newHeight) - CLog::Log(LOGWARNING, "%s: allocated new texture with height of %d, requested %d", __FUNCTION__, m_textureHeight, newHeight); - m_staticCache.Flush(); -+ m_dynamicCache.Flush(); - - memset(newTexture->GetPixels(), 0, m_textureHeight * newTexture->GetPitch()); - if (m_texture) --- -1.9.3 - - -From 476fce7bc2897e8898f4392809d934b0d5f46518 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 15 Jan 2014 15:28:06 +0000 -Subject: [PATCH 27/94] Rather than applying the translation offsets to the - vertices, now applies them to the model view matrix from the top of the - matrix stack and pushes it over to OpenGL. The vertices themselves are still - all held client-side. - ---- - xbmc/guilib/GUIFontTTF.h | 8 ------- - xbmc/guilib/GUIFontTTFGL.cpp | 40 +++++++++++++++++++++----------- - xbmc/guilib/GUIShader.h | 1 + - xbmc/rendering/gles/RenderSystemGLES.cpp | 8 +++++++ - xbmc/rendering/gles/RenderSystemGLES.h | 1 + - 5 files changed, 36 insertions(+), 22 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index c71f90d..fde2085 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -61,14 +61,6 @@ struct SVertex - unsigned char r, g, b, a; - #endif - float u, v; -- struct SVertex Offset(float translate[3]) const -- { -- SVertex out = *this; -- out.x += translate[0]; -- out.y += translate[1]; -- out.z += translate[2]; -- return out; -- } - }; - - -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index f6aa081..fbffaa0 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -29,6 +29,7 @@ - #include "utils/log.h" - #include "utils/GLUtils.h" - #include "windowing/WindowingFactory.h" -+#include "guilib/MatrixGLES.h" - - // stuff for freetype - #include <ft2build.h> -@@ -145,6 +146,7 @@ void CGUIFontTTFGL::LastEnd() - GLint posLoc = g_Windowing.GUIShaderGetPos(); - GLint colLoc = g_Windowing.GUIShaderGetCol(); - GLint tex0Loc = g_Windowing.GUIShaderGetCoord0(); -+ GLint modelLoc = g_Windowing.GUIShaderGetModel(); - - // Enable the attributes used by this shader - glEnableVertexAttribArray(posLoc); -@@ -183,25 +185,35 @@ void CGUIFontTTFGL::LastEnd() - std::vector<SVertex> vecVertices; - for (size_t i = 0; i < m_vertexTrans.size(); i++) - { -- float translate[3] = { m_vertexTrans[i].translateX, m_vertexTrans[i].translateY, m_vertexTrans[i].translateZ }; -+ // Apply the translation to the currently active (top-of-stack) model view matrix -+ g_matrices.MatrixMode(MM_MODELVIEW); -+ g_matrices.PushMatrix(); -+ g_matrices.Translatef(m_vertexTrans[i].translateX, m_vertexTrans[i].translateY, m_vertexTrans[i].translateZ); -+ glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); -+ -+ vecVertices.clear(); - for (size_t j = 0; j < m_vertexTrans[i].vertexBuffer->size(); j += 4) - { -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j].Offset(translate)); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1].Offset(translate)); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2].Offset(translate)); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1].Offset(translate)); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+3].Offset(translate)); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2].Offset(translate)); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j]); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1]); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2]); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1]); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+3]); -+ vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2]); - } -- } -- SVertex *vertices = &vecVertices[0]; -+ SVertex *vertices = &vecVertices[0]; - -- glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -- // Normalize color values. Does not affect Performance at all. -- glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -- glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); -+ glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -+ // Normalize color values. Does not affect Performance at all. -+ glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -+ glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); - -- glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ -+ g_matrices.PopMatrix(); -+ } -+ // Restore the original model view matrix -+ glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); - } - - // Disable the attributes used by this shader -diff --git a/xbmc/guilib/GUIShader.h b/xbmc/guilib/GUIShader.h -index 86ce4cc..ba01956 100644 ---- a/xbmc/guilib/GUIShader.h -+++ b/xbmc/guilib/GUIShader.h -@@ -41,6 +41,7 @@ class CGUIShader : public CGLSLShaderProgram - GLint GetCord1Loc() { return m_hCord1; } - GLint GetUniColLoc() { return m_hUniCol; } - GLint GetCoord0MatrixLoc() { return m_hCoord0Matrix; } -+ GLint GetModelLoc() { return m_hModel; } - bool HardwareClipIsPossible() { return m_clipPossible; } - GLfloat GetClipXFactor() { return m_clipXFactor; } - GLfloat GetClipXOffset() { return m_clipXOffset; } -diff --git a/xbmc/rendering/gles/RenderSystemGLES.cpp b/xbmc/rendering/gles/RenderSystemGLES.cpp -index deb3afc..0904d1f 100644 ---- a/xbmc/rendering/gles/RenderSystemGLES.cpp -+++ b/xbmc/rendering/gles/RenderSystemGLES.cpp -@@ -691,4 +691,12 @@ bool CRenderSystemGLES::SupportsStereo(RENDER_STEREO_MODE mode) - } - } - -+GLint CRenderSystemGLES::GUIShaderGetModel() -+{ -+ if (m_pGUIshader[m_method]) -+ return m_pGUIshader[m_method]->GetModelLoc(); -+ -+ return -1; -+} -+ - #endif -diff --git a/xbmc/rendering/gles/RenderSystemGLES.h b/xbmc/rendering/gles/RenderSystemGLES.h -index 81ee49e..d2f9cd1 100644 ---- a/xbmc/rendering/gles/RenderSystemGLES.h -+++ b/xbmc/rendering/gles/RenderSystemGLES.h -@@ -91,6 +91,7 @@ class CRenderSystemGLES : public CRenderSystemBase - GLint GUIShaderGetCoord1(); - GLint GUIShaderGetUniCol(); - GLint GUIShaderGetCoord0Matrix(); -+ GLint GUIShaderGetModel(); - - protected: - virtual void SetVSyncImpl(bool enable) = 0; --- -1.9.3 - - -From 473ccc4cbe616f672a72108d2ec98107780ac7da Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 29 Jan 2014 13:21:19 +0000 -Subject: [PATCH 28/94] Enable hardware clipping. - ---- - xbmc/guilib/GUIFontTTF.cpp | 4 ++-- - xbmc/guilib/GUIFontTTF.h | 5 ++++- - xbmc/guilib/GUIFontTTFGL.cpp | 6 ++++++ - 3 files changed, 12 insertions(+), 3 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index ad0a53b..4dc4c8e 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -459,10 +459,10 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - cursorX += ch->advance; - } - if (hardwareClipping) -- m_vertexTrans.push_back(CTranslatedVertices(0, 0, 0, &vertices)); -+ m_vertexTrans.push_back(CTranslatedVertices(0, 0, 0, &vertices, g_graphicsContext.GetClipRegion())); - } - else if (hardwareClipping) -- m_vertexTrans.push_back(CTranslatedVertices(dynamicPos.m_x, dynamicPos.m_y, dynamicPos.m_z, &vertices)); -+ m_vertexTrans.push_back(CTranslatedVertices(dynamicPos.m_x, dynamicPos.m_y, dynamicPos.m_z, &vertices, g_graphicsContext.GetClipRegion())); - if (!hardwareClipping) - /* Append the new vertices (from the cache or otherwise) to the set collected - * since the first Begin() call */ -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index fde2085..5e7c31f 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -27,6 +27,8 @@ - * - */ - -+#include "Geometry.h" -+ - // forward definition - class CBaseTexture; - -@@ -166,7 +168,8 @@ class CGUIFontTTFBase - float translateY; - float translateZ; - const std::vector<SVertex> *vertexBuffer; -- CTranslatedVertices(float translateX, float translateY, float translateZ, const std::vector<SVertex> *vertexBuffer) : translateX(translateX), translateY(translateY), translateZ(translateZ), vertexBuffer(vertexBuffer) {} -+ CRect clip; -+ CTranslatedVertices(float translateX, float translateY, float translateZ, const std::vector<SVertex> *vertexBuffer, const CRect &clip) : translateX(translateX), translateY(translateY), translateZ(translateZ), vertexBuffer(vertexBuffer), clip(clip) {} - }; - std::vector<CTranslatedVertices> m_vertexTrans; - std::vector<SVertex> m_vertex; -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index fbffaa0..b7618e1 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -185,6 +185,10 @@ void CGUIFontTTFGL::LastEnd() - std::vector<SVertex> vecVertices; - for (size_t i = 0; i < m_vertexTrans.size(); i++) - { -+ // Apply the clip rectangle -+ CRect clip = g_Windowing.ClipRectToScissorRect(m_vertexTrans[i].clip); -+ g_graphicsContext.SetScissors(clip); -+ - // Apply the translation to the currently active (top-of-stack) model view matrix - g_matrices.MatrixMode(MM_MODELVIEW); - g_matrices.PushMatrix(); -@@ -212,6 +216,8 @@ void CGUIFontTTFGL::LastEnd() - - g_matrices.PopMatrix(); - } -+ // Restore the original scissor rectangle -+ g_graphicsContext.ResetScissors(); - // Restore the original model view matrix - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); - } --- -1.9.3 - - -From f39c4523a1c05425fb94d3536a510709784f9558 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 15 Jan 2014 15:32:51 +0000 -Subject: [PATCH 29/94] Move the vertex data across to a vertex buffer object - just prior to drawing. - ---- - xbmc/guilib/GUIFontTTFGL.cpp | 24 +++++++++++++++++++----- - 1 file changed, 19 insertions(+), 5 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index b7618e1..0df3749 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -207,12 +207,24 @@ void CGUIFontTTFGL::LastEnd() - } - SVertex *vertices = &vecVertices[0]; - -- glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, x)); -- // Normalize color values. Does not affect Performance at all. -- glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, r)); -- glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (char*)vertices + offsetof(SVertex, u)); -- -+ // Generate a unique buffer object name and put it in vertexBuffer -+ GLuint vertexBuffer; -+ glGenBuffers(1, &vertexBuffer); -+ // Bind the buffer to the OpenGL context's GL_ARRAY_BUFFER binding point -+ glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); -+ // Create a data store for the buffer object bound to the GL_ARRAY_BUFFER -+ // binding point (i.e. our buffer object) and initialise it from the -+ // specified client-side pointer -+ glBufferData(GL_ARRAY_BUFFER, vecVertices.size() * sizeof *vertices, vertices, GL_STATIC_DRAW); -+ // Set up the offsets of the various vertex attributes within the buffer -+ // object bound to GL_ARRAY_BUFFER -+ glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, x)); -+ glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, r)); -+ glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, u)); -+ // Do the actual drawing operation, using the full set of vertices in the buffer - glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -+ // Release the buffer name for reuse -+ glDeleteBuffers(1, &vertexBuffer); - - g_matrices.PopMatrix(); - } -@@ -220,6 +232,8 @@ void CGUIFontTTFGL::LastEnd() - g_graphicsContext.ResetScissors(); - // Restore the original model view matrix - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); -+ // Unbind GL_ARRAY_BUFFER -+ glBindBuffer(GL_ARRAY_BUFFER, 0); - } - - // Disable the attributes used by this shader --- -1.9.3 - - -From 3c6c1c4f9c7aec0f41fd22d7d4e7f5918a70c69a Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 15 Jan 2014 16:04:04 +0000 -Subject: [PATCH 30/94] Move vertex data into an OpenGL VBO when the font cache - entry is populated. The font cache now stores the "name" (handle) of the VBO, - rather than a vector of vertices. - ---- - xbmc/guilib/GUIFontCache.cpp | 6 ++++ - xbmc/guilib/GUIFontCache.h | 30 +++++++++++++++++- - xbmc/guilib/GUIFontTTF.cpp | 15 +++++++-- - xbmc/guilib/GUIFontTTF.h | 7 +++-- - xbmc/guilib/GUIFontTTFGL.cpp | 74 ++++++++++++++++++++++++++++++-------------- - xbmc/guilib/GUIFontTTFGL.h | 5 +++ - 6 files changed, 107 insertions(+), 30 deletions(-) - -diff --git a/xbmc/guilib/GUIFontCache.cpp b/xbmc/guilib/GUIFontCache.cpp -index b66c00b..895fa72 100644 ---- a/xbmc/guilib/GUIFontCache.cpp -+++ b/xbmc/guilib/GUIFontCache.cpp -@@ -111,3 +111,9 @@ template void CGUIFontCacheEntry<CGUIFontCacheDynamicPosition, CGUIFontCacheDyna - template CGUIFontCacheEntry<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::~CGUIFontCacheEntry(); - template CGUIFontCacheDynamicValue &CGUIFontCache<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::Lookup(CGUIFontCacheDynamicPosition &, const vecColors &, const vecText &, uint32_t, float, bool, unsigned int, bool &); - template void CGUIFontCache<CGUIFontCacheDynamicPosition, CGUIFontCacheDynamicValue>::Flush(); -+ -+void CVertexBuffer::clear() -+{ -+ if (m_font != NULL) -+ m_font->DestroyVertexBuffer(*this); -+} -diff --git a/xbmc/guilib/GUIFontCache.h b/xbmc/guilib/GUIFontCache.h -index d913dee..ff766bf 100644 ---- a/xbmc/guilib/GUIFontCache.h -+++ b/xbmc/guilib/GUIFontCache.h -@@ -234,7 +234,35 @@ struct CGUIFontCacheDynamicPosition - } - }; - --typedef std::vector<SVertex> CGUIFontCacheDynamicValue; -+struct CVertexBuffer -+{ -+ void *bufferHandle; -+ size_t size; -+ CVertexBuffer() : bufferHandle(NULL), size(0), m_font(NULL) {} -+ CVertexBuffer(void *bufferHandle, size_t size, const CGUIFontTTFBase *font) : bufferHandle(bufferHandle), size(size), m_font(font) {} -+ CVertexBuffer(const CVertexBuffer &other) : bufferHandle(other.bufferHandle), size(other.size), m_font(other.m_font) -+ { -+ /* In practice, the copy constructor is only called before a vertex buffer -+ * has been attached. If this should ever change, we'll need another support -+ * function in GUIFontTTFGL/DX to duplicate a buffer, given its handle. */ -+ assert(other.bufferHandle == 0); -+ } -+ CVertexBuffer &operator=(CVertexBuffer &other) -+ { -+ /* This is used with move-assignment semantics for initialising the object in the font cache */ -+ assert(bufferHandle == 0); -+ bufferHandle = other.bufferHandle; -+ other.bufferHandle = 0; -+ size = other.size; -+ m_font = other.m_font; -+ return *this; -+ } -+ void clear(); -+private: -+ const CGUIFontTTFBase *m_font; -+}; -+ -+typedef CVertexBuffer CGUIFontCacheDynamicValue; - - inline bool Match(const CGUIFontCacheDynamicPosition &a, const TransformMatrix &a_m, - const CGUIFontCacheDynamicPosition &b, const TransformMatrix &b_m, -diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp -index 4dc4c8e..8b25306 100644 ---- a/xbmc/guilib/GUIFontTTF.cpp -+++ b/xbmc/guilib/GUIFontTTF.cpp -@@ -343,13 +343,18 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - g_graphicsContext.ScaleFinalYCoord(x, y), - g_graphicsContext.ScaleFinalZCoord(x, y)); - } -- std::vector<SVertex> &vertices = hardwareClipping ? -+ CVertexBuffer unusedVertexBuffer; -+ CVertexBuffer &vertexBuffer = hardwareClipping ? - m_dynamicCache.Lookup(dynamicPos, - colors, text, - alignment, maxPixelWidth, - scrolling, - XbmcThreads::SystemClockMillis(), - dirtyCache) : -+ unusedVertexBuffer; -+ std::vector<SVertex> tempVertices; -+ std::vector<SVertex> &vertices = hardwareClipping ? -+ tempVertices : - m_staticCache.Lookup(staticPos, - colors, text, - alignment, maxPixelWidth, -@@ -459,10 +464,14 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors - cursorX += ch->advance; - } - if (hardwareClipping) -- m_vertexTrans.push_back(CTranslatedVertices(0, 0, 0, &vertices, g_graphicsContext.GetClipRegion())); -+ { -+ CVertexBuffer newVertexBuffer = CreateVertexBuffer(tempVertices); -+ vertexBuffer = newVertexBuffer; -+ m_vertexTrans.push_back(CTranslatedVertices(0, 0, 0, &vertexBuffer, g_graphicsContext.GetClipRegion())); -+ } - } - else if (hardwareClipping) -- m_vertexTrans.push_back(CTranslatedVertices(dynamicPos.m_x, dynamicPos.m_y, dynamicPos.m_z, &vertices, g_graphicsContext.GetClipRegion())); -+ m_vertexTrans.push_back(CTranslatedVertices(dynamicPos.m_x, dynamicPos.m_y, dynamicPos.m_z, &vertexBuffer, g_graphicsContext.GetClipRegion())); - if (!hardwareClipping) - /* Append the new vertices (from the cache or otherwise) to the set collected - * since the first Begin() call */ -diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h -index 5e7c31f..b1cd525 100644 ---- a/xbmc/guilib/GUIFontTTF.h -+++ b/xbmc/guilib/GUIFontTTF.h -@@ -84,6 +84,9 @@ class CGUIFontTTFBase - - void Begin(); - void End(); -+ /* The next two should only be called if we've declared we can do hardware clipping */ -+ virtual CVertexBuffer CreateVertexBuffer(const std::vector<SVertex> &vertices) const { assert(false); return CVertexBuffer(); } -+ virtual void DestroyVertexBuffer(CVertexBuffer &bufferHandle) const {} - - const CStdString& GetFileName() const { return m_strFileName; }; - -@@ -167,9 +170,9 @@ class CGUIFontTTFBase - float translateX; - float translateY; - float translateZ; -- const std::vector<SVertex> *vertexBuffer; -+ const CVertexBuffer *vertexBuffer; - CRect clip; -- CTranslatedVertices(float translateX, float translateY, float translateZ, const std::vector<SVertex> *vertexBuffer, const CRect &clip) : translateX(translateX), translateY(translateY), translateZ(translateZ), vertexBuffer(vertexBuffer), clip(clip) {} -+ CTranslatedVertices(float translateX, float translateY, float translateZ, const CVertexBuffer *vertexBuffer, const CRect &clip) : translateX(translateX), translateY(translateY), translateZ(translateZ), vertexBuffer(vertexBuffer), clip(clip) {} - }; - std::vector<CTranslatedVertices> m_vertexTrans; - std::vector<SVertex> m_vertex; -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index 0df3749..1cd684b7 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -49,6 +49,10 @@ CGUIFontTTFGL::CGUIFontTTFGL(const CStdString& strFileName) - - CGUIFontTTFGL::~CGUIFontTTFGL(void) - { -+ // It's important that all the CGUIFontCacheEntry objects are -+ // destructed before the CGUIFontTTFGL goes out of scope, because -+ // our virtual methods won't be accessible after this point -+ m_dynamicCache.Flush(); - } - - bool CGUIFontTTFGL::FirstBegin() -@@ -182,7 +186,6 @@ void CGUIFontTTFGL::LastEnd() - if (m_vertexTrans.size() > 0) - { - // Deal with the vertices that can be hardware clipped and therefore translated -- std::vector<SVertex> vecVertices; - for (size_t i = 0; i < m_vertexTrans.size(); i++) - { - // Apply the clip rectangle -@@ -195,36 +198,17 @@ void CGUIFontTTFGL::LastEnd() - g_matrices.Translatef(m_vertexTrans[i].translateX, m_vertexTrans[i].translateY, m_vertexTrans[i].translateZ); - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); - -- vecVertices.clear(); -- for (size_t j = 0; j < m_vertexTrans[i].vertexBuffer->size(); j += 4) -- { -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j]); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1]); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2]); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+1]); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+3]); -- vecVertices.push_back((*m_vertexTrans[i].vertexBuffer)[j+2]); -- } -- SVertex *vertices = &vecVertices[0]; -- -- // Generate a unique buffer object name and put it in vertexBuffer -- GLuint vertexBuffer; -- glGenBuffers(1, &vertexBuffer); - // Bind the buffer to the OpenGL context's GL_ARRAY_BUFFER binding point -- glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); -- // Create a data store for the buffer object bound to the GL_ARRAY_BUFFER -- // binding point (i.e. our buffer object) and initialise it from the -- // specified client-side pointer -- glBufferData(GL_ARRAY_BUFFER, vecVertices.size() * sizeof *vertices, vertices, GL_STATIC_DRAW); -+ glBindBuffer(GL_ARRAY_BUFFER, (GLuint) m_vertexTrans[i].vertexBuffer->bufferHandle); -+ - // Set up the offsets of the various vertex attributes within the buffer - // object bound to GL_ARRAY_BUFFER - glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, x)); - glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, r)); - glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, u)); -+ - // Do the actual drawing operation, using the full set of vertices in the buffer -- glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); -- // Release the buffer name for reuse -- glDeleteBuffers(1, &vertexBuffer); -+ glDrawArrays(GL_TRIANGLES, 0, 6 * m_vertexTrans[i].vertexBuffer->size); - - g_matrices.PopMatrix(); - } -@@ -245,6 +229,48 @@ void CGUIFontTTFGL::LastEnd() - #endif - } - -+#if HAS_GLES -+CVertexBuffer CGUIFontTTFGL::CreateVertexBuffer(const std::vector<SVertex> &vertices) const -+{ -+ // Rearrange the vertices to describe triangles -+ std::vector<SVertex> triangleVertices; -+ triangleVertices.reserve(vertices.size() * 6 / 4); -+ for (size_t i = 0; i < vertices.size(); i += 4) -+ { -+ triangleVertices.push_back(vertices[i]); -+ triangleVertices.push_back(vertices[i+1]); -+ triangleVertices.push_back(vertices[i+2]); -+ triangleVertices.push_back(vertices[i+1]); -+ triangleVertices.push_back(vertices[i+3]); -+ triangleVertices.push_back(vertices[i+2]); -+ } -+ -+ // Generate a unique buffer object name and put it in bufferHandle -+ GLuint bufferHandle; -+ glGenBuffers(1, &bufferHandle); -+ // Bind the buffer to the OpenGL context's GL_ARRAY_BUFFER binding point -+ glBindBuffer(GL_ARRAY_BUFFER, bufferHandle); -+ // Create a data store for the buffer object bound to the GL_ARRAY_BUFFER -+ // binding point (i.e. our buffer object) and initialise it from the -+ // specified client-side pointer -+ glBufferData(GL_ARRAY_BUFFER, triangleVertices.size() * sizeof (SVertex), &triangleVertices[0], GL_STATIC_DRAW); -+ // Unbind GL_ARRAY_BUFFER -+ glBindBuffer(GL_ARRAY_BUFFER, 0); -+ -+ return CVertexBuffer((void *) bufferHandle, vertices.size() / 4, this); -+} -+ -+void CGUIFontTTFGL::DestroyVertexBuffer(CVertexBuffer &buffer) const -+{ -+ if (buffer.bufferHandle != 0) -+ { -+ // Release the buffer name for reuse -+ glDeleteBuffers(1, (GLuint *) &buffer.bufferHandle); -+ buffer.bufferHandle = 0; -+ } -+} -+#endif -+ - CBaseTexture* CGUIFontTTFGL::ReallocTexture(unsigned int& newHeight) - { - newHeight = CBaseTexture::PadPow2(newHeight); -diff --git a/xbmc/guilib/GUIFontTTFGL.h b/xbmc/guilib/GUIFontTTFGL.h -index 6736cf7..168fb21 100644 ---- a/xbmc/guilib/GUIFontTTFGL.h -+++ b/xbmc/guilib/GUIFontTTFGL.h -@@ -29,6 +29,7 @@ - - - #include "GUIFontTTF.h" -+#include "system.h" - - - /*! -@@ -43,6 +44,10 @@ class CGUIFontTTFGL : public CGUIFontTTFBase - - virtual bool FirstBegin(); - virtual void LastEnd(); -+#if HAS_GLES -+ virtual CVertexBuffer CreateVertexBuffer(const std::vector<SVertex> &vertices) const; -+ virtual void DestroyVertexBuffer(CVertexBuffer &bufferHandle) const; -+#endif - - protected: - virtual CBaseTexture* ReallocTexture(unsigned int& newHeight); --- -1.9.3 - - -From 073c09ba7de6f6b7676c83d71b6933790626874f Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Thu, 16 Jan 2014 16:29:42 +0000 -Subject: [PATCH 31/94] Switch from glDrawArrays() to glDrawElements(). This - involves setting up a static VBO containing the indexes necessary to convert - from quads to triangles on the fly in the GPU. - ---- - xbmc/guilib/GUIFontTTFGL.cpp | 72 +++++++++++++++++++++++++------------ - xbmc/guilib/GUIFontTTFGL.h | 9 +++++ - xbmc/windowing/egl/WinSystemEGL.cpp | 17 +++++++++ - 3 files changed, 76 insertions(+), 22 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index 1cd684b7..d476409 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -186,6 +186,10 @@ void CGUIFontTTFGL::LastEnd() - if (m_vertexTrans.size() > 0) - { - // Deal with the vertices that can be hardware clipped and therefore translated -+ -+ // Bind our pre-calculated array to GL_ELEMENT_ARRAY_BUFFER -+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementArrayHandle); -+ - for (size_t i = 0; i < m_vertexTrans.size(); i++) - { - // Apply the clip rectangle -@@ -201,14 +205,21 @@ void CGUIFontTTFGL::LastEnd() - // Bind the buffer to the OpenGL context's GL_ARRAY_BUFFER binding point - glBindBuffer(GL_ARRAY_BUFFER, (GLuint) m_vertexTrans[i].vertexBuffer->bufferHandle); - -- // Set up the offsets of the various vertex attributes within the buffer -- // object bound to GL_ARRAY_BUFFER -- glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, x)); -- glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, r)); -- glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) offsetof(SVertex, u)); -+ // Do the actual drawing operation, split into groups of characters no -+ // larger than the pre-determined size of the element array -+ for (size_t character = 0; m_vertexTrans[i].vertexBuffer->size > character; character += ELEMENT_ARRAY_MAX_CHAR_INDEX) -+ { -+ size_t count = m_vertexTrans[i].vertexBuffer->size - character; -+ count = std::min<size_t>(count, ELEMENT_ARRAY_MAX_CHAR_INDEX); -+ -+ // Set up the offsets of the various vertex attributes within the buffer -+ // object bound to GL_ARRAY_BUFFER -+ glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) (character*sizeof(SVertex)*4 + offsetof(SVertex, x))); -+ glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SVertex), (GLvoid *) (character*sizeof(SVertex)*4 + offsetof(SVertex, r))); -+ glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(SVertex), (GLvoid *) (character*sizeof(SVertex)*4 + offsetof(SVertex, u))); - -- // Do the actual drawing operation, using the full set of vertices in the buffer -- glDrawArrays(GL_TRIANGLES, 0, 6 * m_vertexTrans[i].vertexBuffer->size); -+ glDrawElements(GL_TRIANGLES, 6 * count, GL_UNSIGNED_SHORT, 0); -+ } - - g_matrices.PopMatrix(); - } -@@ -216,8 +227,9 @@ void CGUIFontTTFGL::LastEnd() - g_graphicsContext.ResetScissors(); - // Restore the original model view matrix - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); -- // Unbind GL_ARRAY_BUFFER -+ // Unbind GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER - glBindBuffer(GL_ARRAY_BUFFER, 0); -+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - } - - // Disable the attributes used by this shader -@@ -232,19 +244,6 @@ void CGUIFontTTFGL::LastEnd() - #if HAS_GLES - CVertexBuffer CGUIFontTTFGL::CreateVertexBuffer(const std::vector<SVertex> &vertices) const - { -- // Rearrange the vertices to describe triangles -- std::vector<SVertex> triangleVertices; -- triangleVertices.reserve(vertices.size() * 6 / 4); -- for (size_t i = 0; i < vertices.size(); i += 4) -- { -- triangleVertices.push_back(vertices[i]); -- triangleVertices.push_back(vertices[i+1]); -- triangleVertices.push_back(vertices[i+2]); -- triangleVertices.push_back(vertices[i+1]); -- triangleVertices.push_back(vertices[i+3]); -- triangleVertices.push_back(vertices[i+2]); -- } -- - // Generate a unique buffer object name and put it in bufferHandle - GLuint bufferHandle; - glGenBuffers(1, &bufferHandle); -@@ -253,7 +252,7 @@ CVertexBuffer CGUIFontTTFGL::CreateVertexBuffer(const std::vector<SVertex> &vert - // Create a data store for the buffer object bound to the GL_ARRAY_BUFFER - // binding point (i.e. our buffer object) and initialise it from the - // specified client-side pointer -- glBufferData(GL_ARRAY_BUFFER, triangleVertices.size() * sizeof (SVertex), &triangleVertices[0], GL_STATIC_DRAW); -+ glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof (SVertex), &vertices[0], GL_STATIC_DRAW); - // Unbind GL_ARRAY_BUFFER - glBindBuffer(GL_ARRAY_BUFFER, 0); - -@@ -348,4 +347,33 @@ void CGUIFontTTFGL::DeleteHardwareTexture() - } - } - -+#if HAS_GLES -+void CGUIFontTTFGL::CreateStaticVertexBuffers(void) -+{ -+ // Bind a new buffer to the OpenGL context's GL_ELEMENT_ARRAY_BUFFER binding point -+ glGenBuffers(1, &m_elementArrayHandle); -+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementArrayHandle); -+ // Create an array holding the mesh indices to convert quads to triangles -+ GLushort index[ELEMENT_ARRAY_MAX_CHAR_INDEX][6]; -+ for (size_t i = 0; i < ELEMENT_ARRAY_MAX_CHAR_INDEX; i++) -+ { -+ index[i][0] = 4*i; -+ index[i][1] = 4*i+1; -+ index[i][2] = 4*i+2; -+ index[i][3] = 4*i+1; -+ index[i][4] = 4*i+3; -+ index[i][5] = 4*i+2; -+ } -+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof index, index, GL_STATIC_DRAW); -+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -+} -+ -+void CGUIFontTTFGL::DestroyStaticVertexBuffers(void) -+{ -+ glDeleteBuffers(1, &m_elementArrayHandle); -+} -+ -+GLuint CGUIFontTTFGL::m_elementArrayHandle; -+#endif -+ - #endif -diff --git a/xbmc/guilib/GUIFontTTFGL.h b/xbmc/guilib/GUIFontTTFGL.h -index 168fb21..a14ab7a 100644 ---- a/xbmc/guilib/GUIFontTTFGL.h -+++ b/xbmc/guilib/GUIFontTTFGL.h -@@ -30,6 +30,7 @@ - - #include "GUIFontTTF.h" - #include "system.h" -+#include "system_gl.h" - - - /*! -@@ -47,6 +48,8 @@ class CGUIFontTTFGL : public CGUIFontTTFBase - #if HAS_GLES - virtual CVertexBuffer CreateVertexBuffer(const std::vector<SVertex> &vertices) const; - virtual void DestroyVertexBuffer(CVertexBuffer &bufferHandle) const; -+ static void CreateStaticVertexBuffers(void); -+ static void DestroyStaticVertexBuffers(void); - #endif - - protected: -@@ -54,6 +57,12 @@ class CGUIFontTTFGL : public CGUIFontTTFBase - virtual bool CopyCharToTexture(FT_BitmapGlyph bitGlyph, unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2); - virtual void DeleteHardwareTexture(); - -+#if HAS_GLES -+#define ELEMENT_ARRAY_MAX_CHAR_INDEX (1000) -+ -+ static GLuint m_elementArrayHandle; -+#endif -+ - }; - - #endif -diff --git a/xbmc/windowing/egl/WinSystemEGL.cpp b/xbmc/windowing/egl/WinSystemEGL.cpp -index dfc4672..0c32947 100644 ---- a/xbmc/windowing/egl/WinSystemEGL.cpp -+++ b/xbmc/windowing/egl/WinSystemEGL.cpp -@@ -29,6 +29,7 @@ - #include "settings/AdvancedSettings.h" - #include "settings/Settings.h" - #include "settings/DisplaySettings.h" -+#include "guilib/GUIFontTTFGL.h" - #include "utils/log.h" - #include "EGLWrapper.h" - #include "EGLQuirks.h" -@@ -192,6 +193,9 @@ bool CWinSystemEGL::CreateWindow(RESOLUTION_INFO &res) - return false; - } - -+#if HAS_GLES -+ bool newContext = false; -+#endif - if (m_context == EGL_NO_CONTEXT) - { - if (!m_egl->CreateContext(m_display, m_config, contextAttrs, &m_context)) -@@ -199,6 +203,9 @@ bool CWinSystemEGL::CreateWindow(RESOLUTION_INFO &res) - CLog::Log(LOGERROR, "%s: Could not create context",__FUNCTION__); - return false; - } -+#if HAS_GLES -+ newContext = true; -+#endif - } - - if (!m_egl->BindContext(m_display, m_surface, m_context)) -@@ -207,6 +214,11 @@ bool CWinSystemEGL::CreateWindow(RESOLUTION_INFO &res) - return false; - } - -+#if HAS_GLES -+ if (newContext) -+ CGUIFontTTFGL::CreateStaticVertexBuffers(); -+#endif -+ - // for the non-trivial dirty region modes, we need the EGL buffer to be preserved across updates - if (g_advancedSettings.m_guiAlgorithmDirtyRegions == DIRTYREGION_SOLVER_COST_REDUCTION || - g_advancedSettings.m_guiAlgorithmDirtyRegions == DIRTYREGION_SOLVER_UNION) -@@ -228,7 +240,12 @@ bool CWinSystemEGL::DestroyWindowSystem() - DestroyWindow(); - - if (m_context != EGL_NO_CONTEXT) -+ { -+#if HAS_GLES -+ CGUIFontTTFGL::DestroyStaticVertexBuffers(); -+#endif - m_egl->DestroyContext(m_display, m_context); -+ } - m_context = EGL_NO_CONTEXT; - - if (m_display != EGL_NO_DISPLAY) --- -1.9.3 - - -From ec39dce3628b276e3ed2fe19c95a056a1aa171b8 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 4 Feb 2014 16:17:57 +0000 -Subject: [PATCH 32/94] Update Windows project files - ---- - project/VS2010Express/XBMC.vcxproj | 2 ++ - project/VS2010Express/XBMC.vcxproj.filters | 6 ++++++ - 2 files changed, 8 insertions(+) - -diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj -index c6de5ca..a9731de 100644 ---- a/project/VS2010Express/XBMC.vcxproj -+++ b/project/VS2010Express/XBMC.vcxproj -@@ -540,6 +540,7 @@ - <ClCompile Include="..\..\xbmc\guilib\GUIFadeLabelControl.cpp" /> - <ClCompile Include="..\..\xbmc\guilib\GUIFixedListContainer.cpp" /> - <ClCompile Include="..\..\xbmc\guilib\GUIFont.cpp" /> -+ <ClCompile Include="..\..\xbmc\guilib\GUIFontCache.cpp" /> - <ClCompile Include="..\..\xbmc\guilib\GUIFontManager.cpp" /> - <ClCompile Include="..\..\xbmc\guilib\GUIFontTTF.cpp" /> - <ClCompile Include="..\..\xbmc\guilib\GUIFontTTFDX.cpp" /> -@@ -2057,6 +2058,7 @@ - <ClInclude Include="..\..\xbmc\guilib\GUIFadeLabelControl.h" /> - <ClInclude Include="..\..\xbmc\guilib\GUIFixedListContainer.h" /> - <ClInclude Include="..\..\xbmc\guilib\GUIFont.h" /> -+ <ClInclude Include="..\..\xbmc\guilib\GUIFontCache.h" /> - <ClInclude Include="..\..\xbmc\guilib\GUIFontManager.h" /> - <ClInclude Include="..\..\xbmc\guilib\GUIFontTTF.h" /> - <ClInclude Include="..\..\xbmc\guilib\GUIFontTTFDX.h" /> -diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters -index b536eb3..cb34443 100644 ---- a/project/VS2010Express/XBMC.vcxproj.filters -+++ b/project/VS2010Express/XBMC.vcxproj.filters -@@ -1024,6 +1024,9 @@ - <ClCompile Include="..\..\xbmc\guilib\GUIFont.cpp"> - <Filter>guilib</Filter> - </ClCompile> -+ <ClCompile Include="..\..\xbmc\guilib\GUIFontCache.cpp"> -+ <Filter>guilib</Filter> -+ </ClCompile> - <ClCompile Include="..\..\xbmc\guilib\GUIFontManager.cpp"> - <Filter>guilib</Filter> - </ClCompile> -@@ -3978,6 +3981,9 @@ - <ClInclude Include="..\..\xbmc\guilib\GUIFont.h"> - <Filter>guilib</Filter> - </ClInclude> -+ <ClInclude Include="..\..\xbmc\guilib\GUIFontCache.h"> -+ <Filter>guilib</Filter> -+ </ClInclude> - <ClInclude Include="..\..\xbmc\guilib\GUIFontManager.h"> - <Filter>guilib</Filter> - </ClInclude> --- -1.9.3 - - -From e25eb385d09a5378be8616f10806610df90416db Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 4 Feb 2014 16:49:45 +0000 -Subject: [PATCH 33/94] Update XCode project file - ---- - XBMC.xcodeproj/project.pbxproj | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/XBMC.xcodeproj/project.pbxproj b/XBMC.xcodeproj/project.pbxproj -index fdd10a1..62e7e69 100644 ---- a/XBMC.xcodeproj/project.pbxproj -+++ b/XBMC.xcodeproj/project.pbxproj -@@ -168,6 +168,9 @@ - 1D638128161E211E003603ED /* PeripheralImon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D638126161E211E003603ED /* PeripheralImon.cpp */; }; - 1DAFDB7C16DFDCA7007F8C68 /* PeripheralBusCEC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1DAFDB7A16DFDCA7007F8C68 /* PeripheralBusCEC.cpp */; }; - 1DE0443515828F4B005DDB4D /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1DE0443315828F4B005DDB4D /* Exception.cpp */; }; -+ 2FD7EC5F18A14FE50047F86C /* GUIFontCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FD7EC5D18A14FE50047F86C /* GUIFontCache.cpp */; }; -+ 2FD7EC6018A14FE50047F86C /* GUIFontCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FD7EC5D18A14FE50047F86C /* GUIFontCache.cpp */; }; -+ 2FD7EC6118A14FE50047F86C /* GUIFontCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FD7EC5D18A14FE50047F86C /* GUIFontCache.cpp */; }; - 32C631281423A90F00F18420 /* JpegIO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32C631261423A90F00F18420 /* JpegIO.cpp */; }; - 36A9443D15821E2800727135 /* DatabaseUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36A9443B15821E2800727135 /* DatabaseUtils.cpp */; }; - 36A9444115821E7C00727135 /* SortUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36A9443F15821E7C00727135 /* SortUtils.cpp */; }; -@@ -3546,6 +3549,8 @@ - 1DAFDB7B16DFDCA7007F8C68 /* PeripheralBusCEC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeripheralBusCEC.h; sourceTree = "<group>"; }; - 1DE0443315828F4B005DDB4D /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Exception.cpp; path = commons/Exception.cpp; sourceTree = "<group>"; }; - 1DE0443415828F4B005DDB4D /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = commons/Exception.h; sourceTree = "<group>"; }; -+ 2FD7EC5D18A14FE50047F86C /* GUIFontCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIFontCache.cpp; sourceTree = "<group>"; }; -+ 2FD7EC5E18A14FE50047F86C /* GUIFontCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIFontCache.h; sourceTree = "<group>"; }; - 32C631261423A90F00F18420 /* JpegIO.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JpegIO.cpp; sourceTree = "<group>"; }; - 32C631271423A90F00F18420 /* JpegIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JpegIO.h; sourceTree = "<group>"; }; - 36A9443B15821E2800727135 /* DatabaseUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseUtils.cpp; sourceTree = "<group>"; }; -@@ -5923,6 +5928,8 @@ - 18B7C76A1294222E009E7A26 /* GUIFixedListContainer.cpp */, - 18B7C7101294222D009E7A26 /* GUIFixedListContainer.h */, - 18B7C76B1294222E009E7A26 /* GUIFont.cpp */, -+ 2FD7EC5D18A14FE50047F86C /* GUIFontCache.cpp */, -+ 2FD7EC5E18A14FE50047F86C /* GUIFontCache.h */, - 18B7C7111294222D009E7A26 /* GUIFont.h */, - 18B7C76C1294222E009E7A26 /* GUIFontManager.cpp */, - 18B7C7121294222D009E7A26 /* GUIFontManager.h */, -@@ -10930,6 +10937,7 @@ - 7C8AE850189DE3CD00C33786 /* CoreAudioHardware.cpp in Sources */, - 7C8AE851189DE3CD00C33786 /* CoreAudioStream.cpp in Sources */, - 7C8AE854189DE47F00C33786 /* CoreAudioHelpers.cpp in Sources */, -+ 2FD7EC5F18A14FE50047F86C /* GUIFontCache.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -@@ -11978,6 +11986,7 @@ - F5CC234818150277006B5E91 /* AESinkNULL.cpp in Sources */, - F5CC238918150768006B5E91 /* AESinkProfiler.cpp in Sources */, - DF374B2518AC2BA20076B514 /* CoreAudioHelpers.cpp in Sources */, -+ 2FD7EC6118A14FE50047F86C /* GUIFontCache.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -@@ -13028,6 +13037,7 @@ - F5CC234718150277006B5E91 /* AESinkNULL.cpp in Sources */, - F5CC238818150768006B5E91 /* AESinkProfiler.cpp in Sources */, - DF374B2418AC2BA20076B514 /* CoreAudioHelpers.cpp in Sources */, -+ 2FD7EC6018A14FE50047F86C /* GUIFontCache.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; --- -1.9.3 - - -From 5f4ebd2e9fd6d503220627b916e522b671d7d9ba Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 4 Feb 2014 17:44:34 +0000 -Subject: [PATCH 34/94] Clang seems to be more picky than gcc about some C++ - template syntax - ---- - xbmc/guilib/GUIFontCache.cpp | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/xbmc/guilib/GUIFontCache.cpp b/xbmc/guilib/GUIFontCache.cpp -index 895fa72..bd84b9a 100644 ---- a/xbmc/guilib/GUIFontCache.cpp -+++ b/xbmc/guilib/GUIFontCache.cpp -@@ -61,26 +61,26 @@ Value &CGUIFontCache<Position, Value>::Lookup(Position &pos, - alignment, maxPixelWidth, - scrolling, g_graphicsContext.GetGUIMatrix(), - g_graphicsContext.GetGUIScaleX(), g_graphicsContext.GetGUIScaleY()); -- EntryHashIterator i = m_list.get<Hash>().find(key); -- if (i == m_list.get<Hash>().end()) -+ EntryHashIterator i = m_list.template get<Hash>().find(key); -+ if (i == m_list.template get<Hash>().end()) - { - /* Cache miss */ -- EntryAgeIterator oldest = m_list.get<Age>().begin(); -- if (!m_list.get<Age>().empty() && nowMillis - oldest->m_lastUsedMillis > FONT_CACHE_TIME_LIMIT) -+ EntryAgeIterator oldest = m_list.template get<Age>().begin(); -+ if (!m_list.template get<Age>().empty() && nowMillis - oldest->m_lastUsedMillis > FONT_CACHE_TIME_LIMIT) - { - /* The oldest existing entry is old enough to expire and reuse */ -- m_list.get<Hash>().modify(m_list.project<Hash>(oldest), typename CGUIFontCacheEntry<Position, Value>::Reassign(key, nowMillis)); -- m_list.get<Age>().relocate(m_list.get<Age>().end(), oldest); -+ m_list.template get<Hash>().modify(m_list.template project<Hash>(oldest), typename CGUIFontCacheEntry<Position, Value>::Reassign(key, nowMillis)); -+ m_list.template get<Age>().relocate(m_list.template get<Age>().end(), oldest); - } - else - { - /* We need a new entry instead */ - /* Yes, this causes the creation an destruction of a temporary entry, but - * this code ought to only be used infrequently, when the cache needs to grow */ -- m_list.get<Age>().push_back(CGUIFontCacheEntry<Position, Value>(*this, key, nowMillis)); -+ m_list.template get<Age>().push_back(CGUIFontCacheEntry<Position, Value>(*this, key, nowMillis)); - } - dirtyCache = true; -- return (--m_list.get<Age>().end())->m_value; -+ return (--m_list.template get<Age>().end())->m_value; - } - else - { -@@ -90,7 +90,7 @@ Value &CGUIFontCache<Position, Value>::Lookup(Position &pos, - pos.UpdateWithOffsets(i->m_key.m_pos, scrolling); - /* Update time in entry and move to the back of the list */ - i->m_lastUsedMillis = nowMillis; -- m_list.get<Age>().relocate(m_list.get<Age>().end(), m_list.project<Age>(i)); -+ m_list.template get<Age>().relocate(m_list.template get<Age>().end(), m_list.template project<Age>(i)); - dirtyCache = false; - return i->m_value; - } -@@ -99,7 +99,7 @@ Value &CGUIFontCache<Position, Value>::Lookup(Position &pos, - template<class Position, class Value> - void CGUIFontCache<Position, Value>::Flush() - { -- m_list.get<Age>().clear(); -+ m_list.template get<Age>().clear(); - } - - template void CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue>::Reassign::operator()(CGUIFontCacheEntry<CGUIFontCacheStaticPosition, CGUIFontCacheStaticValue> &entry); --- -1.9.3 - - -From 33693dc9ff9ba7695bc0e702a41566d54a5135b9 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 4 Feb 2014 18:52:14 +0000 -Subject: [PATCH 35/94] Fix header to hopefully permit iOS builds to work - again. GUIShader.cpp added #include windowing/egl/WinSystemEGL.h inside a but - also need the header windowing/osx/WinSystemIOS.h instead. The only thing - GUIShader.cpp needed was g_windowing.GetViewPort, which is provided by the - common base class CRenderSystemGLES of g_windowing in both cases, so I think - it should be sufficient to use windowing/WindowingFactory.h instead, which is - abstracted away from the other header files. - ---- - xbmc/guilib/GUIShader.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/xbmc/guilib/GUIShader.cpp b/xbmc/guilib/GUIShader.cpp -index 53bce09..86330cc 100644 ---- a/xbmc/guilib/GUIShader.cpp -+++ b/xbmc/guilib/GUIShader.cpp -@@ -26,7 +26,7 @@ - #include "GUIShader.h" - #include "MatrixGLES.h" - #include "utils/log.h" --#include "windowing/egl/WinSystemEGL.h" -+#include "windowing/WindowingFactory.h" - #include "guilib/GraphicContext.h" - - CGUIShader::CGUIShader( const char *shader ) : CGLSLShaderProgram("guishader_vert.glsl", shader) --- -1.9.3 - - -From 9b95b3b13bd714d8320dc61c5039eee6cb3c5737 Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Tue, 8 Apr 2014 18:14:55 +0100 -Subject: [PATCH 36/94] Fix font display in stereoscopic modes - CGUIFontTTFGL::LastEnd was previously using the relatively high-level - CGraphicContext::SetScissors function to enforce hardware clipping. However, - the coordinates it passed in already contained the stereoscopic offset, so - the CGraphicContext::SetScissors effectively ended up double-applying the - offset, with the effect that clip rectangles were always off-screen. Changed - to call the low-level SetScissors call instead (using g_Windowing to select - the correct implementation, e.g. CRenderSystemGLES::SetScissors). This also - skips the intersection of the scissors with the screen limits, but that does - not appear to matter in practice. - ---- - xbmc/guilib/GUIFontTTFGL.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp -index d476409..8466a81 100644 ---- a/xbmc/guilib/GUIFontTTFGL.cpp -+++ b/xbmc/guilib/GUIFontTTFGL.cpp -@@ -194,7 +194,7 @@ void CGUIFontTTFGL::LastEnd() - { - // Apply the clip rectangle - CRect clip = g_Windowing.ClipRectToScissorRect(m_vertexTrans[i].clip); -- g_graphicsContext.SetScissors(clip); -+ g_Windowing.SetScissors(clip); - - // Apply the translation to the currently active (top-of-stack) model view matrix - g_matrices.MatrixMode(MM_MODELVIEW); -@@ -224,7 +224,7 @@ void CGUIFontTTFGL::LastEnd() - g_matrices.PopMatrix(); - } - // Restore the original scissor rectangle -- g_graphicsContext.ResetScissors(); -+ g_Windowing.ResetScissors(); - // Restore the original model view matrix - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, g_matrices.GetMatrix(MM_MODELVIEW)); - // Unbind GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER --- -1.9.3 - - -From d51ef43b61b50de46edb2832f457af8229995cab Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Fri, 10 Jan 2014 12:10:43 +0000 -Subject: [PATCH 37/94] [rbp] Don't override dvdplayer with omxplayer. - -Using dvdplayer can be useful on the Pi. We can actually play sd (up to 640x480 MPEG-4 video) video in real time. -This is useful for codec variants like DivX3 which we don't currently play. - -This may expose bugs where dvdplayer is incorrectly used as the default player which will need to be fixed ---- - xbmc/cores/playercorefactory/PlayerCoreConfig.h | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/xbmc/cores/playercorefactory/PlayerCoreConfig.h b/xbmc/cores/playercorefactory/PlayerCoreConfig.h -index 27f0bec..fc12bb7 100644 ---- a/xbmc/cores/playercorefactory/PlayerCoreConfig.h -+++ b/xbmc/cores/playercorefactory/PlayerCoreConfig.h -@@ -88,14 +88,7 @@ friend class CPlayerCoreFactory; - { - case EPC_MPLAYER: - // TODO: this hack needs removal until we have a better player selection --#if defined(HAS_OMXPLAYER) -- case EPC_DVDPLAYER: -- pPlayer = new COMXPlayer(callback); -- CLog::Log(LOGINFO, "Created player %s for core %d / OMXPlayer forced as DVDPlayer", "OMXPlayer", m_eCore); -- break; --#else - case EPC_DVDPLAYER: pPlayer = new CDVDPlayer(callback); break; --#endif - case EPC_PAPLAYER: pPlayer = new PAPlayer(callback); break; - case EPC_EXTPLAYER: pPlayer = new CExternalPlayer(callback); break; - #if defined(HAS_OMXPLAYER) --- -1.9.3 - - -From 3cd01da5418f1693e50ed40273cb17ca9f6d622a Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Fri, 10 Jan 2014 15:37:41 +0000 -Subject: [PATCH 38/94] [players] Use default players rather than hard coded - DVDPlayer/PAPlayer - ---- - system/playercorefactory.xml | 23 ++++++++++++----------- - 1 file changed, 12 insertions(+), 11 deletions(-) - -diff --git a/system/playercorefactory.xml b/system/playercorefactory.xml -index 57dfcdd..7be9799 100644 ---- a/system/playercorefactory.xml -+++ b/system/playercorefactory.xml -@@ -11,31 +11,32 @@ - </players> - - <rules name="system rules"> -- <rule name="rtv" protocols="rtv" player="DVDPlayer" /> -- <rule name="hdhomerun/myth/mms/udp" protocols="hdhomerun|myth|cmyth|mms|mmsh|udp" player="DVDPlayer" /> -- <rule name="lastfm/shout" protocols="lastfm|shout" player="PAPlayer" /> -+ <rule name="rtv" protocols="rtv" player="videodefaultplayer" /> -+ <rule name="hdhomerun/myth/mms/udp" protocols="hdhomerun|myth|cmyth|mms|mmsh|udp" player="videodefaultplayer" /> -+ <rule name="lastfm/shout" protocols="lastfm|shout" player="audiodefaultplayer" /> - <rule name="rtmp" protocols="rtmp" player="videodefaultplayer" /> - - <!-- dvdplayer can play standard rtsp streams --> -- <rule name="rtsp" protocols="rtsp" filetypes="!(rm|ra)" player="PAPlayer" /> -+ <rule name="rtsp" protocols="rtsp" filetypes="!(rm|ra)" player="audiodefaultplayer" /> - - <!-- Internet streams --> - <rule name="streams" internetstream="true"> -- <rule name="aacp/sdp" mimetypes="audio/aacp|application/sdp" player="DVDPlayer" /> -- <rule name="mp2" mimetypes="application/octet-stream" filetypes="mp2" player="PAPlayer" /> -+ <rule name="aacp/sdp" mimetypes="audio/aacp|application/sdp" player="videodefaultplayer" /> -+ <rule name="mp2" mimetypes="application/octet-stream" filetypes="mp2" player="audiodefaultplayer" /> - </rule> - - <!-- DVDs --> -- <rule name="dvd" dvd="true" player="DVDPlayer" /> -- <rule name="dvdimage" dvdimage="true" player="DVDPlayer" /> -+ <rule name="dvd" dvd="true" player="videodefaultdvdplayer" /> -+ <rule name="dvdfile" dvdfile="true" player="videodefaultdvdplayer" /> -+ <rule name="dvdimage" dvdimage="true" player="videodefaultdvdplayer" /> - - <!-- Only dvdplayer can handle these normally --> -- <rule name="sdp/asf" filetypes="sdp|asf" player="DVDPlayer" /> -+ <rule name="sdp/asf" filetypes="sdp|asf" player="videodefaultplayer" /> - - <!-- Pass these to dvdplayer as we do not know if they are audio or video --> -- <rule name="nsv" filetypes="nsv" player="DVDPlayer" /> -+ <rule name="nsv" filetypes="nsv" player="videodefaultplayer" /> - - <!-- pvr radio channels should be played by dvdplayer because they need buffering --> -- <rule name="radio" filetypes="pvr" filename=".*/radio/.*" player="DVDPlayer" /> -+ <rule name="radio" filetypes="pvr" filename=".*/radio/.*" player="videodefaultplayer" /> - </rules> - </playercorefactory> --- -1.9.3 - - -From 5c4de293325bba93c4b820aed6863ee8d732ce2c Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 11 Jan 2014 18:23:42 +0000 -Subject: [PATCH 39/94] [rbp] Don't force dvdplayer for airplay - ---- - xbmc/network/AirPlayServer.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/xbmc/network/AirPlayServer.cpp b/xbmc/network/AirPlayServer.cpp -index 8040d9b..182daaa 100644 ---- a/xbmc/network/AirPlayServer.cpp -+++ b/xbmc/network/AirPlayServer.cpp -@@ -906,9 +906,11 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader, - CFileItem fileToPlay(location, false); - fileToPlay.SetProperty("StartPercent", position*100.0f); - ServerInstance->AnnounceToClients(EVENT_LOADING); -+#ifndef TARGET_RASPBERRY_PI - // froce to internal dvdplayer cause it is the only - // one who will work well with airplay - g_application.m_eForcedNextPlayer = EPC_DVDPLAYER; -+#endif - CApplicationMessenger::Get().MediaPlay(fileToPlay); - } - } --- -1.9.3 - - -From 454b77543018aac5d7e70769ef13231ae16eefb9 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 13 Jan 2014 13:11:06 +0000 -Subject: [PATCH 40/94] [rbp] Give plugins omxplayer when they request - dvdplayer on pi - ---- - xbmc/interfaces/legacy/ModuleXbmc.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/xbmc/interfaces/legacy/ModuleXbmc.cpp b/xbmc/interfaces/legacy/ModuleXbmc.cpp -index 16f0174..b172d47 100644 ---- a/xbmc/interfaces/legacy/ModuleXbmc.cpp -+++ b/xbmc/interfaces/legacy/ModuleXbmc.cpp -@@ -536,7 +536,11 @@ namespace XBMCAddon - int getPLAYLIST_MUSIC() { return PLAYLIST_MUSIC; } - int getPLAYLIST_VIDEO() { return PLAYLIST_VIDEO; } - int getPLAYER_CORE_AUTO() { return EPC_NONE; } -+#ifdef TARGET_RASPBERRY_PI -+ int getPLAYER_CORE_DVDPLAYER() { return EPC_OMXPLAYER; } -+#else - int getPLAYER_CORE_DVDPLAYER() { return EPC_DVDPLAYER; } -+#endif - int getPLAYER_CORE_MPLAYER() { return EPC_MPLAYER; } - int getPLAYER_CORE_PAPLAYER() { return EPC_PAPLAYER; } - int getTRAY_OPEN() { return TRAY_OPEN; } --- -1.9.3 - - -From 7201ee3e0ca664518eaaf3142682b294c34c69c0 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Tue, 14 Jan 2014 18:04:07 +0000 -Subject: [PATCH 41/94] [rbp] Allow ALSA to be chosen in addition to Pi sink - -Needs --enable-alsa in ./configure step and alsa support on platform ---- - configure.in | 1 - - tools/depends/target/Makefile | 6 +++--- - xbmc/cores/AudioEngine/AESinkFactory.cpp | 17 +++++++++++++++-- - 3 files changed, 18 insertions(+), 6 deletions(-) - -diff --git a/configure.in b/configure.in -index a195d00..34dd038 100644 ---- a/configure.in -+++ b/configure.in -@@ -742,7 +742,6 @@ case $use_platform in - use_arch="arm" - use_cpu=arm1176jzf-s - use_hardcoded_tables="yes" -- use_alsa="no" - ARCH="arm" - AC_DEFINE(HAS_EGLGLES, [1], [Define if supporting EGL based GLES Framebuffer]) - USE_OMXLIB=1; AC_DEFINE([HAVE_OMXLIB],[1],["Define to 1 if OMX libs is enabled"]) -diff --git a/tools/depends/target/Makefile b/tools/depends/target/Makefile -index 4588917..0fbd3e7 100644 ---- a/tools/depends/target/Makefile -+++ b/tools/depends/target/Makefile -@@ -55,10 +55,10 @@ endif - ALSA_LIB= - LINUX_SYSTEM_LIBS= - ifeq ($(OS),linux) -- #not for raspberry pi -+ DEPENDS += alsa-lib -+ ALSA_LIB = alsa-lib - ifneq ($(CPU),arm) -- DEPENDS += alsa-lib libsdl linux-system-libs -- ALSA_LIB = alsa-lib -+ DEPENDS += libsdl linux-system-libs - LINUX_SYSTEM_LIBS = linux-system-libs - endif - endif -diff --git a/xbmc/cores/AudioEngine/AESinkFactory.cpp b/xbmc/cores/AudioEngine/AESinkFactory.cpp -index e493123..7df6807 100644 ---- a/xbmc/cores/AudioEngine/AESinkFactory.cpp -+++ b/xbmc/cores/AudioEngine/AESinkFactory.cpp -@@ -27,6 +27,7 @@ - #include "Sinks/AESinkAUDIOTRACK.h" - #elif defined(TARGET_RASPBERRY_PI) - #include "Sinks/AESinkPi.h" -+ #include "Sinks/AESinkALSA.h" - #elif defined(TARGET_DARWIN_IOS) - #include "Sinks/AESinkDARWINIOS.h" - #elif defined(TARGET_DARWIN_OSX) -@@ -66,6 +67,7 @@ void CAESinkFactory::ParseDevice(std::string &device, std::string &driver) - driver == "AUDIOTRACK" || - #elif defined(TARGET_RASPBERRY_PI) - driver == "PI" || -+ driver == "ALSA" || - #elif defined(TARGET_DARWIN_IOS) - driver == "DARWINIOS" || - #elif defined(TARGET_DARWIN_OSX) -@@ -104,7 +106,12 @@ IAESink *CAESinkFactory::TrySink(std::string &driver, std::string &device, AEAud - #elif defined(TARGET_ANDROID) - sink = new CAESinkAUDIOTRACK(); - #elif defined(TARGET_RASPBERRY_PI) -- sink = new CAESinkPi(); -+ else if (driver == "PI") -+ sink = new CAESinkPi(); -+ #if defined(HAS_ALSA) -+ else if (driver == "ALSA") -+ sink = new CAESinkALSA(); -+ #endif - #elif defined(TARGET_DARWIN_IOS) - sink = new CAESinkDARWINIOS(); - #elif defined(TARGET_DARWIN_OSX) -@@ -194,7 +201,13 @@ void CAESinkFactory::EnumerateEx(AESinkInfoList &list, bool force) - CAESinkPi::EnumerateDevicesEx(info.m_deviceInfoList, force); - if(!info.m_deviceInfoList.empty()) - list.push_back(info); -- -+ #if defined(HAS_ALSA) -+ info.m_deviceInfoList.clear(); -+ info.m_sinkName = "ALSA"; -+ CAESinkALSA::EnumerateDevicesEx(info.m_deviceInfoList, force); -+ if(!info.m_deviceInfoList.empty()) -+ list.push_back(info); -+ #endif - #elif defined(TARGET_DARWIN_IOS) - - info.m_deviceInfoList.clear(); --- -1.9.3 - - -From 8ffa85ccdc4760751849d75d37924fbf6cb1b1c8 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 16 Jan 2014 01:39:29 +0000 -Subject: [PATCH 42/94] [omxcodec] Add hardware decode to dvdplayer for Pi - -Hijack the abandoned OpenMaxVideo codec ---- - configure.in | 21 +- - xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 12 +- - xbmc/cores/VideoRenderers/LinuxRendererGLES.h | 6 +- - xbmc/cores/VideoRenderers/RenderManager.cpp | 2 +- - xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp | 7 +- - .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 7 +- - .../DVDCodecs/Video/DVDVideoCodecOpenMax.cpp | 295 +--- - .../DVDCodecs/Video/DVDVideoCodecOpenMax.h | 34 +- - xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in | 1 - - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.cpp | 269 ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.h | 116 -- - .../dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 1418 ++++++++++---------- - .../cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 120 +- - xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 + - xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 21 +- - xbmc/linux/OMXCore.cpp | 45 +- - xbmc/linux/OMXCore.h | 2 +- - 17 files changed, 894 insertions(+), 1484 deletions(-) - delete mode 100644 xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.cpp - delete mode 100644 xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.h - -diff --git a/configure.in b/configure.in -index 34dd038..e7550c0 100644 ---- a/configure.in -+++ b/configure.in -@@ -1956,9 +1956,24 @@ if test "$host_vendor" = "apple" ; then - USE_OPENMAX=0 - AC_MSG_NOTICE($openmax_disabled) - elif test "$target_platform" = "target_raspberry_pi"; then -- use_openmax="no" -- USE_OPENMAX=0 -- AC_MSG_NOTICE($openmax_disabled) -+ if test "$use_gles" = "yes" && test "$use_openmax" = "auto"; then -+ use_openmax="yes" -+ USE_OPENMAX=1 -+ HAVE_LIBOPENMAX=1 -+ AC_DEFINE([HAVE_LIBOPENMAX], [1], [Define to 1 if you have the 'LIBOPENMAX' library.]) -+ AC_DEFINE([OMX_SKIP64BIT], [1], [Define to 1 if you have the 'LIBOPENMAX' library.]) -+ AC_MSG_NOTICE($openmax_enabled) -+ elif test "$use_gles" = "yes" && test "$use_openmax" = "yes"; then -+ use_openmax="yes" -+ USE_OPENMAX=1 -+ HAVE_LIBOPENMAX=1 -+ AC_DEFINE([HAVE_LIBOPENMAX], [1], [Define to 1 if you have the 'LIBOPENMAX' library.]) -+ AC_MSG_NOTICE($openmax_enabled) -+ else -+ AC_MSG_NOTICE($openmax_disabled) -+ use_openmax=no -+ USE_OPENMAX=0 -+ fi - else - if test "$use_gles" = "yes" && test "$use_openmax" = "auto"; then - PKG_CHECK_MODULES([OPENMAX], [libomxil-bellagio], -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -index 30c0601..6d879e3 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -@@ -44,7 +44,7 @@ - #include "windowing/WindowingFactory.h" - #include "guilib/Texture.h" - #include "lib/DllSwScale.h" --#include "../dvdplayer/DVDCodecs/Video/OpenMaxVideo.h" -+#include "DVDCodecs/Video/OpenMaxVideo.h" - #include "threads/SingleLock.h" - #include "RenderCapture.h" - #include "RenderFormats.h" -@@ -1330,6 +1330,10 @@ void CLinuxRendererGLES::RenderOpenMax(int index, int field) - glActiveTexture(GL_TEXTURE0); - glBindTexture(m_textureTarget, textureId); - -+ GLint filter = m_scalingMethod == VS_SCALINGMETHOD_NEAREST ? GL_NEAREST : GL_LINEAR; -+ glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, filter); -+ glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, filter); -+ - g_Windowing.EnableGUIShader(SM_TEXTURE_RGBA); - - GLubyte idx[4] = {0, 1, 3, 2}; //determines order of triangle strip -@@ -2676,10 +2680,12 @@ unsigned int CLinuxRendererGLES::GetProcessorSize() - } - - #ifdef HAVE_LIBOPENMAX --void CLinuxRendererGLES::AddProcessor(COpenMax* openMax, DVDVideoPicture *picture, int index) -+void CLinuxRendererGLES::AddProcessor(COpenMaxVideoBuffer *openMaxBuffer, int index) - { - YUVBUFFER &buf = m_buffers[index]; -- buf.openMaxBuffer = picture->openMaxBuffer; -+ COpenMaxVideoBuffer *pic = openMaxBuffer->Acquire(); -+ SAFE_RELEASE(buf.openMaxBuffer); -+ buf.openMaxBuffer = pic; - } - #endif - #ifdef HAVE_VIDEOTOOLBOXDECODER -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -index 45e9c20..0ca56a2 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -@@ -39,7 +39,7 @@ class CRenderCapture; - class CBaseTexture; - namespace Shaders { class BaseYUV2RGBShader; } - namespace Shaders { class BaseVideoFilterShader; } --class COpenMaxVideo; -+class COpenMaxVideoBuffer; - class CDVDVideoCodecStageFright; - class CDVDMediaCodecInfo; - typedef std::vector<int> Features; -@@ -161,7 +161,7 @@ class CLinuxRendererGLES : public CBaseRenderer - virtual std::vector<ERenderFormat> SupportedFormats() { return m_formats; } - - #ifdef HAVE_LIBOPENMAX -- virtual void AddProcessor(COpenMax* openMax, DVDVideoPicture *picture, int index); -+ virtual void AddProcessor(COpenMaxVideoBuffer *openMaxVideoBuffer, int index); - #endif - #ifdef HAVE_VIDEOTOOLBOXDECODER - virtual void AddProcessor(struct __CVBuffer *cvBufferRef, int index); -@@ -275,7 +275,7 @@ class CLinuxRendererGLES : public CBaseRenderer - unsigned flipindex; /* used to decide if this has been uploaded */ - - #ifdef HAVE_LIBOPENMAX -- OpenMaxVideoBuffer *openMaxBuffer; -+ COpenMaxVideoBuffer *openMaxBuffer; - #endif - #ifdef HAVE_VIDEOTOOLBOXDECODER - struct __CVBuffer *cvBufferRef; -diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp -index 6832721..3503988 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.cpp -+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp -@@ -912,7 +912,7 @@ int CXBMCRenderManager::AddVideoPicture(DVDVideoPicture& pic) - #endif - #ifdef HAVE_LIBOPENMAX - else if(pic.format == RENDER_FMT_OMXEGL) -- m_pRenderer->AddProcessor(pic.openMax, &pic, index); -+ m_pRenderer->AddProcessor(pic.openMaxBuffer, index); - #endif - #ifdef TARGET_DARWIN - else if(pic.format == RENDER_FMT_CVBREF) -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -index 14ad038..18b8e3a 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -@@ -270,9 +270,12 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne - #endif - - #if defined(HAVE_LIBOPENMAX) -- if (CSettings::Get().GetBool("videoplayer.useomx") && !hint.software ) -+ if (!hint.software && CSettings::Get().GetBool("videoplayer.useomx")) - { -- if (hint.codec == AV_CODEC_ID_H264 || hint.codec == AV_CODEC_ID_MPEG2VIDEO || hint.codec == AV_CODEC_ID_VC1) -+ if (hint.codec == AV_CODEC_ID_H264 || hint.codec == AV_CODEC_ID_H263 || hint.codec == AV_CODEC_ID_MPEG4 || -+ hint.codec == AV_CODEC_ID_MPEG1VIDEO || hint.codec == AV_CODEC_ID_MPEG2VIDEO || -+ hint.codec == AV_CODEC_ID_VP6 || hint.codec == AV_CODEC_ID_VP6F || hint.codec == AV_CODEC_ID_VP6A || hint.codec == AV_CODEC_ID_VP8 || -+ hint.codec == AV_CODEC_ID_THEORA || hint.codec == AV_CODEC_ID_MJPEG || hint.codec == AV_CODEC_ID_MJPEGB || hint.codec == AV_CODEC_ID_VC1 || hint.codec == AV_CODEC_ID_WMV3) - { - if ( (pCodec = OpenCodec(new CDVDVideoCodecOpenMax(), hint, options)) ) return pCodec; - } -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -index f6751f4..dc047d7 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -@@ -44,9 +44,7 @@ struct DVDCodecAvailableType - namespace DXVA { class CSurfaceContext; } - namespace VAAPI { struct CHolder; } - namespace VDPAU { class CVdpauRenderPicture; } --class COpenMax; --class COpenMaxVideo; --struct OpenMaxVideoBuffer; -+class COpenMaxVideoBuffer; - class CDVDVideoCodecStageFright; - class CDVDMediaCodecInfo; - typedef void* EGLImageKHR; -@@ -75,8 +73,7 @@ struct DVDVideoPicture - }; - - struct { -- COpenMax *openMax; -- OpenMaxVideoBuffer *openMaxBuffer; -+ COpenMaxVideoBuffer *openMaxBuffer; - }; - - struct { -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -index b2e7816..7d33192 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -@@ -29,113 +29,43 @@ - #include "DVDStreamInfo.h" - #include "DVDVideoCodecOpenMax.h" - #include "OpenMaxVideo.h" -+#include "settings/Settings.h" - #include "utils/log.h" - --#define CLASSNAME "COpenMax" -+#define CLASSNAME "CDVDVideoCodecOpenMax" - //////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////// --CDVDVideoCodecOpenMax::CDVDVideoCodecOpenMax() : CDVDVideoCodec() -+CDVDVideoCodecOpenMax::CDVDVideoCodecOpenMax() - { - m_omx_decoder = NULL; -- m_pFormatName = "omx-xxxx"; -- -- m_convert_bitstream = false; -- memset(&m_videobuffer, 0, sizeof(DVDVideoPicture)); -+ CLog::Log(LOGDEBUG, "%s::%s %p\n", CLASSNAME, __func__, this); - } - - CDVDVideoCodecOpenMax::~CDVDVideoCodecOpenMax() - { -+ CLog::Log(LOGDEBUG, "%s::%s %p\n", CLASSNAME, __func__, this); - Dispose(); - } - - bool CDVDVideoCodecOpenMax::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) - { -- // we always qualify even if DVDFactoryCodec does this too. -- if (CSettings::Get().GetBool("videoplayer.useomx") && !hints.software) -- { -- m_convert_bitstream = false; -- -- switch (hints.codec) -- { -- case AV_CODEC_ID_H264: -- { -- m_pFormatName = "omx-h264"; -- if (hints.extrasize < 7 || hints.extradata == NULL) -- { -- CLog::Log(LOGNOTICE, -- "%s::%s - avcC data too small or missing", CLASSNAME, __func__); -- return false; -- } -- // valid avcC data (bitstream) always starts with the value 1 (version) -- if ( *(char*)hints.extradata == 1 ) -- m_convert_bitstream = bitstream_convert_init(hints.extradata, hints.extrasize); -- } -- break; -- case AV_CODEC_ID_MPEG4: -- m_pFormatName = "omx-mpeg4"; -- break; -- case AV_CODEC_ID_MPEG2VIDEO: -- m_pFormatName = "omx-mpeg2"; -- break; -- case AV_CODEC_ID_VC1: -- m_pFormatName = "omx-vc1"; -- break; -- default: -- return false; -- break; -- } -- -- m_omx_decoder = new COpenMaxVideo; -- if (!m_omx_decoder->Open(hints)) -- { -- CLog::Log(LOGERROR, -- "%s::%s - failed to open, codec(%d), profile(%d), level(%d)", -- CLASSNAME, __func__, hints.codec, hints.profile, hints.level); -- return false; -- } -- -- // allocate a YV12 DVDVideoPicture buffer. -- // first make sure all properties are reset. -- memset(&m_videobuffer, 0, sizeof(DVDVideoPicture)); -- -- m_videobuffer.dts = DVD_NOPTS_VALUE; -- m_videobuffer.pts = DVD_NOPTS_VALUE; -- //m_videobuffer.format = RENDER_FMT_YUV420P; -- m_videobuffer.format = RENDER_FMT_OMXEGL; -- m_videobuffer.color_range = 0; -- m_videobuffer.color_matrix = 4; -- m_videobuffer.iFlags = DVP_FLAG_ALLOCATED; -- m_videobuffer.iWidth = hints.width; -- m_videobuffer.iHeight = hints.height; -- m_videobuffer.iDisplayWidth = hints.width; -- m_videobuffer.iDisplayHeight = hints.height; -- -- return true; -- } -+ m_omx_decoder = new COpenMaxVideo; -+ return m_omx_decoder->Open(hints, options); -+} - -- return false; -+const char* CDVDVideoCodecOpenMax::GetName(void) -+{ -+ return m_omx_decoder ? m_omx_decoder->GetName() : "omx-xxx"; - } - - void CDVDVideoCodecOpenMax::Dispose() - { - if (m_omx_decoder) - { -- m_omx_decoder->Close(); -+ m_omx_decoder->Dispose(); - delete m_omx_decoder; - m_omx_decoder = NULL; - } -- if (m_videobuffer.iFlags & DVP_FLAG_ALLOCATED) -- { -- m_videobuffer.iFlags = 0; -- } -- if (m_convert_bitstream) -- { -- if (m_sps_pps_context.sps_pps_data) -- { -- free(m_sps_pps_context.sps_pps_data); -- m_sps_pps_context.sps_pps_data = NULL; -- } -- } - } - - void CDVDVideoCodecOpenMax::SetDropState(bool bDrop) -@@ -145,37 +75,12 @@ void CDVDVideoCodecOpenMax::SetDropState(bool bDrop) - - int CDVDVideoCodecOpenMax::Decode(uint8_t* pData, int iSize, double dts, double pts) - { -- if (pData) -- { -- int rtn; -- int demuxer_bytes = iSize; -- uint8_t *demuxer_content = pData; -- bool bitstream_convered = false; -- -- if (m_convert_bitstream) -- { -- // convert demuxer packet from bitstream to bytestream (AnnexB) -- int bytestream_size = 0; -- uint8_t *bytestream_buff = NULL; -- -- bitstream_convert(demuxer_content, demuxer_bytes, &bytestream_buff, &bytestream_size); -- if (bytestream_buff && (bytestream_size > 0)) -- { -- bitstream_convered = true; -- demuxer_bytes = bytestream_size; -- demuxer_content = bytestream_buff; -- } -- } -- -- rtn = m_omx_decoder->Decode(demuxer_content, demuxer_bytes, dts, pts); -- -- if (bitstream_convered) -- free(demuxer_content); -+ return m_omx_decoder->Decode(pData, iSize, dts, pts); -+} - -- return rtn; -- } -- -- return VC_BUFFER; -+unsigned CDVDVideoCodecOpenMax::GetAllowedReferences() -+{ -+ return m_omx_decoder->GetAllowedReferences(); - } - - void CDVDVideoCodecOpenMax::Reset(void) -@@ -185,172 +90,12 @@ void CDVDVideoCodecOpenMax::Reset(void) - - bool CDVDVideoCodecOpenMax::GetPicture(DVDVideoPicture* pDvdVideoPicture) - { -- m_omx_decoder->GetPicture(&m_videobuffer); -- *pDvdVideoPicture = m_videobuffer; -- -- return VC_PICTURE | VC_BUFFER; --} -- --//////////////////////////////////////////////////////////////////////////////////////////// --bool CDVDVideoCodecOpenMax::bitstream_convert_init(void *in_extradata, int in_extrasize) --{ -- // based on h264_mp4toannexb_bsf.c (ffmpeg) -- // which is Copyright (c) 2007 Benoit Fouet <benoit.fouet@free.fr> -- // and Licensed GPL 2.1 or greater -- -- m_sps_pps_size = 0; -- m_sps_pps_context.sps_pps_data = NULL; -- -- // nothing to filter -- if (!in_extradata || in_extrasize < 6) -- return false; -- -- uint16_t unit_size; -- uint32_t total_size = 0; -- uint8_t *out = NULL, unit_nb, sps_done = 0; -- const uint8_t *extradata = (uint8_t*)in_extradata + 4; -- static const uint8_t nalu_header[4] = {0, 0, 0, 1}; -- -- // retrieve length coded size -- m_sps_pps_context.length_size = (*extradata++ & 0x3) + 1; -- if (m_sps_pps_context.length_size == 3) -- return false; -- -- // retrieve sps and pps unit(s) -- unit_nb = *extradata++ & 0x1f; // number of sps unit(s) -- if (!unit_nb) -- { -- unit_nb = *extradata++; // number of pps unit(s) -- sps_done++; -- } -- while (unit_nb--) -- { -- unit_size = extradata[0] << 8 | extradata[1]; -- total_size += unit_size + 4; -- if ( (extradata + 2 + unit_size) > ((uint8_t*)in_extradata + in_extrasize) ) -- { -- free(out); -- return false; -- } -- uint8_t* new_out = (uint8_t*)realloc(out, total_size); -- if (new_out) -- { -- out = new_out; -- } -- else -- { -- CLog::Log(LOGERROR, "bitstream_convert_init failed - %s : could not realloc the buffer out", __FUNCTION__); -- free(out); -- return false; -- } -- -- memcpy(out + total_size - unit_size - 4, nalu_header, 4); -- memcpy(out + total_size - unit_size, extradata + 2, unit_size); -- extradata += 2 + unit_size; -- -- if (!unit_nb && !sps_done++) -- unit_nb = *extradata++; // number of pps unit(s) -- } -- -- m_sps_pps_context.sps_pps_data = out; -- m_sps_pps_context.size = total_size; -- m_sps_pps_context.first_idr = 1; -- -- return true; --} -- --bool CDVDVideoCodecOpenMax::bitstream_convert(uint8_t* pData, int iSize, uint8_t **poutbuf, int *poutbuf_size) --{ -- // based on h264_mp4toannexb_bsf.c (ffmpeg) -- // which is Copyright (c) 2007 Benoit Fouet <benoit.fouet@free.fr> -- // and Licensed GPL 2.1 or greater -- -- uint8_t *buf = pData; -- uint32_t buf_size = iSize; -- uint8_t unit_type; -- int32_t nal_size; -- uint32_t cumul_size = 0; -- const uint8_t *buf_end = buf + buf_size; -- -- do -- { -- if (buf + m_sps_pps_context.length_size > buf_end) -- goto fail; -- -- if (m_sps_pps_context.length_size == 1) -- nal_size = buf[0]; -- else if (m_sps_pps_context.length_size == 2) -- nal_size = buf[0] << 8 | buf[1]; -- else -- nal_size = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]; -- -- buf += m_sps_pps_context.length_size; -- unit_type = *buf & 0x1f; -- -- if (buf + nal_size > buf_end || nal_size < 0) -- goto fail; -- -- // prepend only to the first type 5 NAL unit of an IDR picture -- if (m_sps_pps_context.first_idr && unit_type == 5) -- { -- bitstream_alloc_and_copy(poutbuf, poutbuf_size, -- m_sps_pps_context.sps_pps_data, m_sps_pps_context.size, buf, nal_size); -- m_sps_pps_context.first_idr = 0; -- } -- else -- { -- bitstream_alloc_and_copy(poutbuf, poutbuf_size, NULL, 0, buf, nal_size); -- if (!m_sps_pps_context.first_idr && unit_type == 1) -- m_sps_pps_context.first_idr = 1; -- } -- -- buf += nal_size; -- cumul_size += nal_size + m_sps_pps_context.length_size; -- } while (cumul_size < buf_size); -- -- return true; -- --fail: -- free(*poutbuf); -- *poutbuf = NULL; -- *poutbuf_size = 0; -- return false; -+ return m_omx_decoder->GetPicture(pDvdVideoPicture); - } - --void CDVDVideoCodecOpenMax::bitstream_alloc_and_copy( -- uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *sps_pps, uint32_t sps_pps_size, -- const uint8_t *in, uint32_t in_size) -+bool CDVDVideoCodecOpenMax::ClearPicture(DVDVideoPicture* pDvdVideoPicture) - { -- // based on h264_mp4toannexb_bsf.c (ffmpeg) -- // which is Copyright (c) 2007 Benoit Fouet <benoit.fouet@free.fr> -- // and Licensed GPL 2.1 or greater -- -- #define CHD_WB32(p, d) { \ -- ((uint8_t*)(p))[3] = (d); \ -- ((uint8_t*)(p))[2] = (d) >> 8; \ -- ((uint8_t*)(p))[1] = (d) >> 16; \ -- ((uint8_t*)(p))[0] = (d) >> 24; } -- -- uint32_t offset = *poutbuf_size; -- uint8_t nal_header_size = offset ? 3 : 4; -- -- *poutbuf_size += sps_pps_size + in_size + nal_header_size; -- *poutbuf = (uint8_t*)realloc(*poutbuf, *poutbuf_size); -- if (sps_pps) -- memcpy(*poutbuf + offset, sps_pps, sps_pps_size); -- -- memcpy(*poutbuf + sps_pps_size + nal_header_size + offset, in, in_size); -- if (!offset) -- { -- CHD_WB32(*poutbuf + sps_pps_size, 1); -- } -- else -- { -- (*poutbuf + offset + sps_pps_size)[0] = 0; -- (*poutbuf + offset + sps_pps_size)[1] = 0; -- (*poutbuf + offset + sps_pps_size)[2] = 1; -- } -+ return m_omx_decoder->ClearPicture(pDvdVideoPicture); - } - - #endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -index fb80d02..67cc235 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -@@ -23,7 +23,7 @@ - - #include "DVDVideoCodec.h" - --class COpenVideoMax; -+class COpenMaxVideo; - class CDVDVideoCodecOpenMax : public CDVDVideoCodec - { - public: -@@ -36,39 +36,13 @@ class CDVDVideoCodecOpenMax : public CDVDVideoCodec - virtual int Decode(uint8_t *pData, int iSize, double dts, double pts); - virtual void Reset(void); - virtual bool GetPicture(DVDVideoPicture *pDvdVideoPicture); -+ virtual bool ClearPicture(DVDVideoPicture* pDvdVideoPicture); -+ virtual unsigned GetAllowedReferences(); - virtual void SetDropState(bool bDrop); -- virtual const char* GetName(void) { return (const char*)m_pFormatName; } -+ virtual const char* GetName(void); - - protected: -- const char *m_pFormatName; - COpenMaxVideo *m_omx_decoder; -- DVDVideoPicture m_videobuffer; -- -- // bitstream to bytestream (Annex B) conversion support. -- bool bitstream_convert_init(void *in_extradata, int in_extrasize); -- bool bitstream_convert(uint8_t* pData, int iSize, uint8_t **poutbuf, int *poutbuf_size); -- static void bitstream_alloc_and_copy( uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *sps_pps, uint32_t sps_pps_size, const uint8_t *in, uint32_t in_size); -- -- typedef struct omx_bitstream_ctx { -- uint8_t length_size; -- uint8_t first_idr; -- uint8_t *sps_pps_data; -- uint32_t size; -- -- omx_bitstream_ctx() -- { -- length_size = 0; -- first_idr = 0; -- sps_pps_data = NULL; -- size = 0; -- } -- -- } omx_bitstream_ctx; -- -- uint32_t m_sps_pps_size; -- omx_bitstream_ctx m_sps_pps_context; -- bool m_convert_bitstream; - }; - - #endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in b/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in -index 8a97889..ebf7123 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in -@@ -20,7 +20,6 @@ SRCS += DVDVideoCodecVDA.cpp - SRCS += VDA.cpp - endif - ifeq (@USE_OPENMAX@,1) --SRCS += OpenMax.cpp - SRCS += OpenMaxVideo.cpp - SRCS += DVDVideoCodecOpenMax.cpp - endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.cpp -deleted file mode 100644 -index 7b0a0c2ef..0000000 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.cpp -+++ /dev/null -@@ -1,269 +0,0 @@ --/* -- * Copyright (C) 2010-2013 Team XBMC -- * http://xbmc.org -- * -- * This Program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This Program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with XBMC; see the file COPYING. If not, see -- * <http://www.gnu.org/licenses/>. -- * -- */ -- --#if (defined HAVE_CONFIG_H) && (!defined TARGET_WINDOWS) -- #include "config.h" --#elif defined(TARGET_WINDOWS) --#include "system.h" --#endif -- --#if defined(HAVE_LIBOPENMAX) --#include "OpenMax.h" --#include "DynamicDll.h" --#include "DVDClock.h" --#include "DVDStreamInfo.h" --#include "windowing/WindowingFactory.h" --#include "DVDVideoCodec.h" --#include "utils/log.h" --#include "utils/TimeUtils.h" --#include "ApplicationMessenger.h" --#include "Application.h" -- --#include <OMX_Core.h> --#include <OMX_Component.h> --#include <OMX_Index.h> --#include <OMX_Image.h> -- --#define CLASSNAME "COpenMax" -- -- --//////////////////////////////////////////////////////////////////////////////////////////// --class DllLibOpenMaxInterface --{ --public: -- virtual ~DllLibOpenMaxInterface() {} -- -- virtual OMX_ERRORTYPE OMX_Init(void) = 0; -- virtual OMX_ERRORTYPE OMX_Deinit(void) = 0; -- virtual OMX_ERRORTYPE OMX_GetHandle( -- OMX_HANDLETYPE *pHandle, OMX_STRING cComponentName, OMX_PTR pAppData, OMX_CALLBACKTYPE *pCallBacks) = 0; -- virtual OMX_ERRORTYPE OMX_FreeHandle(OMX_HANDLETYPE hComponent) = 0; -- virtual OMX_ERRORTYPE OMX_GetComponentsOfRole(OMX_STRING role, OMX_U32 *pNumComps, OMX_U8 **compNames) = 0; -- virtual OMX_ERRORTYPE OMX_GetRolesOfComponent(OMX_STRING compName, OMX_U32 *pNumRoles, OMX_U8 **roles) = 0; -- virtual OMX_ERRORTYPE OMX_ComponentNameEnum(OMX_STRING cComponentName, OMX_U32 nNameLength, OMX_U32 nIndex) = 0; --}; -- --class DllLibOpenMax : public DllDynamic, DllLibOpenMaxInterface --{ -- DECLARE_DLL_WRAPPER(DllLibOpenMax, "/usr/lib/libnvomx.so") -- -- DEFINE_METHOD0(OMX_ERRORTYPE, OMX_Init) -- DEFINE_METHOD0(OMX_ERRORTYPE, OMX_Deinit) -- DEFINE_METHOD4(OMX_ERRORTYPE, OMX_GetHandle, (OMX_HANDLETYPE *p1, OMX_STRING p2, OMX_PTR p3, OMX_CALLBACKTYPE *p4)) -- DEFINE_METHOD1(OMX_ERRORTYPE, OMX_FreeHandle, (OMX_HANDLETYPE p1)) -- DEFINE_METHOD3(OMX_ERRORTYPE, OMX_GetComponentsOfRole, (OMX_STRING p1, OMX_U32 *p2, OMX_U8 **p3)) -- DEFINE_METHOD3(OMX_ERRORTYPE, OMX_GetRolesOfComponent, (OMX_STRING p1, OMX_U32 *p2, OMX_U8 **p3)) -- DEFINE_METHOD3(OMX_ERRORTYPE, OMX_ComponentNameEnum, (OMX_STRING p1, OMX_U32 p2, OMX_U32 p3)) -- BEGIN_METHOD_RESOLVE() -- RESOLVE_METHOD(OMX_Init) -- RESOLVE_METHOD(OMX_Deinit) -- RESOLVE_METHOD(OMX_GetHandle) -- RESOLVE_METHOD(OMX_FreeHandle) -- RESOLVE_METHOD(OMX_GetComponentsOfRole) -- RESOLVE_METHOD(OMX_GetRolesOfComponent) -- RESOLVE_METHOD(OMX_ComponentNameEnum) -- END_METHOD_RESOLVE() --}; -- --//////////////////////////////////////////////////////////////////////////////////////////// --#define OMX_INIT_STRUCTURE(a) \ -- memset(&(a), 0, sizeof(a)); \ -- (a).nSize = sizeof(a); \ -- (a).nVersion.s.nVersionMajor = OMX_VERSION_MAJOR; \ -- (a).nVersion.s.nVersionMinor = OMX_VERSION_MINOR; \ -- (a).nVersion.s.nRevision = OMX_VERSION_REVISION; \ -- (a).nVersion.s.nStep = OMX_VERSION_STEP -- --//////////////////////////////////////////////////////////////////////////////////////////// --//////////////////////////////////////////////////////////////////////////////////////////// --COpenMax::COpenMax() --{ -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -- #endif -- m_dll = new DllLibOpenMax; -- m_dll->Load(); -- m_is_open = false; -- -- m_omx_decoder = NULL; -- m_omx_client_state = DEAD; -- m_omx_decoder_state = 0; -- sem_init(m_omx_decoder_state_change, 0, 0); -- /* -- m_omx_flush_input = (sem_t*)malloc(sizeof(sem_t)); -- sem_init(m_omx_flush_input, 0, 0); -- m_omx_flush_output = (sem_t*)malloc(sizeof(sem_t)); -- sem_init(m_omx_flush_output, 0, 0); -- */ --} -- --COpenMax::~COpenMax() --{ -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -- #endif -- /* -- sem_destroy(m_omx_flush_input); -- free(m_omx_flush_input); -- sem_destroy(m_omx_flush_output); -- free(m_omx_flush_output); -- */ -- delete m_dll; --} -- -- -- -- --//////////////////////////////////////////////////////////////////////////////////////////// --// DecoderEventHandler -- OMX event callback --OMX_ERRORTYPE COpenMax::DecoderEventHandlerCallback( -- OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, -- OMX_U32 nData1, -- OMX_U32 nData2, -- OMX_PTR pEventData) --{ -- COpenMax *ctx = (COpenMax*)pAppData; -- return ctx->DecoderEventHandler(hComponent, pAppData, eEvent, nData1, nData2, pEventData); --} -- --// DecoderEmptyBufferDone -- OpenMax input buffer has been emptied --OMX_ERRORTYPE COpenMax::DecoderEmptyBufferDoneCallback( -- OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, -- OMX_BUFFERHEADERTYPE* pBuffer) --{ -- COpenMax *ctx = (COpenMax*)pAppData; -- return ctx->DecoderEmptyBufferDone( hComponent, pAppData, pBuffer); --} -- --// DecoderFillBufferDone -- OpenMax output buffer has been filled --OMX_ERRORTYPE COpenMax::DecoderFillBufferDoneCallback( -- OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, -- OMX_BUFFERHEADERTYPE* pBuffer) --{ -- COpenMax *ctx = (COpenMax*)pAppData; -- return ctx->DecoderFillBufferDone(hComponent, pAppData, pBuffer); --} -- -- -- --// Wait for a component to transition to the specified state --OMX_ERRORTYPE COpenMax::WaitForState(OMX_STATETYPE state) --{ -- OMX_STATETYPE test_state; -- int tries = 0; -- struct timespec timeout; -- OMX_ERRORTYPE omx_error = OMX_GetState(m_omx_decoder, &test_state); -- -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - waiting for state(%d)\n", CLASSNAME, __func__, state); -- #endif -- while ((omx_error == OMX_ErrorNone) && (test_state != state)) -- { -- clock_gettime(CLOCK_REALTIME, &timeout); -- timeout.tv_sec += 1; -- sem_timedwait(m_omx_decoder_state_change, &timeout); -- if (errno == ETIMEDOUT) -- tries++; -- if (tries > 5) -- return OMX_ErrorUndefined; -- -- omx_error = OMX_GetState(m_omx_decoder, &test_state); -- } -- -- return omx_error; --} -- --// SetStateForAllComponents --// Blocks until all state changes have completed --OMX_ERRORTYPE COpenMax::SetStateForComponent(OMX_STATETYPE state) --{ -- OMX_ERRORTYPE omx_err; -- -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - state(%d)\n", CLASSNAME, __func__, state); -- #endif -- omx_err = OMX_SendCommand(m_omx_decoder, OMX_CommandStateSet, state, 0); -- if (omx_err) -- CLog::Log(LOGERROR, "%s::%s - OMX_CommandStateSet failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- else -- omx_err = WaitForState(state); -- -- return omx_err; --} -- --bool COpenMax::Initialize( const CStdString &decoder_name) --{ -- OMX_ERRORTYPE omx_err = m_dll->OMX_Init(); -- if (omx_err) -- { -- CLog::Log(LOGERROR, -- "%s::%s - OpenMax failed to init, status(%d), ", // codec(%d), profile(%d), level(%d) -- CLASSNAME, __func__, omx_err );//, hints.codec, hints.profile, hints.level); -- return false; -- } -- -- // Get video decoder handle setting up callbacks, component is in loaded state on return. -- static OMX_CALLBACKTYPE decoder_callbacks = { -- &DecoderEventHandlerCallback, &DecoderEmptyBufferDoneCallback, &DecoderFillBufferDoneCallback }; -- omx_err = m_dll->OMX_GetHandle(&m_omx_decoder, (char*)decoder_name.c_str(), this, &decoder_callbacks); -- if (omx_err) -- { -- CLog::Log(LOGERROR, -- "%s::%s - could not get decoder handle\n", CLASSNAME, __func__); -- m_dll->OMX_Deinit(); -- return false; -- } -- -- return true; --} -- --void COpenMax::Deinitialize() --{ -- CLog::Log(LOGERROR, -- "%s::%s - failed to get component port parameter\n", CLASSNAME, __func__); -- m_dll->OMX_FreeHandle(m_omx_decoder); -- m_omx_decoder = NULL; -- m_dll->OMX_Deinit(); --} -- --// OpenMax decoder callback routines. --OMX_ERRORTYPE COpenMax::DecoderEventHandler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData) --{ -- return OMX_ErrorNone; --} -- --OMX_ERRORTYPE COpenMax::DecoderEmptyBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer) --{ -- return OMX_ErrorNone; --} -- --OMX_ERRORTYPE COpenMax::DecoderFillBufferDone(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBufferHeader) --{ -- return OMX_ErrorNone; --} -- --#endif -- -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.h -deleted file mode 100644 -index 0d9ff18..0000000 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMax.h -+++ /dev/null -@@ -1,116 +0,0 @@ --#pragma once --/* -- * Copyright (C) 2010-2013 Team XBMC -- * http://xbmc.org -- * -- * This Program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This Program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with XBMC; see the file COPYING. If not, see -- * <http://www.gnu.org/licenses/>. -- * -- */ -- --#if defined(HAVE_LIBOPENMAX) -- --#include "cores/dvdplayer/DVDStreamInfo.h" --#include "DVDVideoCodec.h" --#include "threads/Event.h" -- --#include <queue> --#include <semaphore.h> --#include <OMX_Core.h> -- --//////////////////////////////////////////////////////////////////////////////////////////// --// debug spew defines --#if 0 --#define OMX_DEBUG_VERBOSE --#define OMX_DEBUG_EVENTHANDLER --#define OMX_DEBUG_FILLBUFFERDONE --#define OMX_DEBUG_EMPTYBUFFERDONE --#endif -- --typedef struct omx_codec_capability { -- // level is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE, -- // or OMX_VIDEO_MPEG4PROFILETYPE depending on context. -- OMX_U32 level; -- // level is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE, -- // or OMX_VIDEO_MPEG4PROFILETYPE depending on context. -- OMX_U32 profile; --} omx_codec_capability; -- --typedef struct omx_demux_packet { -- OMX_U8 *buff; -- int size; -- double dts; -- double pts; --} omx_demux_packet; -- --class DllLibOpenMax; --class COpenMax --{ --public: -- COpenMax(); -- virtual ~COpenMax(); -- --protected: -- enum OMX_CLIENT_STATE { -- DEAD, -- LOADED, -- LOADED_TO_IDLE, -- IDLE_TO_EXECUTING, -- EXECUTING, -- EXECUTING_TO_IDLE, -- IDLE_TO_LOADED, -- RECONFIGURING, -- ERROR -- }; -- -- // initialize OpenMax and get decoder component -- bool Initialize( const CStdString &decoder_name); -- void Deinitialize(); -- -- // OpenMax Decoder delegate callback routines. -- static OMX_ERRORTYPE DecoderEventHandlerCallback(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData); -- static OMX_ERRORTYPE DecoderEmptyBufferDoneCallback( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer); -- static OMX_ERRORTYPE DecoderFillBufferDoneCallback( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBufferHeader); -- -- // OpenMax decoder callback routines. -- virtual OMX_ERRORTYPE DecoderEventHandler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData); -- virtual OMX_ERRORTYPE DecoderEmptyBufferDone( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer); -- virtual OMX_ERRORTYPE DecoderFillBufferDone( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBufferHeader); -- -- // OpenMax helper routines -- OMX_ERRORTYPE WaitForState(OMX_STATETYPE state); -- OMX_ERRORTYPE SetStateForComponent(OMX_STATETYPE state); -- -- DllLibOpenMax *m_dll; -- bool m_is_open; -- OMX_HANDLETYPE m_omx_decoder; // openmax decoder component reference -- -- // OpenMax state tracking -- OMX_CLIENT_STATE m_omx_client_state; -- volatile int m_omx_decoder_state; -- sem_t *m_omx_decoder_state_change; -- std::vector<omx_codec_capability> m_omx_decoder_capabilities; -- --private: -- COpenMax(const COpenMax& other); -- COpenMax& operator=(const COpenMax&); --}; -- --#endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index dcbdb1e..aca2e0d 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -32,673 +32,891 @@ - #include "DVDVideoCodec.h" - #include "utils/log.h" - #include "utils/TimeUtils.h" -+#include "settings/Settings.h" - #include "ApplicationMessenger.h" - #include "Application.h" -+#include "threads/Atomics.h" - --#include <OMX_Core.h> --#include <OMX_Component.h> --#include <OMX_Index.h> --#include <OMX_Image.h> -+#include <IL/OMX_Core.h> -+#include <IL/OMX_Component.h> -+#include <IL/OMX_Index.h> -+#include <IL/OMX_Image.h> - -+#include "cores/omxplayer/OMXImage.h" -+ -+#define DTS_QUEUE -+ -+#define DEFAULT_TIMEOUT 1000 -+#ifdef _DEBUG -+#define OMX_DEBUG_VERBOSE -+#endif - - #define CLASSNAME "COpenMaxVideo" - --// TODO: These are Nvidia Tegra2 dependent, need to dynamiclly find the --// right codec matched to video format. --#define OMX_H264BASE_DECODER "OMX.Nvidia.h264.decode" --// OMX.Nvidia.h264ext.decode segfaults, not sure why. --//#define OMX_H264MAIN_DECODER "OMX.Nvidia.h264ext.decode" --#define OMX_H264MAIN_DECODER "OMX.Nvidia.h264.decode" --#define OMX_H264HIGH_DECODER "OMX.Nvidia.h264ext.decode" --#define OMX_MPEG4_DECODER "OMX.Nvidia.mp4.decode" --#define OMX_MPEG4EXT_DECODER "OMX.Nvidia.mp4ext.decode" --#define OMX_MPEG2V_DECODER "OMX.Nvidia.mpeg2v.decode" --#define OMX_VC1_DECODER "OMX.Nvidia.vc1.decode" -- --// EGL extension functions --static PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR; --static PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR; --#define GETEXTENSION(type, ext) \ --do \ --{ \ -- ext = (type) eglGetProcAddress(#ext); \ -- if (!ext) \ -- { \ -- CLog::Log(LOGERROR, "%s::%s - ERROR getting proc addr of " #ext "\n", CLASSNAME, __func__); \ -- } \ --} while (0); -- --#define OMX_INIT_STRUCTURE(a) \ -- memset(&(a), 0, sizeof(a)); \ -- (a).nSize = sizeof(a); \ -- (a).nVersion.s.nVersionMajor = OMX_VERSION_MAJOR; \ -- (a).nVersion.s.nVersionMinor = OMX_VERSION_MINOR; \ -- (a).nVersion.s.nRevision = OMX_VERSION_REVISION; \ -- (a).nVersion.s.nStep = OMX_VERSION_STEP -+COpenMaxVideoBuffer::COpenMaxVideoBuffer(COpenMaxVideo *omv) -+ : m_omv(omv), m_refs(0) -+{ -+ CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); -+ omx_buffer = NULL; -+ width = 0; -+ height = 0; -+ index = 0; -+ egl_image = 0; -+ texture_id = 0; -+} -+ -+COpenMaxVideoBuffer::~COpenMaxVideoBuffer() -+{ -+ CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); -+} - - --COpenMaxVideo::COpenMaxVideo() -+// DecoderFillBufferDone -- OpenMax output buffer has been filled -+static OMX_ERRORTYPE DecoderFillBufferDoneCallback( -+ OMX_HANDLETYPE hComponent, -+ OMX_PTR pAppData, -+ OMX_BUFFERHEADERTYPE* pBuffer) -+{ -+ COpenMaxVideoBuffer *pic = static_cast<COpenMaxVideoBuffer*>(pBuffer->pAppPrivate); -+ COpenMaxVideo *ctx = pic->m_omv; -+ return ctx->DecoderFillBufferDone(hComponent, pBuffer); -+} -+ -+ -+COpenMaxVideoBuffer* COpenMaxVideoBuffer::Acquire() -+{ -+ long count = AtomicIncrement(&m_refs); -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s %p ref:%ld", CLASSNAME, __func__, this, count); -+ #endif -+ (void)count; -+ return this; -+} -+ -+long COpenMaxVideoBuffer::Release() - { -- m_portChanging = false; -+ long count = AtomicDecrement(&m_refs); -+ if (count == 0) -+ { -+ m_omv->ReleaseOpenMaxBuffer(this); -+ } -+ -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s %p ref:%ld", CLASSNAME, __func__, this, count); -+ #endif -+ return count; -+} - -- pthread_mutex_init(&m_omx_input_mutex, NULL); -+void COpenMaxVideoBuffer::Sync() -+{ -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s %p ref:%ld", CLASSNAME, __func__, this, m_refs); -+ #endif -+ Release(); -+} -+ -+COpenMaxVideo::COpenMaxVideo() -+{ -+ CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); - pthread_mutex_init(&m_omx_output_mutex, NULL); - -- m_omx_decoder_state_change = (sem_t*)malloc(sizeof(sem_t)); -- sem_init(m_omx_decoder_state_change, 0, 0); -- memset(&m_videobuffer, 0, sizeof(DVDVideoPicture)); - m_drop_state = false; - m_decoded_width = 0; - m_decoded_height = 0; -- m_omx_input_eos = false; -- m_omx_input_port = 0; -- m_omx_output_eos = false; -- m_omx_output_port = 0; -- m_videoplayback_done = false; -+ m_egl_buffer_count = 0; -+ -+ m_port_settings_changed = false; -+ m_pFormatName = "omx-xxxx"; - } - - COpenMaxVideo::~COpenMaxVideo() - { - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); - #endif -- if (m_is_open) -- Close(); -- pthread_mutex_destroy(&m_omx_input_mutex); -+ if (m_omx_decoder.IsInitialized()) -+ { -+ if (m_omx_tunnel.IsInitialized()) -+ m_omx_tunnel.Deestablish(); -+ -+ StopDecoder(); -+ -+ if (m_omx_egl_render.IsInitialized()) -+ m_omx_egl_render.Deinitialize(); -+ if (m_omx_decoder.IsInitialized()) -+ m_omx_decoder.Deinitialize(); -+ } - pthread_mutex_destroy(&m_omx_output_mutex); -- sem_destroy(m_omx_decoder_state_change); -- free(m_omx_decoder_state_change); - } - --bool COpenMaxVideo::Open(CDVDStreamInfo &hints) -+bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) - { - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif - -+ // we always qualify even if DVDFactoryCodec does this too. -+ if (!CSettings::Get().GetBool("videoplayer.useomx") || hints.software) -+ return false; -+ - OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- std::string decoder_name; - - m_decoded_width = hints.width; - m_decoded_height = hints.height; - -+ m_egl_display = g_Windowing.GetEGLDisplay(); -+ m_egl_context = g_Windowing.GetEGLContext(); -+ m_egl_buffer_count = 4; -+ -+ m_codingType = OMX_VIDEO_CodingUnused; -+ - switch (hints.codec) - { - case AV_CODEC_ID_H264: -- { -- switch(hints.profile) -- { -- case FF_PROFILE_H264_BASELINE: -- // (role name) video_decoder.avc -- // H.264 Baseline profile -- decoder_name = OMX_H264BASE_DECODER; -- break; -- case FF_PROFILE_H264_MAIN: -- // (role name) video_decoder.avc -- // H.264 Main profile -- decoder_name = OMX_H264MAIN_DECODER; -- break; -- case FF_PROFILE_H264_HIGH: -- // (role name) video_decoder.avc -- // H.264 Main profile -- decoder_name = OMX_H264HIGH_DECODER; -- break; -- default: -- return false; -- break; -- } -- } -+ // H.264 -+ m_codingType = OMX_VIDEO_CodingAVC; -+ m_pFormatName = "omx-h264"; - break; -+ case AV_CODEC_ID_H263: - case AV_CODEC_ID_MPEG4: -- // (role name) video_decoder.mpeg4 -- // MPEG-4, DivX 4/5 and Xvid compatible -- decoder_name = OMX_MPEG4_DECODER; -- break; -- /* -- TODO: what mpeg4 formats are "ext" ???? -- case NvxStreamType_MPEG4Ext: -- // (role name) video_decoder.mpeg4 - // MPEG-4, DivX 4/5 and Xvid compatible -- decoder_name = OMX_MPEG4EXT_DECODER; -+ m_codingType = OMX_VIDEO_CodingMPEG4; - m_pFormatName = "omx-mpeg4"; - break; -- */ -+ case AV_CODEC_ID_MPEG1VIDEO: - case AV_CODEC_ID_MPEG2VIDEO: -- // (role name) video_decoder.mpeg2 - // MPEG-2 -- decoder_name = OMX_MPEG2V_DECODER; -+ m_codingType = OMX_VIDEO_CodingMPEG2; -+ m_pFormatName = "omx-mpeg2"; -+ break; -+ case AV_CODEC_ID_VP6: -+ // this form is encoded upside down -+ // fall through -+ case AV_CODEC_ID_VP6F: -+ case AV_CODEC_ID_VP6A: -+ // VP6 -+ m_codingType = OMX_VIDEO_CodingVP6; -+ m_pFormatName = "omx-vp6"; -+ break; -+ case AV_CODEC_ID_VP8: -+ // VP8 -+ m_codingType = OMX_VIDEO_CodingVP8; -+ m_pFormatName = "omx-vp8"; -+ break; -+ case AV_CODEC_ID_THEORA: -+ // theora -+ m_codingType = OMX_VIDEO_CodingTheora; -+ m_pFormatName = "omx-theora"; -+ break; -+ case AV_CODEC_ID_MJPEG: -+ case AV_CODEC_ID_MJPEGB: -+ // mjpg -+ m_codingType = OMX_VIDEO_CodingMJPEG; -+ m_pFormatName = "omx-mjpg"; - break; - case AV_CODEC_ID_VC1: -- // (role name) video_decoder.vc1 -+ case AV_CODEC_ID_WMV3: - // VC-1, WMV9 -- decoder_name = OMX_VC1_DECODER; -- break; -+ m_codingType = OMX_VIDEO_CodingWMV; -+ m_pFormatName = "omx-vc1"; -+ break; - default: -+ CLog::Log(LOGERROR, "%s::%s : Video codec unknown: %x", CLASSNAME, __func__, hints.codec); - return false; - break; - } - - // initialize OpenMAX. -- if (!Initialize(decoder_name)) -+ if (!m_omx_decoder.Initialize("OMX.broadcom.video_decode", OMX_IndexParamVideoInit)) - { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_decoder.Initialize", CLASSNAME, __func__); - return false; - } - -- // TODO: Find component from role name. -- // Get the port information. This will obtain information about the -- // number of ports and index of the first port. -- OMX_PORT_PARAM_TYPE port_param; -- OMX_INIT_STRUCTURE(port_param); -- omx_err = OMX_GetParameter(m_omx_decoder, OMX_IndexParamVideoInit, &port_param); -- if (omx_err) -+ omx_err = m_omx_decoder.SetStateForComponent(OMX_StateIdle); -+ if (omx_err != OMX_ErrorNone) - { -- Deinitialize(); -+ CLog::Log(LOGERROR, "%s::%s m_omx_decoder.SetStateForComponent omx_err(0x%08x)", CLASSNAME, __func__, omx_err); - return false; - } -- m_omx_input_port = port_param.nStartPortNumber; -- m_omx_output_port = m_omx_input_port + 1; -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, -- "%s::%s - decoder_component(0x%p), input_port(0x%x), output_port(0x%x)\n", -- CLASSNAME, __func__, m_omx_decoder, m_omx_input_port, m_omx_output_port); -- #endif - -- // TODO: Set role for the component because components could have multiple roles. -- //QueryCodec(); -+ OMX_VIDEO_PARAM_PORTFORMATTYPE formatType; -+ OMX_INIT_STRUCTURE(formatType); -+ formatType.nPortIndex = m_omx_decoder.GetInputPort(); -+ formatType.eCompressionFormat = m_codingType; -+ -+ omx_err = m_omx_decoder.SetParameter(OMX_IndexParamVideoPortFormat, &formatType); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_decoder.SetParameter omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ OMX_PARAM_PORTDEFINITIONTYPE portParam; -+ OMX_INIT_STRUCTURE(portParam); -+ portParam.nPortIndex = m_omx_decoder.GetInputPort(); -+ -+ omx_err = m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition, &portParam); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s error OMX_IndexParamPortDefinition omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ portParam.nPortIndex = m_omx_decoder.GetInputPort(); -+ portParam.nBufferCountActual = 20; -+ portParam.format.video.nFrameWidth = m_decoded_width; -+ portParam.format.video.nFrameHeight = m_decoded_height; -+ -+ omx_err = m_omx_decoder.SetParameter(OMX_IndexParamPortDefinition, &portParam); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s error OMX_IndexParamPortDefinition omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ // request portsettingschanged on aspect ratio change -+ OMX_CONFIG_REQUESTCALLBACKTYPE notifications; -+ OMX_INIT_STRUCTURE(notifications); -+ notifications.nPortIndex = m_omx_decoder.GetOutputPort(); -+ notifications.nIndex = OMX_IndexParamBrcmPixelAspectRatio; -+ notifications.bEnable = OMX_TRUE; -+ -+ omx_err = m_omx_decoder.SetParameter((OMX_INDEXTYPE)OMX_IndexConfigRequestCallback, ¬ifications); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s OMX_IndexConfigRequestCallback error (0%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ if (NaluFormatStartCodes(hints.codec, (uint8_t *)hints.extradata, hints.extrasize)) -+ { -+ OMX_NALSTREAMFORMATTYPE nalStreamFormat; -+ OMX_INIT_STRUCTURE(nalStreamFormat); -+ nalStreamFormat.nPortIndex = m_omx_decoder.GetInputPort(); -+ nalStreamFormat.eNaluFormat = OMX_NaluFormatStartCodes; -+ -+ omx_err = m_omx_decoder.SetParameter((OMX_INDEXTYPE)OMX_IndexParamNalStreamFormatSelect, &nalStreamFormat); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s OMX_IndexParamNalStreamFormatSelect error (0%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ } - -- // Component will be in OMX_StateLoaded now so we can alloc omx input/output buffers. -- // we can only alloc them in OMX_StateLoaded state or if the component port is disabled - // Alloc buffers for the omx input port. -- omx_err = AllocOMXInputBuffers(); -- if (omx_err) -+ omx_err = m_omx_decoder.AllocInputBuffers(); -+ if (omx_err != OMX_ErrorNone) - { -- Deinitialize(); -+ CLog::Log(LOGERROR, "%s::%s AllocInputBuffers error (0%08x)", CLASSNAME, __func__, omx_err); - return false; - } -- // Alloc buffers for the omx output port. -- m_egl_display = g_Windowing.GetEGLDisplay(); -- m_egl_context = g_Windowing.GetEGLContext(); -- omx_err = AllocOMXOutputBuffers(); -- if (omx_err) -+ -+ omx_err = m_omx_decoder.SetStateForComponent(OMX_StateExecuting); -+ if (omx_err != OMX_ErrorNone) - { -- FreeOMXInputBuffers(false); -- Deinitialize(); -+ CLog::Log(LOGERROR, "%s::%s error m_omx_decoder.SetStateForComponent error (0%08x)", CLASSNAME, __func__, omx_err); - return false; - } - -- m_is_open = true; -- m_drop_state = false; -- m_videoplayback_done = false; -+ if (!SendDecoderConfig((uint8_t *)hints.extradata, hints.extrasize)) -+ return false; - -- // crank it up. -- StartDecoder(); -+ m_drop_state = false; - - return true; - } - --void COpenMaxVideo::Close() -+void COpenMaxVideo::Dispose() - { - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif -- if (m_omx_decoder) -- { -- if (m_omx_decoder_state != OMX_StateLoaded) -- StopDecoder(); -- Deinitialize(); -- } -- m_is_open = false; - } - - void COpenMaxVideo::SetDropState(bool bDrop) - { -+#if defined(OMX_DEBUG_VERBOSE) -+ if (m_drop_state != bDrop) -+ CLog::Log(LOGDEBUG, "%s::%s - m_drop_state(%d)", -+ CLASSNAME, __func__, bDrop); -+#endif - m_drop_state = bDrop; -+} - -- if (m_drop_state) -+bool COpenMaxVideo::SendDecoderConfig(uint8_t *extradata, int extrasize) -+{ -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; -+ -+ /* send decoder config */ -+ if (extrasize > 0 && extradata != NULL) - { -- OMX_ERRORTYPE omx_err; -+ OMX_BUFFERHEADERTYPE *omx_buffer = m_omx_decoder.GetInputBuffer(); - -- // blow all but the last ready video frame -- pthread_mutex_lock(&m_omx_output_mutex); -- while (m_omx_output_ready.size() > 1) -+ if (omx_buffer == NULL) - { -- m_dts_queue.pop(); -- OMX_BUFFERHEADERTYPE *omx_buffer = m_omx_output_ready.front()->omx_buffer; -- m_omx_output_ready.pop(); -- // return the omx buffer back to OpenMax to fill. -- omx_err = OMX_FillThisBuffer(m_omx_decoder, omx_buffer); -- if (omx_err) -- CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer, omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -+ CLog::Log(LOGERROR, "%s::%s - buffer error 0x%08x", CLASSNAME, __func__, omx_err); -+ return false; - } -- pthread_mutex_unlock(&m_omx_output_mutex); - -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - m_drop_state(%d)\n", -- CLASSNAME, __func__, m_drop_state); -- #endif -+ omx_buffer->nOffset = 0; -+ omx_buffer->nFilledLen = extrasize; -+ if (omx_buffer->nFilledLen > omx_buffer->nAllocLen) -+ { -+ CLog::Log(LOGERROR, "%s::%s - omx_buffer->nFilledLen > omx_buffer->nAllocLen", CLASSNAME, __func__); -+ return false; -+ } -+ -+ memcpy((unsigned char *)omx_buffer->pBuffer, extradata, omx_buffer->nFilledLen); -+ omx_buffer->nFlags = OMX_BUFFERFLAG_CODECCONFIG | OMX_BUFFERFLAG_ENDOFFRAME; -+ -+//CLog::Log(LOGINFO, "%s::%s - Empty(%d,%x)", CLASSNAME, __func__, omx_buffer->nFilledLen, omx_buffer->nFlags); CLog::MemDump((char *)omx_buffer->pBuffer, std::min(64U, omx_buffer->nFilledLen)); -+ omx_err = m_omx_decoder.EmptyThisBuffer(omx_buffer); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - OMX_EmptyThisBuffer() failed with result(0x%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } - } -+ return true; - } - --int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) -+bool COpenMaxVideo::NaluFormatStartCodes(enum AVCodecID codec, uint8_t *extradata, int extrasize) -+{ -+ switch(codec) -+ { -+ case AV_CODEC_ID_H264: -+ if (extrasize < 7 || extradata == NULL) -+ return true; -+ // valid avcC atom data always starts with the value 1 (version), otherwise annexb -+ else if ( *extradata != 1 ) -+ return true; -+ default: break; -+ } -+ return false; -+} -+ -+bool COpenMaxVideo::PortSettingsChanged() - { -- if (pData) -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; -+ -+ if (m_port_settings_changed) -+ { -+ m_omx_decoder.DisablePort(m_omx_decoder.GetOutputPort(), true); -+ } -+ -+ OMX_PARAM_PORTDEFINITIONTYPE port_def; -+ OMX_INIT_STRUCTURE(port_def); -+ port_def.nPortIndex = m_omx_decoder.GetOutputPort(); -+ omx_err = m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ OMX_CONFIG_POINTTYPE pixel_aspect; -+ OMX_INIT_STRUCTURE(pixel_aspect); -+ pixel_aspect.nPortIndex = m_omx_decoder.GetOutputPort(); -+ omx_err = m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio, &pixel_aspect); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ if (m_port_settings_changed) - { -- int demuxer_bytes = iSize; -- uint8_t *demuxer_content = pData; -+ m_omx_decoder.EnablePort(m_omx_decoder.GetOutputPort(), true); -+ return true; -+ } -+ -+ // convert in stripes -+ port_def.format.video.nSliceHeight = 16; -+ port_def.format.video.nStride = 0; -+ -+ omx_err = m_omx_decoder.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_decoder.SetParameter result(0x%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ OMX_CALLBACKTYPE callbacks = { NULL, NULL, DecoderFillBufferDoneCallback }; -+ if (!m_omx_egl_render.Initialize("OMX.broadcom.egl_render", OMX_IndexParamVideoInit, &callbacks)) -+ { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.Initialize", CLASSNAME, __func__); -+ return false; -+ } -+ -+ OMX_CONFIG_PORTBOOLEANTYPE discardMode; -+ OMX_INIT_STRUCTURE(discardMode); -+ discardMode.nPortIndex = m_omx_egl_render.GetInputPort(); -+ discardMode.bEnabled = OMX_FALSE; -+ omx_err = m_omx_egl_render.SetParameter(OMX_IndexParamBrcmVideoEGLRenderDiscardMode, &discardMode); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error m_omx_egl_render.SetParameter(OMX_IndexParamBrcmVideoEGLRenderDiscardMode) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ m_omx_egl_render.ResetEos(); -+ -+ CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, -+ port_def.format.video.nFrameWidth, port_def.format.video.nFrameHeight, -+ port_def.format.video.xFramerate / (float)(1<<16), 0,0); -+ -+ m_omx_tunnel.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ -+ omx_err = m_omx_tunnel.Establish(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ // Obtain the information about the output port. -+ OMX_PARAM_PORTDEFINITIONTYPE port_format; -+ OMX_INIT_STRUCTURE(port_format); -+ port_format.nPortIndex = m_omx_egl_render.GetOutputPort(); -+ omx_err = m_omx_egl_render.GetParameter(OMX_IndexParamPortDefinition, &port_format); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s - m_omx_egl_render.GetParameter OMX_IndexParamPortDefinition omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ port_format.nBufferCountActual = m_egl_buffer_count; -+ omx_err = m_omx_egl_render.SetParameter(OMX_IndexParamPortDefinition, &port_format); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s - m_omx_egl_render.SetParameter OMX_IndexParamPortDefinition omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, -+ "%s::%s (1) - oport(%d), nFrameWidth(%u), nFrameHeight(%u), nStride(%x), nBufferCountMin(%u), nBufferCountActual(%u), nBufferSize(%u)", -+ CLASSNAME, __func__, m_omx_egl_render.GetOutputPort(), -+ port_format.format.video.nFrameWidth, port_format.format.video.nFrameHeight,port_format.format.video.nStride, -+ port_format.nBufferCountMin, port_format.nBufferCountActual, port_format.nBufferSize); -+ #endif -+ - -- // we need to queue then de-queue the demux packet, seems silly but -- // omx might not have a omx input buffer avaliable when we are called -- // and we must store the demuxer packet and try again later. -+ omx_err = m_omx_egl_render.EnablePort(m_omx_egl_render.GetOutputPort(), false); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_egl_render.EnablePort omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ if (!AllocOMXOutputBuffers()) -+ { -+ CLog::Log(LOGERROR, "%s::%s - AllocOMXOutputBuffers failed", CLASSNAME, __func__); -+ return false; -+ } -+ -+ omx_err = m_omx_egl_render.WaitForCommand(OMX_CommandPortEnable, m_omx_egl_render.GetOutputPort()); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_egl_render.WaitForCommand(OMX_CommandPortEnable) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ assert(m_omx_output_busy.empty()); -+ assert(m_omx_output_ready.empty()); -+ -+ omx_err = m_omx_egl_render.SetStateForComponent(OMX_StateExecuting); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_egl_render.SetStateForComponent omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ omx_err = PrimeFillBuffers(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_egl_render.PrimeFillBuffers omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ m_port_settings_changed = true; -+ return true; -+} -+ -+ -+int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) -+{ -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s - %-8p %-6d dts:%.3f pts:%.3f demux_queue(%d) dts_queue(%d) ready_queue(%d) busy_queue(%d)", -+ CLASSNAME, __func__, pData, iSize, dts == DVD_NOPTS_VALUE ? 0.0 : dts*1e-6, pts == DVD_NOPTS_VALUE ? 0.0 : pts*1e-6, m_demux_queue.size(), m_dts_queue.size(), m_omx_output_ready.size(), m_omx_output_busy.size()); -+ #endif -+ -+ OMX_ERRORTYPE omx_err; -+ unsigned int demuxer_bytes = 0; -+ uint8_t *demuxer_content = NULL; -+ -+ // we need to queue then de-queue the demux packet, seems silly but -+ // omx might not have a omx input buffer available when we are called -+ // and we must store the demuxer packet and try again later. -+ if (pData && m_demux_queue.empty() && m_omx_decoder.GetInputBufferSpace() >= (unsigned int)iSize) -+ { -+ demuxer_bytes = iSize; -+ demuxer_content = pData; -+ } -+ else if (pData && iSize) -+ { - omx_demux_packet demux_packet; - demux_packet.dts = dts; - demux_packet.pts = pts; -- -- demux_packet.size = demuxer_bytes; -- demux_packet.buff = new OMX_U8[demuxer_bytes]; -- memcpy(demux_packet.buff, demuxer_content, demuxer_bytes); -+ demux_packet.size = iSize; -+ demux_packet.buff = new OMX_U8[iSize]; -+ memcpy(demux_packet.buff, pData, iSize); - m_demux_queue.push(demux_packet); -+ } - -- // we can look at m_omx_input_avaliable.empty without needing to lock/unlock -+ OMX_U8 *buffer_to_free = NULL; -+ while (1) -+ { - // try to send any/all demux packets to omx decoder. -- while (!m_omx_input_avaliable.empty() && !m_demux_queue.empty() ) -+ if (!demuxer_bytes && !m_demux_queue.empty()) - { -- OMX_ERRORTYPE omx_err; -- OMX_BUFFERHEADERTYPE* omx_buffer; -- -- demux_packet = m_demux_queue.front(); -- m_demux_queue.pop(); -- // need to lock here to retreve an input buffer and pop the queue -- pthread_mutex_lock(&m_omx_input_mutex); -- omx_buffer = m_omx_input_avaliable.front(); -- m_omx_input_avaliable.pop(); -- pthread_mutex_unlock(&m_omx_input_mutex); -- -- // delete the previous demuxer buffer -- delete [] omx_buffer->pBuffer; -- // setup a new omx_buffer. -- omx_buffer->nFlags = m_omx_input_eos ? OMX_BUFFERFLAG_EOS : 0; -+ omx_demux_packet &demux_packet = m_demux_queue.front(); -+ if (m_omx_decoder.GetInputBufferSpace() >= (unsigned int)demux_packet.size) -+ { -+ // need to lock here to retrieve an input buffer and pop the queue -+ m_demux_queue.pop(); -+ demuxer_bytes = (unsigned int)demux_packet.size; -+ demuxer_content = demux_packet.buff; -+ buffer_to_free = demux_packet.buff; -+ dts = demux_packet.dts; -+ pts = demux_packet.pts; -+ } -+ } -+ -+ if (demuxer_content) -+ { -+ // 500ms timeout -+ OMX_BUFFERHEADERTYPE *omx_buffer = m_omx_decoder.GetInputBuffer(500); -+ if (omx_buffer == NULL) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_decoder.GetInputBuffer timeout", CLASSNAME, __func__); -+ return VC_ERROR; -+ } -+ #if defined(OMX_DEBUG_VERBOSE) -+ //CLog::Log(LOGDEBUG, "%s::%s - omx_buffer=%p", CLASSNAME, __func__, omx_buffer); -+ #endif -+ omx_buffer->nFlags = 0; - omx_buffer->nOffset = 0; -- omx_buffer->pBuffer = demux_packet.buff; -- omx_buffer->nAllocLen = demux_packet.size; -- omx_buffer->nFilledLen = demux_packet.size; -- omx_buffer->nTimeStamp = (demux_packet.pts == DVD_NOPTS_VALUE) ? 0 : demux_packet.pts * 1000.0; // in microseconds; -+ -+ omx_buffer->nFilledLen = (demuxer_bytes > omx_buffer->nAllocLen) ? omx_buffer->nAllocLen : demuxer_bytes; -+ omx_buffer->nTimeStamp = ToOMXTime((uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts); - omx_buffer->pAppPrivate = omx_buffer; -- omx_buffer->nInputPortIndex = m_omx_input_port; -+ memcpy(omx_buffer->pBuffer, demuxer_content, omx_buffer->nFilledLen); - -- #if defined(OMX_DEBUG_EMPTYBUFFERDONE) -- CLog::Log(LOGDEBUG, -- "%s::%s - feeding decoder, omx_buffer->pBuffer(0x%p), demuxer_bytes(%d)\n", -- CLASSNAME, __func__, omx_buffer->pBuffer, demuxer_bytes); -- #endif -- // Give this omx_buffer to OpenMax to be decoded. -- omx_err = OMX_EmptyThisBuffer(m_omx_decoder, omx_buffer); -- if (omx_err) -+ demuxer_bytes -= omx_buffer->nFilledLen; -+ demuxer_content += omx_buffer->nFilledLen; -+ -+ if (demuxer_bytes == 0) -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; -+ if (pts == DVD_NOPTS_VALUE) -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN; -+ if (m_drop_state) // hijack an omx flag to signal this frame to be dropped - it will be returned with the picture (but otherwise ignored) -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; -+ -+#if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s - %-6d dts:%.3f pts:%.3f flags:%x", -+ CLASSNAME, __func__, omx_buffer->nFilledLen, dts == DVD_NOPTS_VALUE ? 0.0 : dts*1e-6, pts == DVD_NOPTS_VALUE ? 0.0 : pts*1e-6, omx_buffer->nFlags); -+#endif -+ -+ omx_err = m_omx_decoder.EmptyThisBuffer(omx_buffer); -+ if (omx_err != OMX_ErrorNone) - { -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_EmptyThisBuffer() failed with result(0x%x)\n", -- CLASSNAME, __func__, omx_err); -+ CLog::Log(LOGERROR, "%s::%s - OMX_EmptyThisBuffer() failed with result(0x%x)", CLASSNAME, __func__, omx_err); - return VC_ERROR; - } -- // only push if we are successful with feeding OMX_EmptyThisBuffer -- m_dts_queue.push(demux_packet.dts); -- -- // if m_omx_input_avaliable and/or demux_queue are now empty, -- // wait up to 20ms for OpenMax to consume a demux packet -- if (m_omx_input_avaliable.empty() || m_demux_queue.empty()) -- m_input_consumed_event.WaitMSec(1); -+ if (demuxer_bytes == 0) -+ { -+#ifdef DTS_QUEUE -+ // only push if we are successful with feeding OMX_EmptyThisBuffer -+ m_dts_queue.push(dts); -+ assert(m_dts_queue.size() < 32); -+#endif -+ if (buffer_to_free) -+ { -+ delete [] buffer_to_free; -+ buffer_to_free = NULL; -+ demuxer_content = NULL; -+ continue; -+ } -+ } -+ } -+ omx_err = m_omx_decoder.WaitForEvent(OMX_EventPortSettingsChanged, 0); -+ if (omx_err == OMX_ErrorNone) -+ { -+ if (!PortSettingsChanged()) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error PortSettingsChanged omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return VC_ERROR; -+ } -+ } -+ else if (omx_err != OMX_ErrorTimeout) -+ { -+ CLog::Log(LOGERROR, "%s::%s - video not supported omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return VC_ERROR; - } -- if (m_omx_input_avaliable.empty() && !m_demux_queue.empty()) -- m_input_consumed_event.WaitMSec(1); -- -- #if defined(OMX_DEBUG_VERBOSE) -- if (m_omx_input_avaliable.empty()) -- CLog::Log(LOGDEBUG, -- "%s::%s - buffering demux, m_demux_queue_size(%d), demuxer_bytes(%d)\n", -- CLASSNAME, __func__, m_demux_queue.size(), demuxer_bytes); -- #endif -+ omx_err = m_omx_decoder.WaitForEvent(OMX_EventParamOrConfigChanged, 0); -+ if (omx_err == OMX_ErrorNone) -+ { -+ if (!PortSettingsChanged()) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error PortSettingsChanged (EventParamOrConfigChanged) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return VC_ERROR; -+ } -+ } -+ else if (omx_err == OMX_ErrorStreamCorrupt) -+ { -+ CLog::Log(LOGERROR, "%s::%s - video not supported 2 omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return VC_ERROR; -+ } -+ if (!demuxer_bytes) -+ break; - } - -+#if defined(OMX_DEBUG_VERBOSE) -+ if (!m_omx_decoder.GetInputBufferSpace()) -+ CLog::Log(LOGDEBUG, -+ "%s::%s - buffering demux, m_demux_queue_size(%d), demuxer_bytes(%d) m_dts_queue.size(%d)", -+ CLASSNAME, __func__, m_demux_queue.size(), demuxer_bytes, m_dts_queue.size()); -+ #endif -+ - if (m_omx_output_ready.empty()) -+ { -+ //CLog::Log(LOGDEBUG, "%s::%s - empty: buffers:%d", CLASSNAME, __func__, m_omx_output_ready.size()); - return VC_BUFFER; -+ } - -- return VC_PICTURE | VC_BUFFER; -+ //CLog::Log(LOGDEBUG, "%s::%s - full: buffers:%d", CLASSNAME, __func__, m_omx_output_ready.size()); -+ return VC_PICTURE; - } - - void COpenMaxVideo::Reset(void) - { - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif --/* -- // only reset OpenMax decoder if it's running -- if (m_omx_decoder_state == OMX_StateExecuting) -+ m_omx_egl_render.FlushAll(); -+ m_omx_decoder.FlushAll(); -+ // blow all ready video frames -+ while (!m_omx_output_ready.empty()) - { -- OMX_ERRORTYPE omx_err; -- -- omx_err = StopDecoder(); -- // Alloc OpenMax input buffers. -- omx_err = AllocOMXInputBuffers(); -- // Alloc OpenMax output buffers. -- omx_err = AllocOMXOutputBuffers(); -- -- omx_err = StartDecoder(); -+ pthread_mutex_lock(&m_omx_output_mutex); -+ COpenMaxVideoBuffer *pic = m_omx_output_ready.front(); -+ m_omx_output_ready.pop(); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ // return the omx buffer back to OpenMax to fill. -+ ReturnOpenMaxBuffer(pic); - } --*/ -- ::Sleep(100); -+#ifdef DTS_QUEUE -+ while (!m_dts_queue.empty()) -+ m_dts_queue.pop(); -+#endif -+ -+ while (!m_demux_queue.empty()) -+ m_demux_queue.pop(); - } - --bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) -+ -+OMX_ERRORTYPE COpenMaxVideo::ReturnOpenMaxBuffer(COpenMaxVideoBuffer *buffer) - { -- while (m_omx_output_busy.size() > 1) -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; -+#if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s %p (%d)", CLASSNAME, __func__, buffer, m_omx_output_busy.size()); -+#endif -+ bool done = buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_EOS; -+ if (!done) - { -- // fetch a output buffer and pop it off the busy list -- pthread_mutex_lock(&m_omx_output_mutex); -- OpenMaxVideoBuffer *buffer = m_omx_output_busy.front(); -- m_omx_output_busy.pop(); -- pthread_mutex_unlock(&m_omx_output_mutex); -+ // return the omx buffer back to OpenMax to fill. -+ buffer->omx_buffer->nFlags = 0; -+ buffer->omx_buffer->nFilledLen = 0; - -- bool done = buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_EOS; -- if (!done) -- { -- // return the omx buffer back to OpenMax to fill. -- OMX_ERRORTYPE omx_err = OMX_FillThisBuffer(m_omx_decoder, buffer->omx_buffer); -- if (omx_err) -- CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer, omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- } -+ assert(buffer->omx_buffer->nOutputPortIndex == m_omx_egl_render.GetOutputPort()); -+#if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s FillThisBuffer(%p) %p->%ld", CLASSNAME, __func__, buffer, buffer->omx_buffer, buffer->m_refs); -+#endif -+ OMX_ERRORTYPE omx_err = m_omx_egl_render.FillThisBuffer(buffer->omx_buffer); -+ -+ if (omx_err) -+ CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer, omx_err(0x%x)", CLASSNAME, __func__, omx_err); - } -+ return omx_err; -+} -+ -+void COpenMaxVideo::ReleaseOpenMaxBuffer(COpenMaxVideoBuffer *buffer) -+{ -+ // remove from busy list -+ pthread_mutex_lock(&m_omx_output_mutex); -+ m_omx_output_busy.erase(std::remove(m_omx_output_busy.begin(), m_omx_output_busy.end(), buffer), m_omx_output_busy.end()); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ ReturnOpenMaxBuffer(buffer); -+} -+ -+bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) -+{ -+ //CLog::Log(LOGDEBUG, "%s::%s - m_omx_output_busy.size()=%d m_omx_output_ready.size()=%d", CLASSNAME, __func__, m_omx_output_busy.size(), m_omx_output_ready.size()); -+ //CLog::Log(LOGDEBUG, "%s::%s - full: buffers:%d", CLASSNAME, __func__, m_omx_output_ready.size()); - - if (!m_omx_output_ready.empty()) - { -- OpenMaxVideoBuffer *buffer; -+ COpenMaxVideoBuffer *buffer; - // fetch a output buffer and pop it off the ready list - pthread_mutex_lock(&m_omx_output_mutex); - buffer = m_omx_output_ready.front(); - m_omx_output_ready.pop(); -- m_omx_output_busy.push(buffer); -+ m_omx_output_busy.push_back(buffer); - pthread_mutex_unlock(&m_omx_output_mutex); - -+ memset(pDvdVideoPicture, 0, sizeof *pDvdVideoPicture); - pDvdVideoPicture->dts = DVD_NOPTS_VALUE; - pDvdVideoPicture->pts = DVD_NOPTS_VALUE; - pDvdVideoPicture->format = RENDER_FMT_OMXEGL; -- pDvdVideoPicture->openMax = this; - pDvdVideoPicture->openMaxBuffer = buffer; -- -+ pDvdVideoPicture->color_range = 0; -+ pDvdVideoPicture->color_matrix = 4; -+ pDvdVideoPicture->iWidth = m_decoded_width; -+ pDvdVideoPicture->iHeight = m_decoded_height; -+ pDvdVideoPicture->iDisplayWidth = m_decoded_width; -+ pDvdVideoPicture->iDisplayHeight = m_decoded_height; -+ -+#ifdef DTS_QUEUE - if (!m_dts_queue.empty()) - { - pDvdVideoPicture->dts = m_dts_queue.front(); - m_dts_queue.pop(); - } -+#endif - // nTimeStamp is in microseconds -- pDvdVideoPicture->pts = (buffer->omx_buffer->nTimeStamp == 0) ? DVD_NOPTS_VALUE : (double)buffer->omx_buffer->nTimeStamp / 1000.0; -+ double ts = FromOMXTime(buffer->omx_buffer->nTimeStamp); -+ pDvdVideoPicture->pts = (ts == 0) ? DVD_NOPTS_VALUE : ts; -+ pDvdVideoPicture->openMaxBuffer->Acquire(); -+ pDvdVideoPicture->iFlags = DVP_FLAG_ALLOCATED; -+ if (buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_DATACORRUPT) -+ pDvdVideoPicture->iFlags |= DVP_FLAG_DROPPED; -+#if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGINFO, "%s::%s dts:%.3f pts:%.3f flags:%x:%x openMaxBuffer:%p omx_buffer:%p egl_image:%p texture_id:%x", CLASSNAME, __func__, -+ pDvdVideoPicture->dts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->dts*1e-6, pDvdVideoPicture->pts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->pts*1e-6, -+ pDvdVideoPicture->iFlags, buffer->omx_buffer->nFlags, pDvdVideoPicture->openMaxBuffer, pDvdVideoPicture->openMaxBuffer->omx_buffer, pDvdVideoPicture->openMaxBuffer->egl_image, pDvdVideoPicture->openMaxBuffer->texture_id); -+#endif - } -- #if defined(OMX_DEBUG_VERBOSE) - else - { -- CLog::Log(LOGDEBUG, "%s::%s - called but m_omx_output_ready is empty\n", -- CLASSNAME, __func__); -+ CLog::Log(LOGERROR, "%s::%s - called but m_omx_output_ready is empty", CLASSNAME, __func__); -+ return false; - } -- #endif -- -- pDvdVideoPicture->iFlags = DVP_FLAG_ALLOCATED; -- pDvdVideoPicture->iFlags |= m_drop_state ? DVP_FLAG_DROPPED : 0; -- - return true; - } - -- --// DecoderEmptyBufferDone -- OpenMax input buffer has been emptied --OMX_ERRORTYPE COpenMaxVideo::DecoderEmptyBufferDone( -- OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, -- OMX_BUFFERHEADERTYPE* pBuffer) -+bool COpenMaxVideo::ClearPicture(DVDVideoPicture* pDvdVideoPicture) - { -- COpenMaxVideo *ctx = static_cast<COpenMaxVideo*>(pAppData); --/* -- #if defined(OMX_DEBUG_EMPTYBUFFERDONE) -- CLog::Log(LOGDEBUG, "%s::%s - buffer_size(%lu), timestamp(%f)\n", -- CLASSNAME, __func__, pBuffer->nFilledLen, (double)pBuffer->nTimeStamp / 1000.0); -- #endif --*/ -- // queue free input buffer to avaliable list. -- pthread_mutex_lock(&ctx->m_omx_input_mutex); -- ctx->m_omx_input_avaliable.push(pBuffer); -- ctx->m_input_consumed_event.Set(); -- pthread_mutex_unlock(&ctx->m_omx_input_mutex); -- -- return OMX_ErrorNone; -+#if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s - %p", CLASSNAME, __func__, pDvdVideoPicture->openMaxBuffer); -+#endif -+ if (pDvdVideoPicture->format == RENDER_FMT_OMXEGL) -+ pDvdVideoPicture->openMaxBuffer->Release(); -+ memset(pDvdVideoPicture, 0, sizeof *pDvdVideoPicture); -+ return true; - } - --// DecoderFillBufferDone -- OpenMax output buffer has been filled -+ // DecoderFillBufferDone -- OpenMax output buffer has been filled - OMX_ERRORTYPE COpenMaxVideo::DecoderFillBufferDone( - OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, - OMX_BUFFERHEADERTYPE* pBuffer) - { -- COpenMaxVideo *ctx = static_cast<COpenMaxVideo*>(pAppData); -- OpenMaxVideoBuffer *buffer = (OpenMaxVideoBuffer*)pBuffer->pAppPrivate; -+ COpenMaxVideoBuffer *buffer = (COpenMaxVideoBuffer*)pBuffer->pAppPrivate; - -- #if defined(OMX_DEBUG_FILLBUFFERDONE) -- CLog::Log(LOGDEBUG, "%s::%s - buffer_size(%lu), timestamp(%f)\n", -- CLASSNAME, __func__, pBuffer->nFilledLen, (double)pBuffer->nTimeStamp / 1000.0); -+ #if defined(OMX_DEBUG_VERBOSE) -+ CLog::Log(LOGDEBUG, "%s::%s - %p (%p,%p) buffer_size(%u), pts:%.3f", -+ CLASSNAME, __func__, buffer, pBuffer, buffer->omx_buffer, pBuffer->nFilledLen, (double)FromOMXTime(buffer->omx_buffer->nTimeStamp)*1e-6); - #endif - -- if (!ctx->m_portChanging) -- { -- // queue output omx buffer to ready list. -- pthread_mutex_lock(&ctx->m_omx_output_mutex); -- ctx->m_omx_output_ready.push(buffer); -- pthread_mutex_unlock(&ctx->m_omx_output_mutex); -- } -+ // queue output omx buffer to ready list. -+ pthread_mutex_lock(&m_omx_output_mutex); -+ m_omx_output_ready.push(buffer); -+ pthread_mutex_unlock(&m_omx_output_mutex); - - return OMX_ErrorNone; - } - --void COpenMaxVideo::QueryCodec(void) --{ -- OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- OMX_VIDEO_PARAM_PROFILELEVELTYPE port_param; -- OMX_INIT_STRUCTURE(port_param); -- -- port_param.nPortIndex = m_omx_input_port; -- -- for (port_param.nProfileIndex = 0;; port_param.nProfileIndex++) -- { -- omx_err = OMX_GetParameter(m_omx_decoder, -- OMX_IndexParamVideoProfileLevelQuerySupported, &port_param); -- if (omx_err) -- break; -- -- omx_codec_capability omx_capability; -- omx_capability.level = port_param.eLevel; -- omx_capability.profile = port_param.eProfile; -- m_omx_decoder_capabilities.push_back(omx_capability); -- } --} -- - OMX_ERRORTYPE COpenMaxVideo::PrimeFillBuffers(void) - { - OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- OpenMaxVideoBuffer *buffer; -+ COpenMaxVideoBuffer *buffer; - - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif - // tell OpenMax to start filling output buffers - for (size_t i = 0; i < m_omx_output_buffers.size(); i++) - { - buffer = m_omx_output_buffers[i]; - // always set the port index. -- buffer->omx_buffer->nOutputPortIndex = m_omx_output_port; -- // Need to clear the EOS flag. -- buffer->omx_buffer->nFlags &= ~OMX_BUFFERFLAG_EOS; -+ buffer->omx_buffer->nOutputPortIndex = m_omx_egl_render.GetOutputPort(); - buffer->omx_buffer->pAppPrivate = buffer; -- -- omx_err = OMX_FillThisBuffer(m_omx_decoder, buffer->omx_buffer); -- if (omx_err) -- CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -+ omx_err = ReturnOpenMaxBuffer(buffer); - } -- - return omx_err; - } - --OMX_ERRORTYPE COpenMaxVideo::AllocOMXInputBuffers(void) --{ -- OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- -- // Obtain the information about the decoder input port. -- OMX_PARAM_PORTDEFINITIONTYPE port_format; -- OMX_INIT_STRUCTURE(port_format); -- port_format.nPortIndex = m_omx_input_port; -- OMX_GetParameter(m_omx_decoder, OMX_IndexParamPortDefinition, &port_format); -- -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, -- "%s::%s - iport(%d), nBufferCountMin(%lu), nBufferSize(%lu)\n", -- CLASSNAME, __func__, m_omx_input_port, port_format.nBufferCountMin, port_format.nBufferSize); -- #endif -- for (size_t i = 0; i < port_format.nBufferCountMin; i++) -- { -- OMX_BUFFERHEADERTYPE *buffer = NULL; -- // use an external buffer that's sized according to actual demux -- // packet size, start at internal's buffer size, will get deleted when -- // we start pulling demuxer packets and using demux packet sized buffers. -- OMX_U8* data = new OMX_U8[port_format.nBufferSize]; -- omx_err = OMX_UseBuffer(m_omx_decoder, &buffer, m_omx_input_port, NULL, port_format.nBufferSize, data); -- if (omx_err) -- { -- CLog::Log(LOGERROR, "%s::%s - OMX_UseBuffer failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- return(omx_err); -- } -- m_omx_input_buffers.push_back(buffer); -- // don't have to lock/unlock here, we are not decoding -- m_omx_input_avaliable.push(buffer); -- } -- m_omx_input_eos = false; -- -- return(omx_err); --} --OMX_ERRORTYPE COpenMaxVideo::FreeOMXInputBuffers(bool wait) -+OMX_ERRORTYPE COpenMaxVideo::FreeOMXInputBuffers(void) - { - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - -- /* -- omx_err = OMX_SendCommand(m_omx_decoder, OMX_CommandFlush, m_omx_input_port, 0); -- if (omx_err) -- CLog::Log(LOGERROR, "%s::%s - OMX_CommandFlush failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- else if (wait) -- sem_wait(m_omx_flush_input); -- */ -- -- // free omx input port buffers. -- for (size_t i = 0; i < m_omx_input_buffers.size(); i++) -- { -- // using external buffers (OMX_UseBuffer), free our external buffers -- // before calling OMX_FreeBuffer which frees the omx buffer. -- delete [] m_omx_input_buffers[i]->pBuffer; -- m_omx_input_buffers[i]->pBuffer = NULL; -- omx_err = OMX_FreeBuffer(m_omx_decoder, m_omx_input_port, m_omx_input_buffers[i]); -- } -- m_omx_input_buffers.clear(); -- - // empty input buffer queue. not decoding so don't need lock/unlock. -- while (!m_omx_input_avaliable.empty()) -- m_omx_input_avaliable.pop(); - while (!m_demux_queue.empty()) - m_demux_queue.pop(); -+#ifdef DTS_QUEUE - while (!m_dts_queue.empty()) - m_dts_queue.pop(); -- -+#endif - return(omx_err); - } - --void COpenMaxVideo::CallbackAllocOMXEGLTextures(void *userdata) -+bool COpenMaxVideo::CallbackAllocOMXEGLTextures(void *userdata) - { - COpenMaxVideo *omx = static_cast<COpenMaxVideo*>(userdata); -- omx->AllocOMXOutputEGLTextures(); -+ return omx->AllocOMXOutputEGLTextures() == OMX_ErrorNone; - } - --void COpenMaxVideo::CallbackFreeOMXEGLTextures(void *userdata) -+bool COpenMaxVideo::CallbackFreeOMXEGLTextures(void *userdata) - { - COpenMaxVideo *omx = static_cast<COpenMaxVideo*>(userdata); -- omx->FreeOMXOutputEGLTextures(true); -+ return omx->FreeOMXOutputEGLTextures() == OMX_ErrorNone; - } - --OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputBuffers(void) -+bool COpenMaxVideo::AllocOMXOutputBuffers(void) - { -- OMX_ERRORTYPE omx_err; -- -- if ( g_application.IsCurrentThread() ) -- { -- omx_err = AllocOMXOutputEGLTextures(); -- } -- else -- { -- ThreadMessageCallback callbackData; -- callbackData.callback = &CallbackAllocOMXEGLTextures; -- callbackData.userptr = (void *)this; -- -- ThreadMessage tMsg; -- tMsg.dwMessage = TMSG_CALLBACK; -- tMsg.lpVoid = (void*)&callbackData; -- -- g_application.getApplicationMessenger().SendMessage(tMsg, true); -- -- omx_err = OMX_ErrorNone; -- } -- -- return omx_err; -+ return g_OMXImage.SendMessage(CallbackAllocOMXEGLTextures, (void *)this); - } - --OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputBuffers(bool wait) -+bool COpenMaxVideo::FreeOMXOutputBuffers(void) - { -- OMX_ERRORTYPE omx_err = FreeOMXOutputEGLTextures(wait); -- -- return omx_err; -+ return g_OMXImage.SendMessage(CallbackFreeOMXEGLTextures, (void *)this); - } - - OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - { -- OMX_ERRORTYPE omx_err; -- -- if (!eglCreateImageKHR) -- { -- GETEXTENSION(PFNEGLCREATEIMAGEKHRPROC, eglCreateImageKHR); -- } -- -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; - EGLint attrib = EGL_NONE; -- OpenMaxVideoBuffer *egl_buffer; -- -- // Obtain the information about the output port. -- OMX_PARAM_PORTDEFINITIONTYPE port_format; -- OMX_INIT_STRUCTURE(port_format); -- port_format.nPortIndex = m_omx_output_port; -- omx_err = OMX_GetParameter(m_omx_decoder, OMX_IndexParamPortDefinition, &port_format); -- -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, -- "%s::%s (1) - oport(%d), nFrameWidth(%lu), nFrameHeight(%lu), nStride(%lx), nBufferCountMin(%lu), nBufferSize(%lu)\n", -- CLASSNAME, __func__, m_omx_output_port, -- port_format.format.video.nFrameWidth, port_format.format.video.nFrameHeight,port_format.format.video.nStride, -- port_format.nBufferCountMin, port_format.nBufferSize); -- #endif -+ COpenMaxVideoBuffer *egl_buffer; - - glActiveTexture(GL_TEXTURE0); - -- for (size_t i = 0; i < port_format.nBufferCountMin; i++) -+ for (size_t i = 0; i < m_egl_buffer_count; i++) - { -- egl_buffer = new OpenMaxVideoBuffer; -- memset(egl_buffer, 0, sizeof(*egl_buffer)); -+ egl_buffer = new COpenMaxVideoBuffer(this); - egl_buffer->width = m_decoded_width; - egl_buffer->height = m_decoded_height; - - glGenTextures(1, &egl_buffer->texture_id); - glBindTexture(GL_TEXTURE_2D, egl_buffer->texture_id); - -+ // no mipmaps -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -+ - // create space for buffer with a texture - glTexImage2D( - GL_TEXTURE_2D, // target -@@ -710,8 +928,6 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - GL_RGBA, // format - GL_UNSIGNED_BYTE, // type - NULL); // pixels -- will be provided later -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - // create EGLImage from texture - egl_buffer->egl_image = eglCreateImageKHR( -@@ -722,49 +938,40 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - &attrib); - if (!egl_buffer->egl_image) - { -- CLog::Log(LOGERROR, "%s::%s - ERROR creating EglImage\n", CLASSNAME, __func__); -+ CLog::Log(LOGERROR, "%s::%s - ERROR creating EglImage", CLASSNAME, __func__); - return(OMX_ErrorUndefined); - } - egl_buffer->index = i; - - // tell decoder output port that it will be using EGLImage -- omx_err = OMX_UseEGLImage( -- m_omx_decoder, &egl_buffer->omx_buffer, m_omx_output_port, egl_buffer, egl_buffer->egl_image); -+ omx_err = m_omx_egl_render.UseEGLImage( -+ &egl_buffer->omx_buffer, m_omx_egl_render.GetOutputPort(), egl_buffer, egl_buffer->egl_image); - if (omx_err) - { -- CLog::Log(LOGERROR, "%s::%s - OMX_UseEGLImage failed with omx_err(0x%x)\n", -+ CLog::Log(LOGERROR, "%s::%s - OMX_UseEGLImage failed with omx_err(0x%x)", - CLASSNAME, __func__, omx_err); - return(omx_err); - } - m_omx_output_buffers.push_back(egl_buffer); - -- CLog::Log(LOGDEBUG, "%s::%s - Texture %p Width %d Height %d\n", -+ CLog::Log(LOGDEBUG, "%s::%s - Texture %p Width %d Height %d", - CLASSNAME, __func__, egl_buffer->egl_image, egl_buffer->width, egl_buffer->height); - } -- m_omx_output_eos = false; -- while (!m_omx_output_busy.empty()) -- m_omx_output_busy.pop(); -- while (!m_omx_output_ready.empty()) -- m_omx_output_ready.pop(); -- - return omx_err; - } - --OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputEGLTextures(bool wait) -+OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputEGLTextures(void) - { - OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- OpenMaxVideoBuffer *egl_buffer; -- -- if (!eglDestroyImageKHR) -- { -- GETEXTENSION(PFNEGLDESTROYIMAGEKHRPROC, eglDestroyImageKHR); -- } -+ COpenMaxVideoBuffer *egl_buffer; - - for (size_t i = 0; i < m_omx_output_buffers.size(); i++) - { - egl_buffer = m_omx_output_buffers[i]; - // tell decoder output port to stop using the EGLImage -- omx_err = OMX_FreeBuffer(m_omx_decoder, m_omx_output_port, egl_buffer->omx_buffer); -+ omx_err = m_omx_egl_render.FreeOutputBuffer(egl_buffer->omx_buffer); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s m_omx_egl_render.FreeOutputBuffer(%p) omx_err(0x%08x)", CLASSNAME, __func__, egl_buffer->omx_buffer, omx_err); - // destroy egl_image - eglDestroyImageKHR(m_egl_display, egl_buffer->egl_image); - // free texture -@@ -777,274 +984,45 @@ OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputEGLTextures(bool wait) - } - - --//////////////////////////////////////////////////////////////////////////////////////////// --// DecoderEventHandler -- OMX event callback --OMX_ERRORTYPE COpenMaxVideo::DecoderEventHandler( -- OMX_HANDLETYPE hComponent, -- OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, -- OMX_U32 nData1, -- OMX_U32 nData2, -- OMX_PTR pEventData) --{ -- OMX_ERRORTYPE omx_err; -- COpenMaxVideo *ctx = static_cast<COpenMaxVideo*>(pAppData); -- --/* -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, -- "COpenMax::%s - hComponent(0x%p), eEvent(0x%x), nData1(0x%lx), nData2(0x%lx), pEventData(0x%p)\n", -- __func__, hComponent, eEvent, nData1, nData2, pEventData); -- #endif --*/ -- -- switch (eEvent) -- { -- case OMX_EventCmdComplete: -- switch(nData1) -- { -- case OMX_CommandStateSet: -- ctx->m_omx_decoder_state = (int)nData2; -- switch (ctx->m_omx_decoder_state) -- { -- case OMX_StateInvalid: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StateInvalid\n", CLASSNAME, __func__); -- break; -- case OMX_StateLoaded: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StateLoaded\n", CLASSNAME, __func__); -- break; -- case OMX_StateIdle: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StateIdle\n", CLASSNAME, __func__); -- break; -- case OMX_StateExecuting: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StateExecuting\n", CLASSNAME, __func__); -- break; -- case OMX_StatePause: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StatePause\n", CLASSNAME, __func__); -- break; -- case OMX_StateWaitForResources: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_StateWaitForResources\n", CLASSNAME, __func__); -- break; -- default: -- CLog::Log(LOGDEBUG, -- "%s::%s - Unknown OMX_Statexxxxx, state(%d)\n", -- CLASSNAME, __func__, ctx->m_omx_decoder_state); -- break; -- } -- sem_post(ctx->m_omx_decoder_state_change); -- break; -- case OMX_CommandFlush: -- /* -- if (OMX_ALL == (int)nData2) -- { -- sem_post(ctx->m_omx_flush_input); -- sem_post(ctx->m_omx_flush_output); -- CLog::Log(LOGDEBUG, "COpenMax::%s - OMX_CommandFlush input/output\n",__func__); -- } -- else if (ctx->m_omx_input_port == (int)nData2) -- { -- sem_post(ctx->m_omx_flush_input); -- CLog::Log(LOGDEBUG, "COpenMax::%s - OMX_CommandFlush input\n",__func__); -- } -- else if (ctx->m_omx_output_port == (int)nData2) -- { -- sem_post(ctx->m_omx_flush_output); -- CLog::Log(LOGDEBUG, "COpenMax::%s - OMX_CommandFlush ouput\n",__func__); -- } -- else -- */ -- { -- #if defined(OMX_DEBUG_EVENTHANDLER) -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_CommandFlush, nData2(0x%lx)\n", -- CLASSNAME, __func__, nData2); -- #endif -- } -- break; -- case OMX_CommandPortDisable: -- #if defined(OMX_DEBUG_EVENTHANDLER) -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_CommandPortDisable, nData1(0x%lx), nData2(0x%lx)\n", -- CLASSNAME, __func__, nData1, nData2); -- #endif -- if (ctx->m_omx_output_port == (int)nData2) -- { -- // Got OMX_CommandPortDisable event, alloc new buffers for the output port. -- ctx->AllocOMXOutputBuffers(); -- omx_err = OMX_SendCommand(ctx->m_omx_decoder, OMX_CommandPortEnable, ctx->m_omx_output_port, NULL); -- } -- break; -- case OMX_CommandPortEnable: -- #if defined(OMX_DEBUG_EVENTHANDLER) -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_CommandPortEnable, nData1(0x%lx), nData2(0x%lx)\n", -- CLASSNAME, __func__, nData1, nData2); -- #endif -- if (ctx->m_omx_output_port == (int)nData2) -- { -- // Got OMX_CommandPortEnable event. -- // OMX_CommandPortDisable will have re-alloced new ones so re-prime -- ctx->PrimeFillBuffers(); -- } -- ctx->m_portChanging = false; -- break; -- #if defined(OMX_DEBUG_EVENTHANDLER) -- case OMX_CommandMarkBuffer: -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_CommandMarkBuffer, nData1(0x%lx), nData2(0x%lx)\n", -- CLASSNAME, __func__, nData1, nData2); -- break; -- #endif -- } -- break; -- case OMX_EventBufferFlag: -- if (ctx->m_omx_decoder == hComponent && (nData2 & OMX_BUFFERFLAG_EOS)) { -- #if defined(OMX_DEBUG_EVENTHANDLER) -- if(ctx->m_omx_input_port == (int)nData1) -- CLog::Log(LOGDEBUG, "%s::%s - OMX_EventBufferFlag(input)\n", -- CLASSNAME, __func__); -- #endif -- if(ctx->m_omx_output_port == (int)nData1) -- { -- ctx->m_videoplayback_done = true; -- #if defined(OMX_DEBUG_EVENTHANDLER) -- CLog::Log(LOGDEBUG, "%s::%s - OMX_EventBufferFlag(output)\n", -- CLASSNAME, __func__); -- #endif -- } -- } -- break; -- case OMX_EventPortSettingsChanged: -- #if defined(OMX_DEBUG_EVENTHANDLER) -- CLog::Log(LOGDEBUG, -- "%s::%s - OMX_EventPortSettingsChanged(output)\n", CLASSNAME, __func__); -- #endif -- // not sure nData2 is the input/output ports in this call, docs don't say -- if (ctx->m_omx_output_port == (int)nData2) -- { -- // free the current OpenMax output buffers, you must do this before sending -- // OMX_CommandPortDisable to component as it expects output buffers -- // to be freed before it will issue a OMX_CommandPortDisable event. -- ctx->m_portChanging = true; -- OMX_SendCommand(ctx->m_omx_decoder, OMX_CommandPortDisable, ctx->m_omx_output_port, NULL); -- omx_err = ctx->FreeOMXOutputBuffers(false); -- } -- break; -- #if defined(OMX_DEBUG_EVENTHANDLER) -- case OMX_EventMark: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_EventMark\n", CLASSNAME, __func__); -- break; -- case OMX_EventResourcesAcquired: -- CLog::Log(LOGDEBUG, "%s::%s - OMX_EventResourcesAcquired\n", CLASSNAME, __func__); -- break; -- #endif -- case OMX_EventError: -- switch((OMX_S32)nData1) -- { -- case OMX_ErrorInsufficientResources: -- CLog::Log(LOGERROR, "%s::%s - OMX_EventError, insufficient resources\n", -- CLASSNAME, __func__); -- // we are so frack'ed -- //exit(0); -- break; -- case OMX_ErrorFormatNotDetected: -- CLog::Log(LOGERROR, "%s::%s - OMX_EventError, cannot parse input stream\n", -- CLASSNAME, __func__); -- break; -- case OMX_ErrorPortUnpopulated: -- // silently ignore these. We can get them when setting OMX_CommandPortDisable -- // on the output port and the component flushes the output buffers. -- break; -- case OMX_ErrorStreamCorrupt: -- CLog::Log(LOGERROR, "%s::%s - OMX_EventError, Bitstream corrupt\n", -- CLASSNAME, __func__); -- ctx->m_videoplayback_done = true; -- break; -- default: -- CLog::Log(LOGERROR, "%s::%s - OMX_EventError detected, nData1(0x%lx), nData2(0x%lx)\n", -- CLASSNAME, __func__, nData1, nData2); -- break; -- } -- // do this so we don't hang on errors -- /* -- sem_post(ctx->m_omx_flush_input); -- sem_post(ctx->m_omx_flush_output); -- */ -- sem_post(ctx->m_omx_decoder_state_change); -- break; -- default: -- CLog::Log(LOGWARNING, -- "%s::%s - Unknown eEvent(0x%x), nData1(0x%lx), nData2(0x%lx)\n", -- CLASSNAME, __func__, eEvent, nData1, nData2); -- break; -- } -- -- return OMX_ErrorNone; --} -- --// StartPlayback -- Kick off video playback. --OMX_ERRORTYPE COpenMaxVideo::StartDecoder(void) --{ -- OMX_ERRORTYPE omx_err; -- -- #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -- #endif -- -- // transition decoder component to IDLE state -- omx_err = SetStateForComponent(OMX_StateIdle); -- if (omx_err) -- { -- CLog::Log(LOGERROR, "%s::%s - setting OMX_StateIdle failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- return omx_err; -- } -- -- // transition decoder component to executing state -- omx_err = SetStateForComponent(OMX_StateExecuting); -- if (omx_err) -- { -- CLog::Log(LOGERROR, "%s::%s - setting OMX_StateExecuting failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- return omx_err; -- } -- -- //prime the omx output buffers. -- PrimeFillBuffers(); -- -- return omx_err; --} -- - // StopPlayback -- Stop video playback - OMX_ERRORTYPE COpenMaxVideo::StopDecoder(void) - { -- OMX_ERRORTYPE omx_err; -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; - - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif -+ - // transition decoder component from executing to idle -- omx_err = SetStateForComponent(OMX_StateIdle); -- if (omx_err) -+ if (m_omx_decoder.IsInitialized()) - { -- CLog::Log(LOGERROR, "%s::%s - setting OMX_StateIdle failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -- return omx_err; -+ omx_err = m_omx_decoder.SetStateForComponent(OMX_StateIdle); -+ if (omx_err) -+ CLog::Log(LOGERROR, "%s::%s - setting OMX_StateIdle failed with omx_err(0x%x)", -+ CLASSNAME, __func__, omx_err); - } - - // we can free our allocated port buffers in OMX_StateIdle state. - // free OpenMax input buffers. -- FreeOMXInputBuffers(true); -- // free OpenMax output buffers. -- FreeOMXOutputBuffers(true); -+ FreeOMXInputBuffers(); -+ -+ if (m_omx_egl_render.IsInitialized()) -+ { -+ omx_err = m_omx_egl_render.SetStateForComponent(OMX_StateIdle); -+ if (omx_err) -+ CLog::Log(LOGERROR, "%s::%s - setting egl OMX_StateIdle failed with omx_err(0x%x)", -+ CLASSNAME, __func__, omx_err); -+ // free OpenMax output buffers. -+ omx_err = m_omx_egl_render.DisablePort(m_omx_egl_render.GetOutputPort(), false); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s m_omx_egl_render.DisablePort(%d) omx_err(0x%08x)", CLASSNAME, __func__, m_omx_egl_render.GetOutputPort(), omx_err); - -- // transition decoder component from idle to loaded -- omx_err = SetStateForComponent(OMX_StateLoaded); -- if (omx_err) -- CLog::Log(LOGERROR, -- "%s::%s - setting OMX_StateLoaded failed with omx_err(0x%x)\n", -- CLASSNAME, __func__, omx_err); -+ FreeOMXOutputBuffers(); - -+ omx_err = m_omx_egl_render.WaitForCommand(OMX_CommandPortDisable, m_omx_egl_render.GetOutputPort()); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s WaitForCommand:OMX_CommandPortDisable omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ } - return omx_err; - } - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index e06c41d..9079c13 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -21,12 +21,35 @@ - - #if defined(HAVE_LIBOPENMAX) - --#include "OpenMax.h" -+#include "system_gl.h" - #include <EGL/egl.h> - #include <EGL/eglext.h> - -+#include "linux/OMXCore.h" -+#include "linux/OMXClock.h" -+ -+#include "cores/dvdplayer/DVDStreamInfo.h" -+#include "DVDVideoCodec.h" -+#include "threads/Event.h" -+ -+#include <queue> -+#include <semaphore.h> -+ -+typedef struct omx_demux_packet { -+ OMX_U8 *buff; -+ int size; -+ double dts; -+ double pts; -+} omx_demux_packet; -+ -+class COpenMaxVideo; - // an omx egl video frame --typedef struct OpenMaxVideoBuffer { -+class COpenMaxVideoBuffer -+{ -+public: -+ COpenMaxVideoBuffer(COpenMaxVideo *omv); -+ virtual ~COpenMaxVideoBuffer(); -+ - OMX_BUFFERHEADERTYPE *omx_buffer; - int width; - int height; -@@ -35,79 +58,86 @@ typedef struct OpenMaxVideoBuffer { - // used for egl based rendering if active - EGLImageKHR egl_image; - GLuint texture_id; --} OpenMaxVideoBuffer; -+ // reference counting -+ COpenMaxVideoBuffer* Acquire(); -+ long Release(); -+ void Sync(); -+ -+ COpenMaxVideo *m_omv; -+ long m_refs; -+private: -+}; - --class COpenMaxVideo : public COpenMax -+class COpenMaxVideo - { - public: - COpenMaxVideo(); - virtual ~COpenMaxVideo(); - - // Required overrides -- bool Open(CDVDStreamInfo &hints); -- void Close(void); -- int Decode(uint8_t *pData, int iSize, double dts, double pts); -- void Reset(void); -- bool GetPicture(DVDVideoPicture *pDvdVideoPicture); -- void SetDropState(bool bDrop); -+ virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options); -+ virtual void Dispose(void); -+ virtual int Decode(uint8_t *pData, int iSize, double dts, double pts); -+ virtual void Reset(void); -+ virtual bool GetPicture(DVDVideoPicture *pDvdVideoPicture); -+ virtual bool ClearPicture(DVDVideoPicture* pDvdVideoPicture); -+ virtual unsigned GetAllowedReferences() { return 2; } -+ virtual void SetDropState(bool bDrop); -+ virtual const char* GetName(void) { return (const char*)m_pFormatName; } -+ -+ // OpenMax decoder callback routines. -+ OMX_ERRORTYPE DecoderFillBufferDone(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE* pBuffer); -+ void ReleaseOpenMaxBuffer(COpenMaxVideoBuffer *buffer); -+ - protected: - void QueryCodec(void); - OMX_ERRORTYPE PrimeFillBuffers(void); - OMX_ERRORTYPE AllocOMXInputBuffers(void); -- OMX_ERRORTYPE FreeOMXInputBuffers(bool wait); -- OMX_ERRORTYPE AllocOMXOutputBuffers(void); -- OMX_ERRORTYPE FreeOMXOutputBuffers(bool wait); -- static void CallbackAllocOMXEGLTextures(void*); -+ OMX_ERRORTYPE FreeOMXInputBuffers(void); -+ bool AllocOMXOutputBuffers(void); -+ bool FreeOMXOutputBuffers(void); -+ static bool CallbackAllocOMXEGLTextures(void*); - OMX_ERRORTYPE AllocOMXOutputEGLTextures(void); -- static void CallbackFreeOMXEGLTextures(void*); -- OMX_ERRORTYPE FreeOMXOutputEGLTextures(bool wait); -- -- // TODO Those should move into the base class. After start actions can be executed by callbacks. -- OMX_ERRORTYPE StartDecoder(void); -+ static bool CallbackFreeOMXEGLTextures(void*); -+ OMX_ERRORTYPE FreeOMXOutputEGLTextures(void); - OMX_ERRORTYPE StopDecoder(void); -- -- // OpenMax decoder callback routines. -- virtual OMX_ERRORTYPE DecoderEventHandler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, -- OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData); -- virtual OMX_ERRORTYPE DecoderEmptyBufferDone( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer); -- virtual OMX_ERRORTYPE DecoderFillBufferDone( -- OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBufferHeader); -+ OMX_ERRORTYPE ReturnOpenMaxBuffer(COpenMaxVideoBuffer *buffer); - - // EGL Resources - EGLDisplay m_egl_display; - EGLContext m_egl_context; - - // Video format -- DVDVideoPicture m_videobuffer; - bool m_drop_state; - int m_decoded_width; - int m_decoded_height; -+ unsigned int m_egl_buffer_count; -+ -+ bool m_port_settings_changed; -+ const char *m_pFormatName; - - std::queue<double> m_dts_queue; - std::queue<omx_demux_packet> m_demux_queue; - -- // OpenMax input buffers (demuxer packets) -- pthread_mutex_t m_omx_input_mutex; -- std::queue<OMX_BUFFERHEADERTYPE*> m_omx_input_avaliable; -- std::vector<OMX_BUFFERHEADERTYPE*> m_omx_input_buffers; -- bool m_omx_input_eos; -- int m_omx_input_port; -- //sem_t *m_omx_flush_input; -- CEvent m_input_consumed_event; -- - // OpenMax output buffers (video frames) - pthread_mutex_t m_omx_output_mutex; -- std::queue<OpenMaxVideoBuffer*> m_omx_output_busy; -- std::queue<OpenMaxVideoBuffer*> m_omx_output_ready; -- std::vector<OpenMaxVideoBuffer*> m_omx_output_buffers; -- bool m_omx_output_eos; -- int m_omx_output_port; -- //sem_t *m_omx_flush_output; -+ std::vector<COpenMaxVideoBuffer*> m_omx_output_busy; -+ std::queue<COpenMaxVideoBuffer*> m_omx_output_ready; -+ std::vector<COpenMaxVideoBuffer*> m_omx_output_buffers; -+ -+ // initialize OpenMax and get decoder component -+ bool Initialize( const CStdString &decoder_name); -+ -+ // Components -+ COMXCoreComponent m_omx_decoder; -+ COMXCoreComponent m_omx_egl_render; - -- bool m_portChanging; -+ COMXCoreTunel m_omx_tunnel; -+ OMX_VIDEO_CODINGTYPE m_codingType; - -- volatile bool m_videoplayback_done; -+ bool PortSettingsChanged(); -+ bool SendDecoderConfig(uint8_t *extradata, int extrasize); -+ bool NaluFormatStartCodes(enum AVCodecID codec, uint8_t *extradata, int extrasize); - }; - - // defined(HAVE_LIBOPENMAX) -diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index a485275..d607f55 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayer.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp -@@ -2988,7 +2988,9 @@ bool CDVDPlayer::OpenVideoStream(int iStream, int source, bool reset) - hint.aspect = aspect; - hint.forced_aspect = true; - } -+#ifndef TARGET_RASPBERRY_PI - hint.software = true; -+#endif - } - - boost::shared_ptr<CPVRClient> client; -diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -index 99b3155..fddb7f7 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -@@ -325,6 +325,9 @@ void CDVDPlayerVideo::Process() - - while (!m_bStop) - { -+ DemuxPacket staticPacket = {}; -+ DemuxPacket* pPacket = NULL; -+ bool bPacketDrop = false; - int iQueueTimeOut = (int)(m_stalled ? frametime / 4 : frametime * 10) / 1000; - int iPriority = (m_speed == DVD_PLAYSPEED_PAUSE && m_started) ? 1 : 0; - -@@ -361,8 +364,10 @@ void CDVDPlayerVideo::Process() - OutputPicture(&picture, pts); - pts+= frametime; - } -- -- continue; -+ pPacket = &staticPacket; -+ bPacketDrop = false; -+ goto submit_empty_packet; -+ //continue; - } - - if (pMsg->IsType(CDVDMsg::GENERAL_SYNCHRONIZE)) -@@ -489,9 +494,12 @@ void CDVDPlayerVideo::Process() - - if (pMsg->IsType(CDVDMsg::DEMUXER_PACKET)) - { -- DemuxPacket* pPacket = ((CDVDMsgDemuxerPacket*)pMsg)->GetPacket(); -- bool bPacketDrop = ((CDVDMsgDemuxerPacket*)pMsg)->GetPacketDrop(); -- -+ pPacket = ((CDVDMsgDemuxerPacket*)pMsg)->GetPacket(); -+ bPacketDrop = ((CDVDMsgDemuxerPacket*)pMsg)->GetPacketDrop(); -+ } -+submit_empty_packet: -+ if (ret == MSGQ_TIMEOUT || pMsg->IsType(CDVDMsg::DEMUXER_PACKET)) -+ { - if (m_stalled) - { - CLog::Log(LOGINFO, "CDVDPlayerVideo - Stillframe left, switching to normal playback"); -@@ -749,7 +757,8 @@ void CDVDPlayerVideo::Process() - } - - // all data is used by the decoder, we can safely free it now -- pMsg->Release(); -+ if (ret != MSGQ_TIMEOUT) -+ pMsg->Release(); - } - - // we need to let decoder release any picture retained resources. -diff --git a/xbmc/linux/OMXCore.cpp b/xbmc/linux/OMXCore.cpp -index 6e7d9a9..99e407a 100644 ---- a/xbmc/linux/OMXCore.cpp -+++ b/xbmc/linux/OMXCore.cpp -@@ -460,7 +460,12 @@ void COMXCoreComponent::FlushInput() - CLog::Log(LOGERROR, "COMXCoreComponent::FlushInput - Error on component %s omx_err(0x%08x)", - m_componentName.c_str(), (int)omx_err); - } -- WaitForCommand(OMX_CommandFlush, m_input_port); -+ omx_err = WaitForCommand(OMX_CommandFlush, m_input_port); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "COMXCoreComponent::FlushInput - %s WaitForCommand omx_err(0x%08x)", -+ m_componentName.c_str(), (int)omx_err); -+ } - } - - void COMXCoreComponent::FlushOutput() -@@ -477,7 +482,12 @@ void COMXCoreComponent::FlushOutput() - CLog::Log(LOGERROR, "COMXCoreComponent::FlushOutput - Error on component %s omx_err(0x%08x)", - m_componentName.c_str(), (int)omx_err); - } -- WaitForCommand(OMX_CommandFlush, m_output_port); -+ omx_err = WaitForCommand(OMX_CommandFlush, m_output_port); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "COMXCoreComponent::FlushOutput - %s WaitForCommand omx_err(0x%08x)", -+ m_componentName.c_str(), (int)omx_err); -+ } - } - - // timeout in milliseconds -@@ -1149,7 +1159,12 @@ OMX_STATETYPE COMXCoreComponent::GetState() - - OMX_STATETYPE state; - -- OMX_GetState(m_handle, &state); -+ OMX_ERRORTYPE omx_err = OMX_GetState(m_handle, &state); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "COMXCoreComponent::GetState - %s failed with omx_err(0x%x)\n", -+ m_componentName.c_str(), omx_err); -+ } - return state; - } - -@@ -1307,6 +1322,8 @@ OMX_ERRORTYPE COMXCoreComponent::DisablePort(unsigned int port, bool wait) - - OMX_ERRORTYPE COMXCoreComponent::UseEGLImage(OMX_BUFFERHEADERTYPE** ppBufferHdr, OMX_U32 nPortIndex, OMX_PTR pAppPrivate, void* eglImage) - { -+if (m_callbacks.FillBufferDone == &COMXCoreComponent::DecoderFillBufferDoneCallback) -+{ - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - - if(!m_handle) -@@ -1383,8 +1400,21 @@ OMX_ERRORTYPE COMXCoreComponent::UseEGLImage(OMX_BUFFERHEADERTYPE** ppBufferHdr, - - return omx_err; - } -+else -+{ -+ OMX_ERRORTYPE omx_err; -+ omx_err = OMX_UseEGLImage(m_handle, ppBufferHdr, nPortIndex, pAppPrivate, eglImage); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - %s failed with omx_err(0x%x)\n", -+ CLASSNAME, __func__, m_componentName.c_str(), omx_err); -+ return omx_err; -+ } -+ return omx_err; -+} -+} - --bool COMXCoreComponent::Initialize( const std::string &component_name, OMX_INDEXTYPE index) -+bool COMXCoreComponent::Initialize( const std::string &component_name, OMX_INDEXTYPE index, OMX_CALLBACKTYPE *callbacks) - { - OMX_ERRORTYPE omx_err; - -@@ -1419,6 +1449,13 @@ bool COMXCoreComponent::Initialize( const std::string &component_name, OMX_INDEX - m_callbacks.EmptyBufferDone = &COMXCoreComponent::DecoderEmptyBufferDoneCallback; - m_callbacks.FillBufferDone = &COMXCoreComponent::DecoderFillBufferDoneCallback; - -+ if (callbacks && callbacks->EventHandler) -+ m_callbacks.EventHandler = callbacks->EventHandler; -+ if (callbacks && callbacks->EmptyBufferDone) -+ m_callbacks.EmptyBufferDone = callbacks->EmptyBufferDone; -+ if (callbacks && callbacks->FillBufferDone) -+ m_callbacks.FillBufferDone = callbacks->FillBufferDone; -+ - // Get video component handle setting up callbacks, component is in loaded state on return. - if(!m_handle) - { -diff --git a/xbmc/linux/OMXCore.h b/xbmc/linux/OMXCore.h -index 54d35aa..5b9c2f9 100644 ---- a/xbmc/linux/OMXCore.h -+++ b/xbmc/linux/OMXCore.h -@@ -109,7 +109,7 @@ class COMXCoreComponent - OMX_ERRORTYPE DisablePort(unsigned int port, bool wait = true); - OMX_ERRORTYPE UseEGLImage(OMX_BUFFERHEADERTYPE** ppBufferHdr, OMX_U32 nPortIndex, OMX_PTR pAppPrivate, void* eglImage); - -- bool Initialize( const std::string &component_name, OMX_INDEXTYPE index); -+ bool Initialize( const std::string &component_name, OMX_INDEXTYPE index, OMX_CALLBACKTYPE *callbacks = NULL); - bool IsInitialized(); - bool Deinitialize(); - --- -1.9.3 - - -From e9b71fb1ee80896444d3301f919bf315a96530a3 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 3 May 2014 11:57:25 +0100 -Subject: [PATCH 43/94] [omxcodec] Enable for dvd menus - ---- - xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -index 18b8e3a..c85c8d2 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -@@ -194,6 +194,10 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne - - CLog::Log(LOGDEBUG, "CDVDFactoryCodec: compiled in hardware support: %s", hwSupport.c_str()); - -+#if defined(HAVE_LIBOPENMAX) -+ // libopenmax can handle dvd playback including stills -+ if (!CSettings::Get().GetBool("videoplayer.useomx")) -+#endif - if (hint.stills && (hint.codec == AV_CODEC_ID_MPEG2VIDEO || hint.codec == AV_CODEC_ID_MPEG1VIDEO)) - { - // If dvd is an mpeg2 and hint.stills --- -1.9.3 - - -From a7a4ccc26d85d1362a77b718564ddb1f08ca1246 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 3 Feb 2014 22:27:44 +0000 -Subject: [PATCH 44/94] [omxcodec] Add omx specific texture - create/upload/delete functions - ---- - xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 33 +++++++++++++++++++++++++ - xbmc/cores/VideoRenderers/LinuxRendererGLES.h | 4 +++ - 2 files changed, 37 insertions(+) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -index 6d879e3..279aa90 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -@@ -805,6 +805,12 @@ void CLinuxRendererGLES::LoadShaders(int field) - m_textureCreate = &CLinuxRendererGLES::CreateNV12Texture; - m_textureDelete = &CLinuxRendererGLES::DeleteNV12Texture; - } -+ else if (m_format == RENDER_FMT_OMXEGL) -+ { -+ m_textureUpload = &CLinuxRendererGLES::UploadOMXEGLTexture; -+ m_textureCreate = &CLinuxRendererGLES::CreateOMXEGLTexture; -+ m_textureDelete = &CLinuxRendererGLES::DeleteOMXEGLTexture; -+ } - else - { - // default to YV12 texture handlers -@@ -2487,6 +2493,33 @@ bool CLinuxRendererGLES::CreateSurfaceTexture(int index) - return true; - } - -+//******************************************************************************************************** -+// SurfaceTexture creation, deletion, copying + clearing -+//******************************************************************************************************** -+void CLinuxRendererGLES::UploadOMXEGLTexture(int index) -+{ -+#ifdef HAVE_LIBOPENMAX -+ YUVBUFFER &buf = m_buffers[index]; -+ if (buf.openMaxBuffer) -+ { -+ //buf.openMaxBuffer->Sync(); -+ } -+#endif -+} -+void CLinuxRendererGLES::DeleteOMXEGLTexture(int index) -+{ -+#ifdef HAVE_LIBOPENMAX -+ YUVBUFFER &buf = m_buffers[index]; -+ if (buf.openMaxBuffer) -+ SAFE_RELEASE(buf.openMaxBuffer); -+#endif -+} -+bool CLinuxRendererGLES::CreateOMXEGLTexture(int index) -+{ -+ DeleteOMXEGLTexture(index); -+ return true; -+} -+ - void CLinuxRendererGLES::SetTextureFilter(GLenum method) - { - for (int i = 0 ; i<m_NumYV12Buffers ; i++) -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -index 0ca56a2..f3dd3d3 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h -@@ -212,6 +212,10 @@ class CLinuxRendererGLES : public CBaseRenderer - void DeleteSurfaceTexture(int index); - bool CreateSurfaceTexture(int index); - -+ void UploadOMXEGLTexture(int index); -+ void DeleteOMXEGLTexture(int index); -+ bool CreateOMXEGLTexture(int index); -+ - void CalculateTextureSourceRects(int source, int num_planes); - - // renderers --- -1.9.3 - - -From 6a8bd5509ada85a05ad4672a33b76418573382ea Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 3 Feb 2014 22:50:43 +0000 -Subject: [PATCH 45/94] [omxcodec] Add shared pointer to delay shutdown of - codec until buffers are returned - ---- - .../DVDCodecs/Video/DVDVideoCodecOpenMax.cpp | 13 +++---------- - .../DVDCodecs/Video/DVDVideoCodecOpenMax.h | 3 ++- - .../dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 21 ++++++++++++++++++++- - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 5 ++++- - 4 files changed, 29 insertions(+), 13 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -index 7d33192..ef10555 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -@@ -28,7 +28,6 @@ - #include "DVDClock.h" - #include "DVDStreamInfo.h" - #include "DVDVideoCodecOpenMax.h" --#include "OpenMaxVideo.h" - #include "settings/Settings.h" - #include "utils/log.h" - -@@ -36,8 +35,8 @@ - //////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////// - CDVDVideoCodecOpenMax::CDVDVideoCodecOpenMax() -+ : m_omx_decoder( new COpenMaxVideo ) - { -- m_omx_decoder = NULL; - CLog::Log(LOGDEBUG, "%s::%s %p\n", CLASSNAME, __func__, this); - } - -@@ -49,8 +48,7 @@ CDVDVideoCodecOpenMax::~CDVDVideoCodecOpenMax() - - bool CDVDVideoCodecOpenMax::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) - { -- m_omx_decoder = new COpenMaxVideo; -- return m_omx_decoder->Open(hints, options); -+ return m_omx_decoder->Open(hints, options, m_omx_decoder); - } - - const char* CDVDVideoCodecOpenMax::GetName(void) -@@ -60,12 +58,7 @@ const char* CDVDVideoCodecOpenMax::GetName(void) - - void CDVDVideoCodecOpenMax::Dispose() - { -- if (m_omx_decoder) -- { -- m_omx_decoder->Dispose(); -- delete m_omx_decoder; -- m_omx_decoder = NULL; -- } -+ m_omx_decoder->Dispose(); - } - - void CDVDVideoCodecOpenMax::SetDropState(bool bDrop) -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -index 67cc235..b7c0c1b 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -@@ -22,6 +22,7 @@ - #if defined(HAVE_LIBOPENMAX) - - #include "DVDVideoCodec.h" -+#include "OpenMaxVideo.h" - - class COpenMaxVideo; - class CDVDVideoCodecOpenMax : public CDVDVideoCodec -@@ -42,7 +43,7 @@ class CDVDVideoCodecOpenMax : public CDVDVideoCodec - virtual const char* GetName(void); - - protected: -- COpenMaxVideo *m_omx_decoder; -+ OpenMaxVideoPtr m_omx_decoder; - }; - - #endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index aca2e0d..29b5bb9 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -126,6 +126,7 @@ COpenMaxVideo::COpenMaxVideo() - m_egl_buffer_count = 0; - - m_port_settings_changed = false; -+ m_finished = false; - m_pFormatName = "omx-xxxx"; - } - -@@ -134,6 +135,7 @@ COpenMaxVideo::~COpenMaxVideo() - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); - #endif -+ assert(m_finished); - if (m_omx_decoder.IsInitialized()) - { - if (m_omx_tunnel.IsInitialized()) -@@ -149,7 +151,7 @@ COpenMaxVideo::~COpenMaxVideo() - pthread_mutex_destroy(&m_omx_output_mutex); - } - --bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) -+bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenMaxVideoPtr myself) - { - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); -@@ -161,6 +163,7 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) - - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - -+ m_myself = myself; - m_decoded_width = hints.width; - m_decoded_height = hints.height; - -@@ -331,6 +334,15 @@ void COpenMaxVideo::Dispose() - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif -+ // we are happy to exit, but let last shared pointer being deleted trigger the destructor -+ bool done = false; -+ pthread_mutex_lock(&m_omx_output_mutex); -+ if (m_omx_output_busy.empty()) -+ done = true; -+ m_finished = true; -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ if (done) -+ m_myself.reset(); - } - - void COpenMaxVideo::SetDropState(bool bDrop) -@@ -752,6 +764,13 @@ void COpenMaxVideo::ReleaseOpenMaxBuffer(COpenMaxVideoBuffer *buffer) - m_omx_output_busy.erase(std::remove(m_omx_output_busy.begin(), m_omx_output_busy.end(), buffer), m_omx_output_busy.end()); - pthread_mutex_unlock(&m_omx_output_mutex); - ReturnOpenMaxBuffer(buffer); -+ bool done = false; -+ pthread_mutex_lock(&m_omx_output_mutex); -+ if (m_finished && m_omx_output_busy.empty()) -+ done = true; -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ if (done) -+ m_myself.reset(); - } - - bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index 9079c13..0975e8a 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -43,6 +43,7 @@ typedef struct omx_demux_packet { - } omx_demux_packet; - - class COpenMaxVideo; -+typedef boost::shared_ptr<COpenMaxVideo> OpenMaxVideoPtr; - // an omx egl video frame - class COpenMaxVideoBuffer - { -@@ -75,7 +76,7 @@ class COpenMaxVideo - virtual ~COpenMaxVideo(); - - // Required overrides -- virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options); -+ virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenMaxVideoPtr myself); - virtual void Dispose(void); - virtual int Decode(uint8_t *pData, int iSize, double dts, double pts); - virtual void Reset(void); -@@ -112,9 +113,11 @@ class COpenMaxVideo - int m_decoded_width; - int m_decoded_height; - unsigned int m_egl_buffer_count; -+ bool m_finished; - - bool m_port_settings_changed; - const char *m_pFormatName; -+ OpenMaxVideoPtr m_myself; - - std::queue<double> m_dts_queue; - std::queue<omx_demux_packet> m_demux_queue; --- -1.9.3 - - -From e8f40e625203fe4113e2687d3730c38770cc0857 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 3 Feb 2014 23:11:31 +0000 -Subject: [PATCH 46/94] [omxcodec] Fix for aspect ratio in non-square pixel - modes - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 17 +++++++++++++++++ - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 3 +++ - 2 files changed, 20 insertions(+) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index 29b5bb9..7e23c87 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -63,6 +63,7 @@ COpenMaxVideoBuffer::COpenMaxVideoBuffer(COpenMaxVideo *omv) - index = 0; - egl_image = 0; - texture_id = 0; -+ m_aspect_ratio = 0.0f; - } - - COpenMaxVideoBuffer::~COpenMaxVideoBuffer() -@@ -166,6 +167,8 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - m_myself = myself; - m_decoded_width = hints.width; - m_decoded_height = hints.height; -+ m_forced_aspect_ratio = hints.forced_aspect; -+ m_aspect_ratio = hints.aspect; - - m_egl_display = g_Windowing.GetEGLDisplay(); - m_egl_context = g_Windowing.GetEGLContext(); -@@ -435,6 +438,9 @@ bool COpenMaxVideo::PortSettingsChanged() - CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); - return false; - } -+ if (!m_forced_aspect_ratio && pixel_aspect.nX && pixel_aspect.nY) -+ m_aspect_ratio = (float)pixel_aspect.nX * port_def.format.video.nFrameWidth / -+ ((float)pixel_aspect.nY * port_def.format.video.nFrameHeight); - - if (m_port_settings_changed) - { -@@ -800,6 +806,16 @@ bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) - pDvdVideoPicture->iDisplayWidth = m_decoded_width; - pDvdVideoPicture->iDisplayHeight = m_decoded_height; - -+ if (buffer->m_aspect_ratio > 0.0 && !m_forced_aspect_ratio) -+ { -+ pDvdVideoPicture->iDisplayWidth = ((int)lrint(pDvdVideoPicture->iHeight * buffer->m_aspect_ratio)) & -3; -+ if (pDvdVideoPicture->iDisplayWidth > pDvdVideoPicture->iWidth) -+ { -+ pDvdVideoPicture->iDisplayWidth = pDvdVideoPicture->iWidth; -+ pDvdVideoPicture->iDisplayHeight = ((int)lrint(pDvdVideoPicture->iWidth / buffer->m_aspect_ratio)) & -3; -+ } -+ } -+ - #ifdef DTS_QUEUE - if (!m_dts_queue.empty()) - { -@@ -853,6 +869,7 @@ OMX_ERRORTYPE COpenMaxVideo::DecoderFillBufferDone( - - // queue output omx buffer to ready list. - pthread_mutex_lock(&m_omx_output_mutex); -+ buffer->m_aspect_ratio = m_aspect_ratio; - m_omx_output_ready.push(buffer); - pthread_mutex_unlock(&m_omx_output_mutex); - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index 0975e8a..9138a20 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -54,6 +54,7 @@ class COpenMaxVideoBuffer - OMX_BUFFERHEADERTYPE *omx_buffer; - int width; - int height; -+ float m_aspect_ratio; - int index; - - // used for egl based rendering if active -@@ -114,6 +115,8 @@ class COpenMaxVideo - int m_decoded_height; - unsigned int m_egl_buffer_count; - bool m_finished; -+ float m_aspect_ratio; -+ bool m_forced_aspect_ratio; - - bool m_port_settings_changed; - const char *m_pFormatName; --- -1.9.3 - - -From e42ca92b464ad88dbe0f8b0d86080d64d52e08a8 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 3 Feb 2014 23:19:22 +0000 -Subject: [PATCH 47/94] [omxcodec] Report error when codec not enabled - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index 7e23c87..2ae722b 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -43,6 +43,7 @@ - #include <IL/OMX_Image.h> - - #include "cores/omxplayer/OMXImage.h" -+#include "linux/RBP.h" - - #define DTS_QUEUE - -@@ -155,7 +156,7 @@ COpenMaxVideo::~COpenMaxVideo() - bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenMaxVideoPtr myself) - { - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); -+ CLog::Log(LOGDEBUG, "%s::%s useomx:%d software:%d", CLASSNAME, __func__, CSettings::Get().GetBool("videoplayer.useomx"), hints.software); - #endif - - // we always qualify even if DVDFactoryCodec does this too. -@@ -232,6 +233,13 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - break; - } - -+ if ( (m_codingType == OMX_VIDEO_CodingMPEG2 && !g_RBP.GetCodecMpg2() ) || -+ (m_codingType == OMX_VIDEO_CodingWMV && !g_RBP.GetCodecWvc1() ) ) -+ { -+ CLog::Log(LOGWARNING, "%s::%s Codec %s is not supported\n", CLASSNAME, __func__, m_pFormatName); -+ return false; -+ } -+ - // initialize OpenMAX. - if (!m_omx_decoder.Initialize("OMX.broadcom.video_decode", OMX_IndexParamVideoInit)) - { --- -1.9.3 - - -From 55b0b157ba32d03ca0ec854b7935aee5601810d8 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Tue, 4 Feb 2014 17:29:37 +0000 -Subject: [PATCH 48/94] [omxcodec] Add deinterlace support - ---- - xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 2 +- - .../dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 106 ++++++++++++++++++--- - .../cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 9 +- - 3 files changed, 103 insertions(+), 14 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -index 279aa90..a57abe4 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -@@ -2607,7 +2607,7 @@ bool CLinuxRendererGLES::Supports(EDEINTERLACEMODE mode) - return true; - - if(m_renderMethod & RENDER_OMXEGL) -- return false; -+ return true; - - if(m_renderMethod & RENDER_EGLIMG) - return false; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index 2ae722b..fbf1458 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -33,6 +33,7 @@ - #include "utils/log.h" - #include "utils/TimeUtils.h" - #include "settings/Settings.h" -+#include "settings/MediaSettings.h" - #include "ApplicationMessenger.h" - #include "Application.h" - #include "threads/Atomics.h" -@@ -130,6 +131,10 @@ COpenMaxVideo::COpenMaxVideo() - m_port_settings_changed = false; - m_finished = false; - m_pFormatName = "omx-xxxx"; -+ -+ m_deinterlace = false; -+ m_deinterlace_request = VS_DEINTERLACEMODE_OFF; -+ m_deinterlace_second_field = false; - } - - COpenMaxVideo::~COpenMaxVideo() -@@ -140,13 +145,17 @@ COpenMaxVideo::~COpenMaxVideo() - assert(m_finished); - if (m_omx_decoder.IsInitialized()) - { -- if (m_omx_tunnel.IsInitialized()) -- m_omx_tunnel.Deestablish(); -+ if (m_omx_tunnel_decoder.IsInitialized()) -+ m_omx_tunnel_decoder.Deestablish(); -+ if (m_omx_tunnel_image_fx.IsInitialized()) -+ m_omx_tunnel_image_fx.Deestablish(); - - StopDecoder(); - - if (m_omx_egl_render.IsInitialized()) - m_omx_egl_render.Deinitialize(); -+ if (m_omx_image_fx.IsInitialized()) -+ m_omx_image_fx.Deinitialize(); - if (m_omx_decoder.IsInitialized()) - m_omx_decoder.Deinitialize(); - } -@@ -165,6 +174,8 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - -+ m_deinterlace_request = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode; -+ - m_myself = myself; - m_decoded_width = hints.width; - m_decoded_height = hints.height; -@@ -467,6 +478,49 @@ bool COpenMaxVideo::PortSettingsChanged() - return false; - } - -+ OMX_CONFIG_INTERLACETYPE interlace; -+ OMX_INIT_STRUCTURE(interlace); -+ interlace.nPortIndex = m_omx_decoder.GetOutputPort(); -+ omx_err = m_omx_decoder.GetConfig(OMX_IndexConfigCommonInterlace, &interlace); -+ -+ if (m_deinterlace_request == VS_DEINTERLACEMODE_FORCE) -+ m_deinterlace = true; -+ else if (m_deinterlace_request == VS_DEINTERLACEMODE_OFF) -+ m_deinterlace = false; -+ else -+ m_deinterlace = interlace.eMode != OMX_InterlaceProgressive; -+ -+ CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", -+ CLASSNAME, __func__, port_def.format.video.nFrameWidth, port_def.format.video.nFrameHeight, port_def.format.video.xFramerate / (float) (1 << 16), -+ interlace.eMode, m_deinterlace); -+ -+ if (m_deinterlace) -+ { -+ if (!m_omx_image_fx.Initialize("OMX.broadcom.image_fx", OMX_IndexParamImageInit)) -+ { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_image_fx.Initialize", CLASSNAME, __func__); -+ return false; -+ } -+ } -+ -+ if (m_deinterlace) -+ { -+ OMX_CONFIG_IMAGEFILTERPARAMSTYPE image_filter; -+ OMX_INIT_STRUCTURE(image_filter); -+ -+ image_filter.nPortIndex = m_omx_image_fx.GetOutputPort(); -+ image_filter.nNumParams = 1; -+ image_filter.nParams[0] = 3; -+ image_filter.eImageFilter = OMX_ImageFilterDeInterlaceAdvanced; -+ -+ omx_err = m_omx_image_fx.SetConfig(OMX_IndexConfigCommonImageFilterParameters, &image_filter); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - OMX_IndexConfigCommonImageFilterParameters omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ } -+ - OMX_CALLBACKTYPE callbacks = { NULL, NULL, DecoderFillBufferDoneCallback }; - if (!m_omx_egl_render.Initialize("OMX.broadcom.egl_render", OMX_IndexParamVideoInit, &callbacks)) - { -@@ -487,19 +541,40 @@ bool COpenMaxVideo::PortSettingsChanged() - - m_omx_egl_render.ResetEos(); - -- CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, -- port_def.format.video.nFrameWidth, port_def.format.video.nFrameHeight, -- port_def.format.video.xFramerate / (float)(1<<16), 0,0); -- -- m_omx_tunnel.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ if (m_deinterlace) -+ { -+ m_omx_tunnel_decoder.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_image_fx, m_omx_image_fx.GetInputPort()); -+ m_omx_tunnel_image_fx.Initialize(&m_omx_image_fx, m_omx_image_fx.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ } -+ else -+ { -+ m_omx_tunnel_decoder.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ } - -- omx_err = m_omx_tunnel.Establish(); -+ omx_err = m_omx_tunnel_decoder.Establish(); - if (omx_err != OMX_ErrorNone) - { -- CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_decoder.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err); - return false; - } - -+ if (m_deinterlace) -+ { -+ omx_err = m_omx_tunnel_image_fx.Establish(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_tunnel_image_fx.Establish omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ omx_err = m_omx_image_fx.SetStateForComponent(OMX_StateExecuting); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - m_omx_image_fx.SetStateForComponent omx_err(0x%08x)", -+ CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ } -+ - // Obtain the information about the output port. - OMX_PARAM_PORTDEFINITIONTYPE port_format; - OMX_INIT_STRUCTURE(port_format); -@@ -724,8 +799,12 @@ void COpenMaxVideo::Reset(void) - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s", CLASSNAME, __func__); - #endif -- m_omx_egl_render.FlushAll(); -- m_omx_decoder.FlushAll(); -+ if (m_omx_egl_render.IsInitialized()) -+ m_omx_egl_render.FlushAll(); -+ if (m_omx_image_fx.IsInitialized()) -+ m_omx_image_fx.FlushAll(); -+ if (m_omx_decoder.IsInitialized()) -+ m_omx_decoder.FlushAll(); - // blow all ready video frames - while (!m_omx_output_ready.empty()) - { -@@ -825,11 +904,14 @@ bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) - } - - #ifdef DTS_QUEUE -- if (!m_dts_queue.empty()) -+ if (!m_deinterlace_second_field) - { -+ assert(!m_dts_queue.empty()); - pDvdVideoPicture->dts = m_dts_queue.front(); - m_dts_queue.pop(); - } -+ if (m_deinterlace) -+ m_deinterlace_second_field = !m_deinterlace_second_field; - #endif - // nTimeStamp is in microseconds - double ts = FromOMXTime(buffer->omx_buffer->nTimeStamp); -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index 9138a20..c8ad4d8 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -31,6 +31,7 @@ - #include "cores/dvdplayer/DVDStreamInfo.h" - #include "DVDVideoCodec.h" - #include "threads/Event.h" -+#include "xbmc/settings/VideoSettings.h" - - #include <queue> - #include <semaphore.h> -@@ -136,11 +137,17 @@ class COpenMaxVideo - - // Components - COMXCoreComponent m_omx_decoder; -+ COMXCoreComponent m_omx_image_fx; - COMXCoreComponent m_omx_egl_render; - -- COMXCoreTunel m_omx_tunnel; -+ COMXCoreTunel m_omx_tunnel_decoder; -+ COMXCoreTunel m_omx_tunnel_image_fx; - OMX_VIDEO_CODINGTYPE m_codingType; - -+ bool m_deinterlace; -+ EDEINTERLACEMODE m_deinterlace_request; -+ bool m_deinterlace_second_field; -+ - bool PortSettingsChanged(); - bool SendDecoderConfig(uint8_t *extradata, int extrasize); - bool NaluFormatStartCodes(enum AVCodecID codec, uint8_t *extradata, int extrasize); --- -1.9.3 - - -From 0701b41709e6a18567b9f6bfd0d491285546eedc Mon Sep 17 00:00:00 2001 -From: Ben Avison <bavison@riscosopen.org> -Date: Wed, 12 Feb 2014 18:43:14 +0000 -Subject: [PATCH 49/94] Improved file buffering in CArchive. - -CArchive already did some file buffering, but only on writes. Added the -equivalent code for reads. Also improved the write buffer case so that it -only ever issues sector-aligned writes (the read code does this from the -start). Shuffled various bits of code into the header file to squeeze a bit -more performance out of it. - -Profiled the effect on CFileItemList::Archive(), which is one of the slow -parts of the process of reopening a media library, on a non-overclocked -Raspberry Pi. Times are in seconds: - -TV shows (253 items) - -Before After -Mean StdDev Mean StdDev Confidence Change -0.394 0.005 0.151 0.005 100.0% +159.8% - -Songs (4115 items) - -Before After -Mean StdDev Mean StdDev Confidence Change -2.931 0.045 0.690 0.019 100.0% +324.4% ---- - xbmc/utils/Archive.cpp | 158 ++++++++++++++++++------------------------------- - xbmc/utils/Archive.h | 130 ++++++++++++++++++++++++++++++++++------ - 2 files changed, 172 insertions(+), 116 deletions(-) - -diff --git a/xbmc/utils/Archive.cpp b/xbmc/utils/Archive.cpp -index 4519e19..b2ad273 100644 ---- a/xbmc/utils/Archive.cpp -+++ b/xbmc/utils/Archive.cpp -@@ -30,24 +30,29 @@ - - using namespace XFILE; - --#define BUFFER_MAX 4096 -- - CArchive::CArchive(CFile* pFile, int mode) - { - m_pFile = pFile; - m_iMode = mode; - -- m_pBuffer = new uint8_t[BUFFER_MAX]; -- memset(m_pBuffer, 0, BUFFER_MAX); -- -- m_BufferPos = 0; -+ m_pBuffer = new uint8_t[CARCHIVE_BUFFER_MAX]; -+ memset(m_pBuffer, 0, CARCHIVE_BUFFER_MAX); -+ if (mode == load) -+ { -+ m_BufferPos = m_pBuffer + CARCHIVE_BUFFER_MAX; -+ m_BufferRemain = 0; -+ } -+ else -+ { -+ m_BufferPos = m_pBuffer; -+ m_BufferRemain = CARCHIVE_BUFFER_MAX; -+ } - } - - CArchive::~CArchive() - { - FlushBuffer(); - delete[] m_pBuffer; -- m_BufferPos = 0; - } - - void CArchive::Close() -@@ -214,89 +219,6 @@ CArchive& CArchive::operator<<(const std::vector<int>& iArray) - return *this; - } - --inline CArchive& CArchive::streamout(const void* dataPtr, size_t size) --{ -- const uint8_t* ptr = (const uint8_t*)dataPtr; -- -- if (size + m_BufferPos >= BUFFER_MAX) -- { -- FlushBuffer(); -- while (size >= BUFFER_MAX) -- { -- memcpy(m_pBuffer, ptr, BUFFER_MAX); -- m_BufferPos = BUFFER_MAX; -- ptr += BUFFER_MAX; -- size -= BUFFER_MAX; -- FlushBuffer(); -- } -- } -- -- memcpy(m_pBuffer + m_BufferPos, ptr, size); -- m_BufferPos += size; -- -- return *this; --} -- --CArchive& CArchive::operator>>(float& f) --{ -- return streamin(&f, sizeof(f)); --} -- --CArchive& CArchive::operator>>(double& d) --{ -- return streamin(&d, sizeof(d)); --} -- --CArchive& CArchive::operator>>(short int& s) --{ -- return streamin(&s, sizeof(s)); --} -- --CArchive& CArchive::operator>>(unsigned short int& us) --{ -- return streamin(&us, sizeof(us)); --} -- --CArchive& CArchive::operator>>(int& i) --{ -- return streamin(&i, sizeof(i)); --} -- --CArchive& CArchive::operator>>(unsigned int& ui) --{ -- return streamin(&ui, sizeof(ui)); --} -- --CArchive& CArchive::operator>>(long int& l) --{ -- return streamin(&l, sizeof(l)); --} -- --CArchive& CArchive::operator>>(unsigned long int& ul) --{ -- return streamin(&ul, sizeof(ul)); --} -- --CArchive& CArchive::operator>>(long long int& ll) --{ -- return streamin(&ll, sizeof(ll)); --} -- --CArchive& CArchive::operator>>(unsigned long long int& ull) --{ -- return streamin(&ull, sizeof(ull)); --} -- --CArchive& CArchive::operator>>(bool& b) --{ -- return streamin(&b, sizeof(b)); --} -- --CArchive& CArchive::operator>>(char& c) --{ -- return streamin(&c, sizeof(c)); --} -- - CArchive& CArchive::operator>>(std::string& str) - { - size_t iLength = 0; -@@ -450,23 +372,61 @@ CArchive& CArchive::operator>>(std::vector<int>& iArray) - return *this; - } - --inline CArchive& CArchive::streamin(void* dataPtr, const size_t size) -+void CArchive::FlushBuffer() - { -- size_t read = m_pFile->Read(dataPtr, size); -- if (read < size) -+ if (m_iMode == store && m_BufferPos != m_pBuffer) - { -- CLog::Log(LOGERROR, "%s: can't stream out: requested %lu bytes, was read %lu bytes", __FUNCTION__, (unsigned long)size, (unsigned long)read); -- memset(dataPtr, 0, size); -+ m_pFile->Write(m_pBuffer, m_BufferPos - m_pBuffer); -+ m_BufferPos = m_pBuffer; -+ m_BufferRemain = CARCHIVE_BUFFER_MAX; - } -+} - -+CArchive &CArchive::streamout_bufferwrap(const uint8_t *ptr, size_t size) -+{ -+ do -+ { -+ size_t chunkSize = std::min(size, m_BufferRemain); -+ m_BufferPos = std::copy(ptr, ptr + chunkSize, m_BufferPos); -+ ptr += chunkSize; -+ size -= chunkSize; -+ m_BufferRemain -= chunkSize; -+ if (m_BufferRemain == 0) -+ FlushBuffer(); -+ } while (size > 0); - return *this; - } - --void CArchive::FlushBuffer() -+void CArchive::FillBuffer() - { -- if (m_BufferPos > 0) -+ if (m_iMode == load && m_BufferRemain == 0) - { -- m_pFile->Write(m_pBuffer, m_BufferPos); -- m_BufferPos = 0; -+ m_BufferRemain = m_pFile->Read(m_pBuffer, CARCHIVE_BUFFER_MAX); -+ m_BufferPos = m_pBuffer; - } - } -+ -+CArchive &CArchive::streamin_bufferwrap(uint8_t *ptr, size_t size) -+{ -+ uint8_t *orig_ptr = ptr; -+ size_t orig_size = size; -+ do -+ { -+ if (m_BufferRemain == 0) -+ { -+ FillBuffer(); -+ if (m_BufferRemain < CARCHIVE_BUFFER_MAX && m_BufferRemain < size) -+ { -+ CLog::Log(LOGERROR, "%s: can't stream in: requested %lu bytes, was read %lu bytes", __FUNCTION__, (unsigned long) orig_size, (unsigned long) (ptr - orig_ptr + m_BufferRemain)); -+ memset(orig_ptr, 0, orig_size); -+ return *this; -+ } -+ } -+ size_t chunkSize = std::min(size, m_BufferRemain); -+ ptr = std::copy(m_BufferPos, m_BufferPos + chunkSize, ptr); -+ m_BufferPos += chunkSize; -+ m_BufferRemain -= chunkSize; -+ size -= chunkSize; -+ } while (size > 0); -+ return *this; -+} -diff --git a/xbmc/utils/Archive.h b/xbmc/utils/Archive.h -index 0148fcb..5b25be5 100644 ---- a/xbmc/utils/Archive.h -+++ b/xbmc/utils/Archive.h -@@ -24,6 +24,8 @@ - #include <vector> - #include "PlatformDefs.h" // for SYSTEMTIME - -+#define CARCHIVE_BUFFER_MAX 4096 -+ - namespace XFILE - { - class CFile; -@@ -77,18 +79,66 @@ class CArchive - CArchive& operator<<(const std::vector<int>& iArray); - - // loading -- CArchive& operator>>(float& f); -- CArchive& operator>>(double& d); -- CArchive& operator>>(short int& s); -- CArchive& operator>>(unsigned short int& us); -- CArchive& operator>>(int& i); -- CArchive& operator>>(unsigned int& ui); -- CArchive& operator>>(long int& l); -- CArchive& operator>>(unsigned long int& ul); -- CArchive& operator>>(long long int& ll); -- CArchive& operator>>(unsigned long long int& ull); -- CArchive& operator>>(bool& b); -- CArchive& operator>>(char& c); -+ inline CArchive& operator>>(float& f) -+ { -+ return streamin(&f, sizeof(f)); -+ } -+ -+ inline CArchive& operator>>(double& d) -+ { -+ return streamin(&d, sizeof(d)); -+ } -+ -+ inline CArchive& operator>>(short int& s) -+ { -+ return streamin(&s, sizeof(s)); -+ } -+ -+ inline CArchive& operator>>(unsigned short int& us) -+ { -+ return streamin(&us, sizeof(us)); -+ } -+ -+ inline CArchive& operator>>(int& i) -+ { -+ return streamin(&i, sizeof(i)); -+ } -+ -+ inline CArchive& operator>>(unsigned int& ui) -+ { -+ return streamin(&ui, sizeof(ui)); -+ } -+ -+ inline CArchive& operator>>(long int& l) -+ { -+ return streamin(&l, sizeof(l)); -+ } -+ -+ inline CArchive& operator>>(unsigned long int& ul) -+ { -+ return streamin(&ul, sizeof(ul)); -+ } -+ -+ inline CArchive& operator>>(long long int& ll) -+ { -+ return streamin(&ll, sizeof(ll)); -+ } -+ -+ inline CArchive& operator>>(unsigned long long int& ull) -+ { -+ return streamin(&ull, sizeof(ull)); -+ } -+ -+ inline CArchive& operator>>(bool& b) -+ { -+ return streamin(&b, sizeof(b)); -+ } -+ -+ inline CArchive& operator>>(char& c) -+ { -+ return streamin(&c, sizeof(c)); -+ } -+ - CArchive& operator>>(std::string &str); - CArchive& operator>>(std::wstring& wstr); - CArchive& operator>>(SYSTEMTIME& time); -@@ -105,12 +155,58 @@ class CArchive - enum Mode {load = 0, store}; - - protected: -- CArchive& streamout(const void* dataPtr, size_t size); -- CArchive& streamin(void* dataPtr, const size_t size); -- void FlushBuffer(); -+ inline CArchive &streamout(const void *dataPtr, size_t size) -+ { -+ const uint8_t *ptr = (const uint8_t *) dataPtr; -+ /* Note, the buffer is flushed as soon as it is full (m_BufferRemain == size) rather -+ * than waiting until we attempt to put more data into an already full buffer */ -+ if (m_BufferRemain > size) -+ { -+ switch (size) -+ { -+ case 1: *m_BufferPos++ = *ptr; m_BufferRemain--; break; -+ case 2: *(uint16_t *) m_BufferPos = *(const uint16_t *) ptr; m_BufferPos += 2; m_BufferRemain -= 2; break; -+ case 4: *(uint32_t *) m_BufferPos = *(const uint32_t *) ptr; m_BufferPos += 4; m_BufferRemain -= 4; break; -+ default: m_BufferPos = std::copy(ptr, ptr + size, m_BufferPos); m_BufferRemain -= size; break; -+ } -+ return *this; -+ } -+ else -+ { -+ return streamout_bufferwrap(ptr, size); -+ } -+ } -+ -+ inline CArchive &streamin(void *dataPtr, size_t size) -+ { -+ uint8_t *ptr = (uint8_t *) dataPtr; -+ /* Note, refilling the buffer is deferred until we know we need to read more from it */ -+ if (m_BufferRemain >= size) -+ { -+ switch (size) -+ { -+ case 1: *ptr = *m_BufferPos++; m_BufferRemain--; break; -+ case 2: *(uint16_t *) ptr = *(const uint16_t *) m_BufferPos; m_BufferPos += 2; m_BufferRemain -= 2; break; -+ case 4: *(uint32_t *) ptr = *(const uint32_t *) m_BufferPos; m_BufferPos += 4; m_BufferRemain -= 4; break; -+ default: std::copy(m_BufferPos, m_BufferPos + size, ptr); m_BufferPos += size; m_BufferRemain -= size; break; -+ } -+ return *this; -+ } -+ else -+ { -+ return streamin_bufferwrap(ptr, size); -+ } -+ } -+ - XFILE::CFile* m_pFile; - int m_iMode; - uint8_t *m_pBuffer; -- int m_BufferPos; --}; -+ uint8_t *m_BufferPos; -+ size_t m_BufferRemain; - -+private: -+ void FlushBuffer(); -+ CArchive &streamout_bufferwrap(const uint8_t *ptr, size_t size); -+ void FillBuffer(); -+ CArchive &streamin_bufferwrap(uint8_t *ptr, size_t size); -+}; --- -1.9.3 - - -From 2ae9667952e98ab91b0056094231e923570fa64b Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 5 Feb 2014 11:46:33 +0000 -Subject: [PATCH 50/94] [rbp/settings] Allow av sync type to be enabled - -It works for dvdplayer ---- - system/settings/rbp.xml | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/system/settings/rbp.xml b/system/settings/rbp.xml -index 2b7d0a6..1429256 100644 ---- a/system/settings/rbp.xml -+++ b/system/settings/rbp.xml -@@ -1,13 +1,6 @@ - <?xml version="1.0" encoding="utf-8" ?> - <settings> - <section id="videos"> -- <category id="videoplayer"> -- <group id="2"> -- <setting id="videoplayer.synctype"> -- <visible>false</visible> -- </setting> -- </group> -- </category> - <category id="videoacceleration"> - <group id="1"> - <visible>false</visible> --- -1.9.3 - - -From 4fb1419b986a36f2e53a5bca71caf90bd13443ba Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sun, 16 Feb 2014 17:38:05 +0000 -Subject: [PATCH 51/94] [omxcodec] Only do essential calls in texture thread - [omxcodec] Fix for files with no valid pts values. [omxcodec] Fix stall on - seek/trickplay - need to reset start flag [omxcodec] Make sure we have a - valid context when video decode starts before first fanart is decoded - [omxcodec] More care with dropping frames quickly - ---- - .../dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 127 ++++++++++++++------- - .../cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 14 +-- - 2 files changed, 89 insertions(+), 52 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index fbf1458..71d19af 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -55,6 +55,9 @@ - - #define CLASSNAME "COpenMaxVideo" - -+#define OMX_BUFFERFLAG_PTS_INVALID (1<<28) -+#define OMX_BUFFERFLAG_DROPPED (1<<29) -+ - COpenMaxVideoBuffer::COpenMaxVideoBuffer(COpenMaxVideo *omv) - : m_omv(omv), m_refs(0) - { -@@ -120,7 +123,9 @@ void COpenMaxVideoBuffer::Sync() - - COpenMaxVideo::COpenMaxVideo() - { -+ #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s %p", CLASSNAME, __func__, this); -+ #endif - pthread_mutex_init(&m_omx_output_mutex, NULL); - - m_drop_state = false; -@@ -135,6 +140,7 @@ COpenMaxVideo::COpenMaxVideo() - m_deinterlace = false; - m_deinterlace_request = VS_DEINTERLACEMODE_OFF; - m_deinterlace_second_field = false; -+ m_startframe = false; - } - - COpenMaxVideo::~COpenMaxVideo() -@@ -182,8 +188,6 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - m_forced_aspect_ratio = hints.forced_aspect; - m_aspect_ratio = hints.aspect; - -- m_egl_display = g_Windowing.GetEGLDisplay(); -- m_egl_context = g_Windowing.GetEGLContext(); - m_egl_buffer_count = 4; - - m_codingType = OMX_VIDEO_CodingUnused; -@@ -347,6 +351,7 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - return false; - - m_drop_state = false; -+ m_startframe = false; - - return true; - } -@@ -375,6 +380,25 @@ void COpenMaxVideo::SetDropState(bool bDrop) - CLASSNAME, __func__, bDrop); - #endif - m_drop_state = bDrop; -+ if (m_drop_state) -+ { -+ while (1) -+ { -+ COpenMaxVideoBuffer *buffer = NULL; -+ pthread_mutex_lock(&m_omx_output_mutex); -+ // fetch a output buffer and pop it off the ready list -+ if (!m_omx_output_ready.empty()) -+ { -+ buffer = m_omx_output_ready.front(); -+ m_omx_output_ready.pop(); -+ } -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ if (buffer) -+ ReturnOpenMaxBuffer(buffer); -+ else -+ break; -+ } -+ } - } - - bool COpenMaxVideo::SendDecoderConfig(uint8_t *extradata, int extrasize) -@@ -713,10 +737,13 @@ int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) - - if (demuxer_bytes == 0) - omx_buffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; -- if (pts == DVD_NOPTS_VALUE) -+ // openmax doesn't like an unknown timestamp as first frame -+ if (pts == DVD_NOPTS_VALUE && m_startframe) - omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN; -+ if (pts == DVD_NOPTS_VALUE) // hijack an omx flag to indicate there wasn't a real timestamp - it will be returned with the picture (but otherwise ignored) -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_PTS_INVALID; - if (m_drop_state) // hijack an omx flag to signal this frame to be dropped - it will be returned with the picture (but otherwise ignored) -- omx_buffer->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED; - - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGDEBUG, "%s::%s - %-6d dts:%.3f pts:%.3f flags:%x", -@@ -731,10 +758,14 @@ int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) - } - if (demuxer_bytes == 0) - { -+ m_startframe = true; - #ifdef DTS_QUEUE -- // only push if we are successful with feeding OMX_EmptyThisBuffer -- m_dts_queue.push(dts); -- assert(m_dts_queue.size() < 32); -+ if (!m_drop_state) -+ { -+ // only push if we are successful with feeding OMX_EmptyThisBuffer -+ m_dts_queue.push(dts); -+ assert(m_dts_queue.size() < 32); -+ } - #endif - if (buffer_to_free) - { -@@ -806,15 +837,8 @@ void COpenMaxVideo::Reset(void) - if (m_omx_decoder.IsInitialized()) - m_omx_decoder.FlushAll(); - // blow all ready video frames -- while (!m_omx_output_ready.empty()) -- { -- pthread_mutex_lock(&m_omx_output_mutex); -- COpenMaxVideoBuffer *pic = m_omx_output_ready.front(); -- m_omx_output_ready.pop(); -- pthread_mutex_unlock(&m_omx_output_mutex); -- // return the omx buffer back to OpenMax to fill. -- ReturnOpenMaxBuffer(pic); -- } -+ SetDropState(true); -+ SetDropState(false); - #ifdef DTS_QUEUE - while (!m_dts_queue.empty()) - m_dts_queue.pop(); -@@ -822,6 +846,7 @@ void COpenMaxVideo::Reset(void) - - while (!m_demux_queue.empty()) - m_demux_queue.pop(); -+ m_startframe = false; - } - - -@@ -914,17 +939,17 @@ bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) - m_deinterlace_second_field = !m_deinterlace_second_field; - #endif - // nTimeStamp is in microseconds -- double ts = FromOMXTime(buffer->omx_buffer->nTimeStamp); -- pDvdVideoPicture->pts = (ts == 0) ? DVD_NOPTS_VALUE : ts; -+ pDvdVideoPicture->pts = FromOMXTime(buffer->omx_buffer->nTimeStamp); - pDvdVideoPicture->openMaxBuffer->Acquire(); - pDvdVideoPicture->iFlags = DVP_FLAG_ALLOCATED; -- if (buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_DATACORRUPT) -- pDvdVideoPicture->iFlags |= DVP_FLAG_DROPPED; -+ if (buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_PTS_INVALID) -+ pDvdVideoPicture->pts = DVD_NOPTS_VALUE; - #if defined(OMX_DEBUG_VERBOSE) - CLog::Log(LOGINFO, "%s::%s dts:%.3f pts:%.3f flags:%x:%x openMaxBuffer:%p omx_buffer:%p egl_image:%p texture_id:%x", CLASSNAME, __func__, - pDvdVideoPicture->dts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->dts*1e-6, pDvdVideoPicture->pts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->pts*1e-6, - pDvdVideoPicture->iFlags, buffer->omx_buffer->nFlags, pDvdVideoPicture->openMaxBuffer, pDvdVideoPicture->openMaxBuffer->omx_buffer, pDvdVideoPicture->openMaxBuffer->egl_image, pDvdVideoPicture->openMaxBuffer->texture_id); - #endif -+ assert(!(buffer->omx_buffer->nFlags & (OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED))); - } - else - { -@@ -953,10 +978,11 @@ OMX_ERRORTYPE COpenMaxVideo::DecoderFillBufferDone( - COpenMaxVideoBuffer *buffer = (COpenMaxVideoBuffer*)pBuffer->pAppPrivate; - - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - %p (%p,%p) buffer_size(%u), pts:%.3f", -- CLASSNAME, __func__, buffer, pBuffer, buffer->omx_buffer, pBuffer->nFilledLen, (double)FromOMXTime(buffer->omx_buffer->nTimeStamp)*1e-6); -+ CLog::Log(LOGDEBUG, "%s::%s - %p (%p,%p) buffer_size(%u), pts:%.3f flags:%x", -+ CLASSNAME, __func__, buffer, pBuffer, buffer->omx_buffer, pBuffer->nFilledLen, (double)FromOMXTime(buffer->omx_buffer->nTimeStamp)*1e-6, buffer->omx_buffer->nFlags); - #endif - -+ assert(!(buffer->omx_buffer->nFlags & (OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED))); - // queue output omx buffer to ready list. - pthread_mutex_lock(&m_omx_output_mutex); - buffer->m_aspect_ratio = m_aspect_ratio; -@@ -1000,41 +1026,60 @@ OMX_ERRORTYPE COpenMaxVideo::FreeOMXInputBuffers(void) - return(omx_err); - } - --bool COpenMaxVideo::CallbackAllocOMXEGLTextures(void *userdata) -+bool COpenMaxVideo::CallbackAllocOMXEGLTextures(EGLDisplay egl_display, EGLContext egl_context, void *userdata) - { - COpenMaxVideo *omx = static_cast<COpenMaxVideo*>(userdata); -- return omx->AllocOMXOutputEGLTextures() == OMX_ErrorNone; -+ return omx->AllocOMXOutputEGLTextures(egl_display, egl_context) == OMX_ErrorNone; - } - --bool COpenMaxVideo::CallbackFreeOMXEGLTextures(void *userdata) -+bool COpenMaxVideo::CallbackFreeOMXEGLTextures(EGLDisplay egl_display, EGLContext egl_context, void *userdata) - { - COpenMaxVideo *omx = static_cast<COpenMaxVideo*>(userdata); -- return omx->FreeOMXOutputEGLTextures() == OMX_ErrorNone; -+ return omx->FreeOMXOutputEGLTextures(egl_display, egl_context) == OMX_ErrorNone; - } - - bool COpenMaxVideo::AllocOMXOutputBuffers(void) - { -- return g_OMXImage.SendMessage(CallbackAllocOMXEGLTextures, (void *)this); -+ pthread_mutex_lock(&m_omx_output_mutex); -+ for (size_t i = 0; i < m_egl_buffer_count; i++) -+ { -+ COpenMaxVideoBuffer *egl_buffer = new COpenMaxVideoBuffer(this); -+ egl_buffer->width = m_decoded_width; -+ egl_buffer->height = m_decoded_height; -+ egl_buffer->index = i; -+ m_omx_output_buffers.push_back(egl_buffer); -+ } -+ bool ret = g_OMXImage.SendMessage(CallbackAllocOMXEGLTextures, (void *)this); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ return ret; - } - - bool COpenMaxVideo::FreeOMXOutputBuffers(void) - { -- return g_OMXImage.SendMessage(CallbackFreeOMXEGLTextures, (void *)this); -+ pthread_mutex_lock(&m_omx_output_mutex); -+ bool ret = g_OMXImage.SendMessage(CallbackFreeOMXEGLTextures, (void *)this); -+ -+ for (size_t i = 0; i < m_omx_output_buffers.size(); i++) -+ { -+ COpenMaxVideoBuffer *egl_buffer = m_omx_output_buffers[i]; -+ delete egl_buffer; -+ } -+ -+ m_omx_output_buffers.clear(); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ return ret; - } - --OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) -+OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(EGLDisplay egl_display, EGLContext egl_context) - { - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - EGLint attrib = EGL_NONE; -- COpenMaxVideoBuffer *egl_buffer; - - glActiveTexture(GL_TEXTURE0); - - for (size_t i = 0; i < m_egl_buffer_count; i++) - { -- egl_buffer = new COpenMaxVideoBuffer(this); -- egl_buffer->width = m_decoded_width; -- egl_buffer->height = m_decoded_height; -+ COpenMaxVideoBuffer *egl_buffer = m_omx_output_buffers[i]; - - glGenTextures(1, &egl_buffer->texture_id); - glBindTexture(GL_TEXTURE_2D, egl_buffer->texture_id); -@@ -1057,8 +1102,8 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - - // create EGLImage from texture - egl_buffer->egl_image = eglCreateImageKHR( -- m_egl_display, -- m_egl_context, -+ egl_display, -+ egl_context, - EGL_GL_TEXTURE_2D_KHR, - (EGLClientBuffer)(egl_buffer->texture_id), - &attrib); -@@ -1067,7 +1112,6 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - CLog::Log(LOGERROR, "%s::%s - ERROR creating EglImage", CLASSNAME, __func__); - return(OMX_ErrorUndefined); - } -- egl_buffer->index = i; - - // tell decoder output port that it will be using EGLImage - omx_err = m_omx_egl_render.UseEGLImage( -@@ -1078,7 +1122,6 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - CLASSNAME, __func__, omx_err); - return(omx_err); - } -- m_omx_output_buffers.push_back(egl_buffer); - - CLog::Log(LOGDEBUG, "%s::%s - Texture %p Width %d Height %d", - CLASSNAME, __func__, egl_buffer->egl_image, egl_buffer->width, egl_buffer->height); -@@ -1086,26 +1129,22 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void) - return omx_err; - } - --OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputEGLTextures(void) -+OMX_ERRORTYPE COpenMaxVideo::FreeOMXOutputEGLTextures(EGLDisplay egl_display, EGLContext egl_context) - { - OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- COpenMaxVideoBuffer *egl_buffer; - - for (size_t i = 0; i < m_omx_output_buffers.size(); i++) - { -- egl_buffer = m_omx_output_buffers[i]; -+ COpenMaxVideoBuffer *egl_buffer = m_omx_output_buffers[i]; - // tell decoder output port to stop using the EGLImage - omx_err = m_omx_egl_render.FreeOutputBuffer(egl_buffer->omx_buffer); - if (omx_err != OMX_ErrorNone) - CLog::Log(LOGERROR, "%s::%s m_omx_egl_render.FreeOutputBuffer(%p) omx_err(0x%08x)", CLASSNAME, __func__, egl_buffer->omx_buffer, omx_err); - // destroy egl_image -- eglDestroyImageKHR(m_egl_display, egl_buffer->egl_image); -+ eglDestroyImageKHR(egl_display, egl_buffer->egl_image); - // free texture - glDeleteTextures(1, &egl_buffer->texture_id); -- delete egl_buffer; - } -- m_omx_output_buffers.clear(); -- - return omx_err; - } - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index c8ad4d8..f234f6d 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -99,17 +99,13 @@ class COpenMaxVideo - OMX_ERRORTYPE FreeOMXInputBuffers(void); - bool AllocOMXOutputBuffers(void); - bool FreeOMXOutputBuffers(void); -- static bool CallbackAllocOMXEGLTextures(void*); -- OMX_ERRORTYPE AllocOMXOutputEGLTextures(void); -- static bool CallbackFreeOMXEGLTextures(void*); -- OMX_ERRORTYPE FreeOMXOutputEGLTextures(void); -+ static bool CallbackAllocOMXEGLTextures(EGLDisplay egl_display, EGLContext egl_context, void*); -+ OMX_ERRORTYPE AllocOMXOutputEGLTextures(EGLDisplay egl_display, EGLContext egl_context); -+ static bool CallbackFreeOMXEGLTextures(EGLDisplay egl_display, EGLContext egl_context, void*); -+ OMX_ERRORTYPE FreeOMXOutputEGLTextures(EGLDisplay egl_display, EGLContext egl_context); - OMX_ERRORTYPE StopDecoder(void); - OMX_ERRORTYPE ReturnOpenMaxBuffer(COpenMaxVideoBuffer *buffer); - -- // EGL Resources -- EGLDisplay m_egl_display; -- EGLContext m_egl_context; -- - // Video format - bool m_drop_state; - int m_decoded_width; -@@ -148,6 +144,8 @@ class COpenMaxVideo - EDEINTERLACEMODE m_deinterlace_request; - bool m_deinterlace_second_field; - -+ bool m_startframe; -+ - bool PortSettingsChanged(); - bool SendDecoderConfig(uint8_t *extradata, int extrasize); - bool NaluFormatStartCodes(enum AVCodecID codec, uint8_t *extradata, int extrasize); --- -1.9.3 - - -From 182b137323347482bfca46dbb857813e4f984298 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 1 Mar 2014 14:24:08 +0000 -Subject: [PATCH 52/94] [omxplayer] Allow small audio packets to be - concatenated to make better use of audio fifo - -Some audio codecs produce small packets which causes a high overhead when submitting to GPU, and doesn't make full use of GPU side buffering. -TrueHD in particular can produce packets with 40 samples (so 1200 packets per second) which causes very high overhead. - -What this aims to do is to concatenate audio packets until they approach the ideal audio packet size, -and then deal with the awkardness of concatenated planar formats. ---- - xbmc/cores/omxplayer/OMXAudio.cpp | 67 +++++++++++++++++++--------- - xbmc/cores/omxplayer/OMXAudio.h | 3 +- - xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp | 72 +++++++++++++++++++++---------- - xbmc/cores/omxplayer/OMXAudioCodecOMX.h | 9 +++- - xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 9 ++-- - 5 files changed, 110 insertions(+), 50 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp -index dd80412..e67dc94 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXAudio.cpp -@@ -43,6 +43,10 @@ - - using namespace std; - -+// the size of the audio_render output port buffers -+#define AUDIO_DECODE_OUTPUT_BUFFER (32*1024) -+static const char rounded_up_channels_shift[] = {0,0,1,2,2,3,3,3,3}; -+ - static const uint16_t AC3Bitrates[] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 576, 640}; - static const uint16_t AC3FSCod [] = {48000, 44100, 32000, 0}; - -@@ -61,6 +65,7 @@ COMXAudio::COMXAudio() : - m_Passthrough (false ), - m_HWDecode (false ), - m_BytesPerSec (0 ), -+ m_InputBytesPerSec(0 ), - m_BufferLen (0 ), - m_ChunkLen (0 ), - m_InputChannels (0 ), -@@ -490,11 +495,15 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo - - m_SampleRate = m_format.m_sampleRate; - m_BitsPerSample = CAEUtil::DataFormatToBits(m_format.m_dataFormat); -- m_BufferLen = m_BytesPerSec = m_format.m_sampleRate * (16 >> 3) * m_InputChannels; -- m_BufferLen *= AUDIO_BUFFER_SECONDS; -+ m_BytesPerSec = m_SampleRate * 2 << rounded_up_channels_shift[m_InputChannels]; -+ m_BufferLen = m_BytesPerSec * AUDIO_BUFFER_SECONDS; -+ m_InputBytesPerSec = m_SampleRate * m_BitsPerSample * m_InputChannels >> 3; -+ -+ // should be big enough that common formats (e.g. 6 channel DTS) fit in a single packet. -+ // we don't mind less common formats being split (e.g. ape/wma output large frames) - // the audio_decode output buffer size is 32K, and typically we convert from -- // 6 channel 32bpp float to 8 channel 16bpp in, so a full 48K input buffer will fit the outbut buffer -- m_ChunkLen = 48*1024; -+ // 6 channel 32bpp float to 8 channel 16bpp in, so a full 48K input buffer will fit the output buffer -+ m_ChunkLen = AUDIO_DECODE_OUTPUT_BUFFER * (m_InputChannels * m_BitsPerSample) >> (rounded_up_channels_shift[m_InputChannels] + 4); - - m_wave_header.Samples.wSamplesPerBlock = 0; - m_wave_header.Format.nChannels = m_InputChannels; -@@ -682,7 +691,7 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo - m_maxLevel = 0.0f; - - CLog::Log(LOGDEBUG, "COMXAudio::Initialize Input bps %d samplerate %d channels %d buffer size %d bytes per second %d", -- (int)m_pcm_input.nBitPerSample, (int)m_pcm_input.nSamplingRate, (int)m_pcm_input.nChannels, m_BufferLen, m_BytesPerSec); -+ (int)m_pcm_input.nBitPerSample, (int)m_pcm_input.nSamplingRate, (int)m_pcm_input.nChannels, m_BufferLen, m_InputBytesPerSec); - PrintPCM(&m_pcm_input, std::string("input")); - CLog::Log(LOGDEBUG, "COMXAudio::Initialize device passthrough %d hwdecode %d", - m_Passthrough, m_HWDecode); -@@ -865,11 +874,11 @@ bool COMXAudio::ApplyVolume(void) - //*********************************************************************************************** - unsigned int COMXAudio::AddPackets(const void* data, unsigned int len) - { -- return AddPackets(data, len, 0, 0); -+ return AddPackets(data, len, 0, 0, 0); - } - - //*********************************************************************************************** --unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dts, double pts) -+unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dts, double pts, unsigned int frame_size) - { - CSingleLock lock (m_critSection); - -@@ -916,24 +925,40 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt - omx_buffer->nOffset = 0; - omx_buffer->nFlags = 0; - -+ // we want audio_decode output buffer size to be no more than AUDIO_DECODE_OUTPUT_BUFFER. -+ // it will be 16-bit and rounded up to next power of 2 in channels -+ unsigned int max_buffer = AUDIO_DECODE_OUTPUT_BUFFER * (m_InputChannels * m_BitsPerSample) >> (rounded_up_channels_shift[m_InputChannels] + 4); -+ - unsigned int remaining = demuxer_samples-demuxer_samples_sent; -- unsigned int samples_space = omx_buffer->nAllocLen/pitch; -+ unsigned int samples_space = std::min(max_buffer, omx_buffer->nAllocLen)/pitch; - unsigned int samples = std::min(remaining, samples_space); - - omx_buffer->nFilledLen = samples * pitch; - -- if (samples < demuxer_samples && m_BitsPerSample==32 && !(m_Passthrough || m_HWDecode)) -+ unsigned int frames = frame_size ? len/frame_size:0; -+ if ((samples < demuxer_samples || frames > 1) && m_BitsPerSample==32 && !(m_Passthrough || m_HWDecode)) - { -- uint8_t *dst = omx_buffer->pBuffer; -- uint8_t *src = demuxer_content + demuxer_samples_sent * (m_BitsPerSample >> 3); -- // we need to extract samples from planar audio, so the copying needs to be done per plane -- for (int i=0; i<(int)m_InputChannels; i++) -- { -- memcpy(dst, src, omx_buffer->nFilledLen / m_InputChannels); -- dst += omx_buffer->nFilledLen / m_InputChannels; -- src += demuxer_samples * (m_BitsPerSample >> 3); -- } -- assert(dst <= omx_buffer->pBuffer + m_ChunkLen); -+ const unsigned int sample_pitch = m_BitsPerSample >> 3; -+ const unsigned int frame_samples = frame_size / pitch; -+ const unsigned int plane_size = frame_samples * sample_pitch; -+ const unsigned int out_plane_size = samples * sample_pitch; -+ //CLog::Log(LOGDEBUG, "%s::%s samples:%d/%d ps:%d ops:%d fs:%d pitch:%d filled:%d frames=%d", CLASSNAME, __func__, samples, demuxer_samples, plane_size, out_plane_size, frame_size, pitch, omx_buffer->nFilledLen, frames); -+ for (unsigned int sample = 0; sample < samples; ) -+ { -+ unsigned int frame = (demuxer_samples_sent + sample) / frame_samples; -+ unsigned int sample_in_frame = (demuxer_samples_sent + sample) - frame * frame_samples; -+ int out_remaining = std::min(std::min(frame_samples - sample_in_frame, samples), samples-sample); -+ uint8_t *src = demuxer_content + frame*frame_size + sample_in_frame * sample_pitch; -+ uint8_t *dst = (uint8_t *)omx_buffer->pBuffer + sample * sample_pitch; -+ for (unsigned int channel = 0; channel < m_InputChannels; channel++) -+ { -+ //CLog::Log(LOGDEBUG, "%s::%s copy(%d,%d,%d) (s:%d f:%d sin:%d c:%d)", CLASSNAME, __func__, dst-(uint8_t *)omx_buffer->pBuffer, src-demuxer_content, out_remaining, sample, frame, sample_in_frame, channel); -+ memcpy(dst, src, out_remaining * sample_pitch); -+ src += plane_size; -+ dst += out_plane_size; -+ } -+ sample += out_remaining; -+ } - } - else - { -@@ -1114,7 +1139,9 @@ float COMXAudio::GetCacheTime() - - float COMXAudio::GetCacheTotal() - { -- return m_BytesPerSec ? (float)m_BufferLen / (float)m_BytesPerSec : 0.0f; -+ float audioplus_buffer = m_SampleRate ? 0.0f : 32.0f * 512.0f / m_SampleRate; -+ float input_buffer = (float)m_omx_decoder.GetInputBufferSize() / (float)m_InputBytesPerSec; -+ return AUDIO_BUFFER_SECONDS + input_buffer + audioplus_buffer; - } - - //*********************************************************************************************** -diff --git a/xbmc/cores/omxplayer/OMXAudio.h b/xbmc/cores/omxplayer/OMXAudio.h -index 804bd2a..b0264d8 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.h -+++ b/xbmc/cores/omxplayer/OMXAudio.h -@@ -66,7 +66,7 @@ class COMXAudio - ~COMXAudio(); - - unsigned int AddPackets(const void* data, unsigned int len); -- unsigned int AddPackets(const void* data, unsigned int len, double dts, double pts); -+ unsigned int AddPackets(const void* data, unsigned int len, double dts, double pts, unsigned int frame_size); - unsigned int GetSpace(); - bool Deinitialize(); - -@@ -114,6 +114,7 @@ class COMXAudio - bool m_Passthrough; - bool m_HWDecode; - unsigned int m_BytesPerSec; -+ unsigned int m_InputBytesPerSec; - unsigned int m_BufferLen; - unsigned int m_ChunkLen; - unsigned int m_InputChannels; -diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -index 5503a0e..557e847 100644 ---- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -@@ -26,10 +26,15 @@ - - #include "cores/AudioEngine/Utils/AEUtil.h" - -+// the size of the audio_render output port buffers -+#define AUDIO_DECODE_OUTPUT_BUFFER (32*1024) -+static const char rounded_up_channels_shift[] = {0,0,1,2,2,3,3,3,3}; -+ - COMXAudioCodecOMX::COMXAudioCodecOMX() - { - m_pBufferOutput = NULL; - m_iBufferOutputAlloced = 0; -+ m_iBufferOutputUsed = 0; - - m_pCodecContext = NULL; - m_pConvert = NULL; -@@ -37,7 +42,10 @@ COMXAudioCodecOMX::COMXAudioCodecOMX() - - m_channels = 0; - m_pFrame1 = NULL; -+ m_frameSize = 0; - m_bGotFrame = false; -+ m_bNoConcatenate = false; -+ - m_iSampleFormat = AV_SAMPLE_FMT_NONE; - m_desiredSampleFormat = AV_SAMPLE_FMT_NONE; - } -@@ -47,6 +55,7 @@ COMXAudioCodecOMX::~COMXAudioCodecOMX() - m_dllAvUtil.av_free(m_pBufferOutput); - m_pBufferOutput = NULL; - m_iBufferOutputAlloced = 0; -+ m_iBufferOutputUsed = 0; - Dispose(); - } - -@@ -83,6 +92,10 @@ bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints) - m_pCodecContext->bit_rate = hints.bitrate; - m_pCodecContext->bits_per_coded_sample = hints.bitspersample; - -+ // vorbis has variable sized planar output, so skip concatenation -+ if (hints.codec == AV_CODEC_ID_VORBIS) -+ m_bNoConcatenate = true; -+ - if(m_pCodecContext->bits_per_coded_sample == 0) - m_pCodecContext->bits_per_coded_sample = 16; - -@@ -132,7 +145,7 @@ void COMXAudioCodecOMX::Dispose() - m_bGotFrame = false; - } - --int COMXAudioCodecOMX::Decode(BYTE* pData, int iSize) -+int COMXAudioCodecOMX::Decode(BYTE* pData, int iSize, double dts, double pts) - { - int iBytesUsed, got_frame; - if (!m_pCodecContext) return -1; -@@ -167,10 +180,15 @@ int COMXAudioCodecOMX::Decode(BYTE* pData, int iSize) - } - - m_bGotFrame = true; -+ if (!m_iBufferOutputUsed) -+ { -+ m_dts = dts; -+ m_pts = pts; -+ } - return iBytesUsed; - } - --int COMXAudioCodecOMX::GetData(BYTE** dst) -+int COMXAudioCodecOMX::GetData(BYTE** dst, double &dts, double &pts) - { - if (!m_bGotFrame) - return 0; -@@ -179,13 +197,11 @@ int COMXAudioCodecOMX::GetData(BYTE** dst) - int inputSize = m_dllAvUtil.av_samples_get_buffer_size(&inLineSize, m_pCodecContext->channels, m_pFrame1->nb_samples, m_pCodecContext->sample_fmt, 0); - /* output audio will be packed */ - int outputSize = m_dllAvUtil.av_samples_get_buffer_size(&outLineSize, m_pCodecContext->channels, m_pFrame1->nb_samples, m_desiredSampleFormat, 1); -- bool cont = !m_pFrame1->data[1] || (m_pFrame1->data[1] == m_pFrame1->data[0] + inLineSize && inLineSize == outLineSize && inLineSize * m_pCodecContext->channels == inputSize); - -- if (m_iBufferOutputAlloced < outputSize) -+ if (m_iBufferOutputAlloced < m_iBufferOutputUsed + outputSize) - { -- m_dllAvUtil.av_free(m_pBufferOutput); -- m_pBufferOutput = (BYTE*)m_dllAvUtil.av_malloc(outputSize + FF_INPUT_BUFFER_PADDING_SIZE); -- m_iBufferOutputAlloced = outputSize; -+ m_pBufferOutput = (BYTE*)m_dllAvUtil.av_realloc(m_pBufferOutput, m_iBufferOutputUsed + outputSize + FF_INPUT_BUFFER_PADDING_SIZE); -+ m_iBufferOutputAlloced = m_iBufferOutputUsed + outputSize; - } - *dst = m_pBufferOutput; - -@@ -217,7 +233,7 @@ int COMXAudioCodecOMX::GetData(BYTE** dst) - - /* use unaligned flag to keep output packed */ - uint8_t *out_planes[m_pCodecContext->channels]; -- if(m_dllAvUtil.av_samples_fill_arrays(out_planes, NULL, m_pBufferOutput, m_pCodecContext->channels, m_pFrame1->nb_samples, m_desiredSampleFormat, 1) < 0 || -+ if(m_dllAvUtil.av_samples_fill_arrays(out_planes, NULL, m_pBufferOutput + m_iBufferOutputUsed, m_pCodecContext->channels, m_pFrame1->nb_samples, m_desiredSampleFormat, 1) < 0 || - m_dllSwResample.swr_convert(m_pConvert, out_planes, m_pFrame1->nb_samples, (const uint8_t **)m_pFrame1->data, m_pFrame1->nb_samples) < 0) - { - CLog::Log(LOGERROR, "COMXAudioCodecOMX::Decode - Unable to convert format %d to %d", (int)m_pCodecContext->sample_fmt, m_desiredSampleFormat); -@@ -226,35 +242,45 @@ int COMXAudioCodecOMX::GetData(BYTE** dst) - } - else - { -- /* if it is already contiguous, just return decoded frame */ -- if (cont) -- { -- *dst = m_pFrame1->data[0]; -- } -- else -+ /* copy to a contiguous buffer */ -+ uint8_t *out_planes[m_pCodecContext->channels]; -+ if (m_dllAvUtil.av_samples_fill_arrays(out_planes, NULL, m_pBufferOutput + m_iBufferOutputUsed, m_pCodecContext->channels, m_pFrame1->nb_samples, m_desiredSampleFormat, 1) < 0 || -+ m_dllAvUtil.av_samples_copy(out_planes, m_pFrame1->data, 0, 0, m_pFrame1->nb_samples, m_pCodecContext->channels, m_desiredSampleFormat) < 0 ) - { -- /* copy to a contiguous buffer */ -- uint8_t *out_planes[m_pCodecContext->channels]; -- if (m_dllAvUtil.av_samples_fill_arrays(out_planes, NULL, m_pBufferOutput, m_pCodecContext->channels, m_pFrame1->nb_samples, m_desiredSampleFormat, 1) < 0 || -- m_dllAvUtil.av_samples_copy(out_planes, m_pFrame1->data, 0, 0, m_pFrame1->nb_samples, m_pCodecContext->channels, m_desiredSampleFormat) < 0 ) -- { -- outputSize = 0; -- } -+ outputSize = 0; - } - } -+ int desired_size = AUDIO_DECODE_OUTPUT_BUFFER * (m_pCodecContext->channels * GetBitsPerSample()) >> (rounded_up_channels_shift[m_pCodecContext->channels] + 4); - - if (m_bFirstFrame) - { -- CLog::Log(LOGDEBUG, "COMXAudioCodecOMX::GetData size=%d/%d line=%d/%d cont=%d buf=%p", inputSize, outputSize, inLineSize, outLineSize, cont, *dst); -+ CLog::Log(LOGDEBUG, "COMXAudioCodecOMX::GetData size=%d/%d line=%d/%d buf=%p, desired=%d", inputSize, outputSize, inLineSize, outLineSize, *dst, desired_size); - m_bFirstFrame = false; - } -- return outputSize; -+ m_iBufferOutputUsed += outputSize; -+ -+ if (!m_bNoConcatenate && m_pCodecContext->sample_fmt == AV_SAMPLE_FMT_FLTP && m_frameSize && (int)m_frameSize != outputSize) -+ CLog::Log(LOGERROR, "COMXAudioCodecOMX::GetData Unexpected change of size (%d->%d)", m_frameSize, outputSize); -+ m_frameSize = outputSize; -+ -+ // if next buffer submitted won't fit then flush it out -+ if (m_iBufferOutputUsed + outputSize > desired_size || m_bNoConcatenate) -+ { -+ int ret = m_iBufferOutputUsed; -+ m_bGotFrame = false; -+ m_iBufferOutputUsed = 0; -+ dts = m_dts; -+ pts = m_pts; -+ return ret; -+ } -+ return 0; - } - - void COMXAudioCodecOMX::Reset() - { - if (m_pCodecContext) m_dllAvCodec.avcodec_flush_buffers(m_pCodecContext); - m_bGotFrame = false; -+ m_iBufferOutputUsed = 0; - } - - int COMXAudioCodecOMX::GetChannels() -diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.h b/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -index 343465c..66e5b4a 100644 ---- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -@@ -36,8 +36,8 @@ class COMXAudioCodecOMX - virtual ~COMXAudioCodecOMX(); - bool Open(CDVDStreamInfo &hints); - void Dispose(); -- int Decode(BYTE* pData, int iSize); -- int GetData(BYTE** dst); -+ int Decode(BYTE* pData, int iSize, double dts, double pts); -+ int GetData(BYTE** dst, double &dts, double &pts); - void Reset(); - int GetChannels(); - uint64_t GetChannelMap(); -@@ -45,6 +45,7 @@ class COMXAudioCodecOMX - int GetBitsPerSample(); - static const char* GetName() { return "FFmpeg"; } - int GetBitRate(); -+ unsigned int GetFrameSize() { return m_frameSize; } - - protected: - AVCodecContext* m_pCodecContext; -@@ -55,6 +56,7 @@ class COMXAudioCodecOMX - AVFrame* m_pFrame1; - - BYTE *m_pBufferOutput; -+ int m_iBufferOutputUsed; - int m_iBufferOutputAlloced; - - bool m_bOpenedCodec; -@@ -63,6 +65,9 @@ class COMXAudioCodecOMX - - bool m_bFirstFrame; - bool m_bGotFrame; -+ bool m_bNoConcatenate; -+ unsigned int m_frameSize; -+ double m_dts, m_pts; - DllAvCodec m_dllAvCodec; - DllAvUtil m_dllAvUtil; - DllSwResample m_dllSwResample; -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -index 8219015..a4c11777 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -@@ -227,9 +227,10 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - - if(!OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket) - { -+ double dts = pkt->dts, pts=pkt->pts; - while(!m_bStop && data_len > 0) - { -- int len = m_pAudioCodec->Decode((BYTE *)data_dec, data_len); -+ int len = m_pAudioCodec->Decode((BYTE *)data_dec, data_len, dts, pts); - if( (len < 0) || (len > data_len) ) - { - m_pAudioCodec->Reset(); -@@ -240,7 +241,7 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - data_len -= len; - - uint8_t *decoded; -- int decoded_size = m_pAudioCodec->GetData(&decoded); -+ int decoded_size = m_pAudioCodec->GetData(&decoded, dts, pts); - - if(decoded_size <=0) - continue; -@@ -274,7 +275,7 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - if(m_silence) - memset(decoded, 0x0, decoded_size); - -- ret = m_omxAudio.AddPackets(decoded, decoded_size, m_audioClock, m_audioClock); -+ ret = m_omxAudio.AddPackets(decoded, decoded_size, dts, pts, m_pAudioCodec->GetFrameSize()); - - if(ret != decoded_size) - { -@@ -312,7 +313,7 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - if(m_silence) - memset(pkt->pData, 0x0, pkt->iSize); - -- m_omxAudio.AddPackets(pkt->pData, pkt->iSize, m_audioClock, m_audioClock); -+ m_omxAudio.AddPackets(pkt->pData, pkt->iSize, m_audioClock, m_audioClock, 0); - } - - m_audioStats.AddSampleBytes(pkt->iSize); --- -1.9.3 - - -From 10a9d6134a624bf59096831851ee12191f658da1 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 5 Mar 2014 22:10:01 +0000 -Subject: [PATCH 53/94] [omxplayer] Use media for determing audio delay and - cache time - -I've also added caching to the call to OMXMediaTime as the GPU round trip is expensive when called too frequently ---- - xbmc/cores/omxplayer/OMXAudio.cpp | 33 ++++++++++++++------- - xbmc/linux/OMXClock.cpp | 62 +++++++++++++++++++++++++++------------ - xbmc/linux/OMXClock.h | 2 ++ - 3 files changed, 68 insertions(+), 29 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp -index e67dc94..3e64de0 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXAudio.cpp -@@ -1118,29 +1118,40 @@ void COMXAudio::UpdateAttenuation() - //*********************************************************************************************** - unsigned int COMXAudio::GetSpace() - { -- int free = m_omx_decoder.GetInputBufferSpace(); -- return free; -+ return m_omx_decoder.GetInputBufferSpace(); - } - - float COMXAudio::GetDelay() - { -- unsigned int free = m_omx_decoder.GetInputBufferSize() - m_omx_decoder.GetInputBufferSpace(); -- return m_BytesPerSec ? (float)free / (float)m_BytesPerSec : 0.0f; -+ CSingleLock lock (m_critSection); -+ double stamp = DVD_NOPTS_VALUE; -+ double ret = 0.0; -+ if (m_last_pts != DVD_NOPTS_VALUE && m_av_clock) -+ stamp = m_av_clock->OMXMediaTime(); -+ // if possible the delay is current media time - time of last submitted packet -+ if (stamp != DVD_NOPTS_VALUE) -+ { -+ ret = (m_last_pts - stamp) * (1.0 / DVD_TIME_BASE); -+ //CLog::Log(LOGINFO, "%s::%s - %.2f %.0f %.0f", CLASSNAME, __func__, ret, stamp, m_last_pts); -+ } -+ else // just measure the input fifo -+ { -+ unsigned int used = m_omx_decoder.GetInputBufferSize() - m_omx_decoder.GetInputBufferSpace(); -+ float ret = m_InputBytesPerSec ? (float)used / (float)m_InputBytesPerSec : 0.0f; -+ //CLog::Log(LOGINFO, "%s::%s - %.2f %d, %d, %d", CLASSNAME, __func__, ret, used, m_omx_decoder.GetInputBufferSize(), m_omx_decoder.GetInputBufferSpace()); -+ } -+ return ret; - } - - float COMXAudio::GetCacheTime() - { -- float fBufferLenFull = (float)m_BufferLen - (float)GetSpace(); -- if(fBufferLenFull < 0) -- fBufferLenFull = 0; -- float ret = m_BytesPerSec ? fBufferLenFull / (float)m_BytesPerSec : 0.0f; -- return ret; -+ return GetDelay(); - } - - float COMXAudio::GetCacheTotal() - { -- float audioplus_buffer = m_SampleRate ? 0.0f : 32.0f * 512.0f / m_SampleRate; -- float input_buffer = (float)m_omx_decoder.GetInputBufferSize() / (float)m_InputBytesPerSec; -+ float audioplus_buffer = m_SampleRate ? 32.0f * 512.0f / m_SampleRate : 0.0f; -+ float input_buffer = m_InputBytesPerSec ? (float)m_omx_decoder.GetInputBufferSize() / (float)m_InputBytesPerSec : 0; - return AUDIO_BUFFER_SECONDS + input_buffer + audioplus_buffer; - } - -diff --git a/xbmc/linux/OMXClock.cpp b/xbmc/linux/OMXClock.cpp -index 241657b..bee7bac 100644 ---- a/xbmc/linux/OMXClock.cpp -+++ b/xbmc/linux/OMXClock.cpp -@@ -45,6 +45,8 @@ OMXClock::OMXClock() - m_eState = OMX_TIME_ClockStateStopped; - m_eClock = OMX_TIME_RefClockNone; - m_clock = NULL; -+ m_last_media_time = 0.0f; -+ m_last_media_time_read = 0.0f; - - pthread_mutex_init(&m_lock, NULL); - } -@@ -113,6 +115,7 @@ bool OMXClock::OMXSetReferenceClock(bool has_audio, bool lock /* = true */) - } - m_eClock = refClock.eClock; - } -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -142,6 +145,7 @@ void OMXClock::OMXDeinitialize() - m_omx_clock.Deinitialize(); - - m_omx_speed = DVD_PLAYSPEED_NORMAL; -+ m_last_media_time = 0.0f; - } - - bool OMXClock::OMXStateExecute(bool lock /* = true */) -@@ -169,6 +173,7 @@ bool OMXClock::OMXStateExecute(bool lock /* = true */) - } - } - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -186,6 +191,7 @@ void OMXClock::OMXStateIdle(bool lock /* = true */) - if(m_omx_clock.GetState() != OMX_StateIdle) - m_omx_clock.SetStateForComponent(OMX_StateIdle); - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - } -@@ -222,6 +228,7 @@ bool OMXClock::OMXStop(bool lock /* = true */) - } - m_eState = clock.eState; - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -252,6 +259,7 @@ bool OMXClock::OMXStep(int steps /* = 1 */, bool lock /* = true */) - return false; - } - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -302,6 +310,7 @@ bool OMXClock::OMXReset(bool has_video, bool has_audio, bool lock /* = true */) - } - } - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -310,33 +319,45 @@ bool OMXClock::OMXReset(bool has_video, bool has_audio, bool lock /* = true */) - - double OMXClock::OMXMediaTime(bool lock /* = true */) - { -+ double pts = 0.0; - if(m_omx_clock.GetComponent() == NULL) - return 0; - -- if(lock) -- Lock(); -+ double now = GetAbsoluteClock(); -+ if (now - m_last_media_time_read > DVD_MSEC_TO_TIME(100) || m_last_media_time == 0.0) -+ { -+ if(lock) -+ Lock(); - -- OMX_ERRORTYPE omx_err = OMX_ErrorNone; -- double pts = 0; -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; - -- OMX_TIME_CONFIG_TIMESTAMPTYPE timeStamp; -- OMX_INIT_STRUCTURE(timeStamp); -- timeStamp.nPortIndex = m_omx_clock.GetInputPort(); -+ OMX_TIME_CONFIG_TIMESTAMPTYPE timeStamp; -+ OMX_INIT_STRUCTURE(timeStamp); -+ timeStamp.nPortIndex = m_omx_clock.GetInputPort(); -+ -+ omx_err = m_omx_clock.GetConfig(OMX_IndexConfigTimeCurrentMediaTime, &timeStamp); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "OMXClock::MediaTime error getting OMX_IndexConfigTimeCurrentMediaTime\n"); -+ if(lock) -+ UnLock(); -+ return 0; -+ } -+ -+ pts = FromOMXTime(timeStamp.nTimestamp); -+ //CLog::Log(LOGINFO, "OMXClock::MediaTime %.2f (%.2f, %.2f)", pts, m_last_media_time, now - m_last_media_time_read); -+ m_last_media_time = pts; -+ m_last_media_time_read = now; - -- omx_err = m_omx_clock.GetConfig(OMX_IndexConfigTimeCurrentMediaTime, &timeStamp); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "OMXClock::MediaTime error getting OMX_IndexConfigTimeCurrentMediaTime\n"); - if(lock) - UnLock(); -- return 0; - } -- -- pts = FromOMXTime(timeStamp.nTimestamp); -- -- if(lock) -- UnLock(); -- -+ else -+ { -+ double speed = m_pause ? 0.0 : (double)m_omx_speed / DVD_PLAYSPEED_NORMAL; -+ pts = m_last_media_time + (now - m_last_media_time_read) * speed; -+ //CLog::Log(LOGINFO, "OMXClock::MediaTime cached %.2f (%.2f, %.2f)", pts, m_last_media_time, now - m_last_media_time_read); -+ } - return pts; - } - -@@ -409,6 +430,7 @@ bool OMXClock::OMXMediaTime(double pts, bool lock /* = true*/) - CLog::Log(LOGDEBUG, "OMXClock::OMXMediaTime set config %s = %.2f", index == OMX_IndexConfigTimeCurrentAudioReference ? - "OMX_IndexConfigTimeCurrentAudioReference":"OMX_IndexConfigTimeCurrentVideoReference", pts); - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -428,6 +450,7 @@ bool OMXClock::OMXPause(bool lock /* = true */) - if (OMXSetSpeed(0, false, true)) - m_pause = true; - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - } -@@ -447,6 +470,7 @@ bool OMXClock::OMXResume(bool lock /* = true */) - if (OMXSetSpeed(m_omx_speed, false, true)) - m_pause = false; - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - } -@@ -485,6 +509,7 @@ bool OMXClock::OMXSetSpeed(int speed, bool lock /* = true */, bool pause_resume - if (!pause_resume) - m_omx_speed = speed; - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -@@ -521,6 +546,7 @@ bool OMXClock::HDMIClockSync(bool lock /* = true */) - return false; - } - -+ m_last_media_time = 0.0f; - if(lock) - UnLock(); - -diff --git a/xbmc/linux/OMXClock.h b/xbmc/linux/OMXClock.h -index d7d06fe..f83074a 100644 ---- a/xbmc/linux/OMXClock.h -+++ b/xbmc/linux/OMXClock.h -@@ -58,6 +58,8 @@ class OMXClock - CDVDClock *m_clock; - private: - COMXCoreComponent m_omx_clock; -+ double m_last_media_time; -+ double m_last_media_time_read; - public: - OMXClock(); - ~OMXClock(); --- -1.9.3 - - -From 29c5c42b2f5be546c242bc8ef02dc06a8dd0fd17 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 3 Mar 2014 22:24:19 +0000 -Subject: [PATCH 54/94] [omx] Skip the resize when not needed when decoding - jpegs - -The decode to texture path almost always uses cached jpegs that are the correct size, so the resize is rarely needed. -The re-enc path usually needs resizing, but may not where the source is small. - -Skipping the resize stage saves a little time and memory on GPU and also saves some setup time. ---- - xbmc/cores/omxplayer/OMXImage.cpp | 262 ++++++++++++++++++++++---------------- - 1 file changed, 152 insertions(+), 110 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXImage.cpp b/xbmc/cores/omxplayer/OMXImage.cpp -index 4456fdb..262a004 100644 ---- a/xbmc/cores/omxplayer/OMXImage.cpp -+++ b/xbmc/cores/omxplayer/OMXImage.cpp -@@ -1477,9 +1477,22 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned - return false; - } - -+ if (resize_width != port_def.format.image.nFrameWidth || resize_height != port_def.format.image.nFrameHeight || (orientation & 4)) -+ { -+ if(!m_omx_resize.Initialize("OMX.broadcom.resize", OMX_IndexParamImageInit)) -+ { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_resize.Initialize\n", CLASSNAME, __func__); -+ return false; -+ } -+ } -+ - // TODO: jpeg decoder can decimate by factors of 2 - port_def.format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar; -- port_def.format.image.nSliceHeight = 16;//(port_def.format.image.nFrameHeight+15) & ~15; -+ if (m_omx_resize.IsInitialized()) -+ port_def.format.image.nSliceHeight = 16; -+ else -+ port_def.format.image.nSliceHeight = (resize_height+15) & ~15; -+ - port_def.format.image.nStride = 0; - - m_omx_decoder.SetParameter(OMX_IndexParamPortDefinition, &port_def); -@@ -1489,38 +1502,35 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned - return false; - } - -- if(!m_omx_resize.Initialize("OMX.broadcom.resize", OMX_IndexParamImageInit)) -+ if (m_omx_resize.IsInitialized()) - { -- CLog::Log(LOGERROR, "%s::%s error m_omx_resize.Initialize\n", CLASSNAME, __func__); -- return false; -- } -- -- port_def.nPortIndex = m_omx_resize.GetInputPort(); -+ port_def.nPortIndex = m_omx_resize.GetInputPort(); - -- m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -- } -+ m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } - -- port_def.nPortIndex = m_omx_resize.GetOutputPort(); -- m_omx_resize.GetParameter(OMX_IndexParamPortDefinition, &port_def); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.GetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -- } -- port_def.format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar; -- port_def.format.image.nFrameWidth = resize_width; -- port_def.format.image.nFrameHeight = resize_height; -- port_def.format.image.nSliceHeight = (resize_height+15) & ~15; -- port_def.format.image.nStride = 0; -- m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -+ port_def.nPortIndex = m_omx_resize.GetOutputPort(); -+ m_omx_resize.GetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.GetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ port_def.format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar; -+ port_def.format.image.nFrameWidth = resize_width; -+ port_def.format.image.nFrameHeight = resize_height; -+ port_def.format.image.nSliceHeight = (resize_height+15) & ~15; -+ port_def.format.image.nStride = 0; -+ m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } - } - - if(!m_omx_encoder.Initialize("OMX.broadcom.image_encode", OMX_IndexParamImageInit)) -@@ -1621,31 +1631,44 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned - return false; - } - -- m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort()); -- -- omx_err = m_omx_tunnel_decode.Establish(); -- if(omx_err != OMX_ErrorNone) -+ if (m_omx_resize.IsInitialized()) - { -- CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish\n", CLASSNAME, __func__); -- return false; -- } -+ m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort()); - -- m_omx_tunnel_resize.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_encoder, m_omx_encoder.GetInputPort()); -+ omx_err = m_omx_tunnel_decode.Establish(); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish\n", CLASSNAME, __func__); -+ return false; -+ } - -- omx_err = m_omx_tunnel_resize.Establish(); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_resize.Establish\n", CLASSNAME, __func__); -- return false; -- } -+ m_omx_tunnel_resize.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_encoder, m_omx_encoder.GetInputPort()); - -- omx_err = m_omx_resize.SetStateForComponent(OMX_StateExecuting); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetStateForComponent result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -+ omx_err = m_omx_tunnel_resize.Establish(); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_resize.Establish\n", CLASSNAME, __func__); -+ return false; -+ } -+ -+ omx_err = m_omx_resize.SetStateForComponent(OMX_StateExecuting); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetStateForComponent result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } - } -+ else -+ { -+ m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_encoder, m_omx_encoder.GetInputPort()); - -+ omx_err = m_omx_tunnel_decode.Establish(); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish\n", CLASSNAME, __func__); -+ return false; -+ } -+ } - omx_err = m_omx_encoder.SetStateForComponent(OMX_StateExecuting); - if (omx_err != OMX_ErrorNone) - { -@@ -1662,24 +1685,27 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned - // a little surprising, make a note - CLog::Log(LOGDEBUG, "%s::%s m_omx_resize second port changed event\n", CLASSNAME, __func__); - m_omx_decoder.DisablePort(m_omx_decoder.GetOutputPort(), true); -- m_omx_resize.DisablePort(m_omx_resize.GetInputPort(), true); -+ if (m_omx_resize.IsInitialized()) -+ { -+ m_omx_resize.DisablePort(m_omx_resize.GetInputPort(), true); - -- OMX_PARAM_PORTDEFINITIONTYPE port_def; -- OMX_INIT_STRUCTURE(port_def); -+ OMX_PARAM_PORTDEFINITIONTYPE port_def; -+ OMX_INIT_STRUCTURE(port_def); - -- port_def.nPortIndex = m_omx_decoder.GetOutputPort(); -- m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition, &port_def); -- port_def.nPortIndex = m_omx_resize.GetInputPort(); -- m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ port_def.nPortIndex = m_omx_decoder.GetOutputPort(); -+ m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition, &port_def); -+ port_def.nPortIndex = m_omx_resize.GetInputPort(); -+ m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); - -- omx_err = m_omx_resize.WaitForEvent(OMX_EventPortSettingsChanged); -- if(omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.WaitForEvent=%x\n", CLASSNAME, __func__, omx_err); -- return false; -+ omx_err = m_omx_resize.WaitForEvent(OMX_EventPortSettingsChanged); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.WaitForEvent=%x\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ m_omx_resize.EnablePort(m_omx_resize.GetInputPort(), true); - } - m_omx_decoder.EnablePort(m_omx_decoder.GetOutputPort(), true); -- m_omx_resize.EnablePort(m_omx_resize.GetInputPort(), true); - } - return true; - } -@@ -1918,42 +1944,45 @@ bool COMXTexture::HandlePortSettingChange(unsigned int resize_width, unsigned in - CLog::Log(LOGERROR, "%s::%s m_omx_decoder.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); - return false; - } -- -- if (!m_omx_resize.Initialize("OMX.broadcom.resize", OMX_IndexParamImageInit)) -+ if (resize_width != port_def.format.image.nFrameWidth || resize_height != port_def.format.image.nFrameHeight) - { -- CLog::Log(LOGERROR, "%s::%s error m_omx_resize.Initialize", CLASSNAME, __func__); -- return false; -+ if (!m_omx_resize.Initialize("OMX.broadcom.resize", OMX_IndexParamImageInit)) -+ { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_resize.Initialize", CLASSNAME, __func__); -+ return false; -+ } - } -- -- port_def.nPortIndex = m_omx_resize.GetInputPort(); -- -- omx_err = m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -- if (omx_err != OMX_ErrorNone) -+ if (m_omx_resize.IsInitialized()) - { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -- } -+ port_def.nPortIndex = m_omx_resize.GetInputPort(); - -- port_def.nPortIndex = m_omx_resize.GetOutputPort(); -- omx_err = m_omx_resize.GetParameter(OMX_IndexParamPortDefinition, &port_def); -- if (omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.GetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -- } -+ omx_err = m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } - -- port_def.format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar; -- port_def.format.image.nFrameWidth = resize_width; -- port_def.format.image.nFrameHeight = resize_height; -- port_def.format.image.nSliceHeight = 16; -- port_def.format.image.nStride = 0; -- omx_err = m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -- if (omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -- return false; -- } -+ port_def.nPortIndex = m_omx_resize.GetOutputPort(); -+ omx_err = m_omx_resize.GetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.GetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } - -+ port_def.format.image.eColorFormat = OMX_COLOR_FormatYUV420PackedPlanar; -+ port_def.format.image.nFrameWidth = resize_width; -+ port_def.format.image.nFrameHeight = resize_height; -+ port_def.format.image.nSliceHeight = 16; -+ port_def.format.image.nStride = 0; -+ omx_err = m_omx_resize.SetParameter(OMX_IndexParamPortDefinition, &port_def); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_resize.SetParameter result(0x%x)\n", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ } - if (!m_omx_egl_render.Initialize("OMX.broadcom.egl_render", OMX_IndexParamVideoInit)) - { - CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.Initialize", CLASSNAME, __func__); -@@ -1983,30 +2012,43 @@ bool COMXTexture::HandlePortSettingChange(unsigned int resize_width, unsigned in - CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.UseEGLImage (%x)", CLASSNAME, __func__, omx_err); - return false; - } -+ if (m_omx_resize.IsInitialized()) -+ { -+ m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort()); - -- m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_resize, m_omx_resize.GetInputPort()); -+ omx_err = m_omx_tunnel_decode.Establish(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish (%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } - -- omx_err = m_omx_tunnel_decode.Establish(); -- if (omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish (%x)", CLASSNAME, __func__, omx_err); -- return false; -- } -+ m_omx_tunnel_egl.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); - -- m_omx_tunnel_egl.Initialize(&m_omx_resize, m_omx_resize.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ omx_err = m_omx_tunnel_egl.Establish(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_egl.Establish (%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } - -- omx_err = m_omx_tunnel_egl.Establish(); -- if (omx_err != OMX_ErrorNone) -- { -- CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_egl.Establish (%x)", CLASSNAME, __func__, omx_err); -- return false; -+ omx_err = m_omx_resize.SetStateForComponent(OMX_StateExecuting); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.GetParameter (%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } - } -- -- omx_err = m_omx_resize.SetStateForComponent(OMX_StateExecuting); -- if (omx_err != OMX_ErrorNone) -+ else - { -- CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.GetParameter (%x)", CLASSNAME, __func__, omx_err); -- return false; -+ m_omx_tunnel_decode.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), &m_omx_egl_render, m_omx_egl_render.GetInputPort()); -+ -+ omx_err = m_omx_tunnel_decode.Establish(); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_tunnel_decode.Establish (%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } - } - - omx_err = m_omx_egl_render.SetStateForComponent(OMX_StateExecuting); --- -1.9.3 - - -From 1156d9abfac43de458d4ba66e5494c1d027e0f17 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 8 Mar 2014 15:36:06 +0000 -Subject: [PATCH 55/94] [hifiberry] Hack: force it to be recognised as IEC958 - capable to enable passthrough options - ---- - xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp -index b48a4fc..d9897e5 100644 ---- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp -+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp -@@ -932,6 +932,10 @@ void CAESinkALSA::EnumerateDevice(AEDeviceInfoList &list, const std::string &dev - if (snd_card_get_name(cardNr, &cardName) == 0) - info.m_displayName = cardName; - -+ // hack: hifiberry digi doesn't correctly report as iec958 device. Needs fixing in kernel driver -+ if (info.m_displayName == "snd_rpi_hifiberry_digi") -+ info.m_deviceType = AE_DEVTYPE_IEC958; -+ - if (info.m_deviceType == AE_DEVTYPE_HDMI && info.m_displayName.size() > 5 && - info.m_displayName.substr(info.m_displayName.size()-5) == " HDMI") - { --- -1.9.3 - - -From 03aa9ebf0993f06d24a34f8dd7d86a183ebd2dcd Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Tue, 11 Mar 2014 18:50:23 +0000 -Subject: [PATCH 56/94] [dvdplayer] Use inexact seeking like omxplayer - ---- - xbmc/cores/dvdplayer/DVDPlayer.cpp | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index d607f55..1d4ba52 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayer.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp -@@ -1935,7 +1935,11 @@ void CDVDPlayer::CheckAutoSceneSkip() - /* - * Seeking is NOT flushed so any content up to the demux point is retained when playing forwards. - */ -+#ifdef TARGET_RASPBERRY_PI -+ m_messenger.Put(new CDVDMsgPlayerSeek((int)seek, true, true, true, false, true)); -+#else - m_messenger.Put(new CDVDMsgPlayerSeek((int)seek, true, false, true, false, true)); -+#endif - /* - * Seek doesn't always work reliably. Last physical seek time is recorded to prevent looping - * if there was an error with seeking and it landed somewhere unexpected, perhaps back in the -@@ -1953,7 +1957,11 @@ void CDVDPlayer::CheckAutoSceneSkip() - /* - * Seeking is NOT flushed so any content up to the demux point is retained when playing forwards. - */ -+#ifdef TARGET_RASPBERRY_PI -+ m_messenger.Put(new CDVDMsgPlayerSeek(cut.end + 1, true, false, true, false, true)); -+#else - m_messenger.Put(new CDVDMsgPlayerSeek(cut.end + 1, true, false, true, false, true)); -+#endif - /* - * Each commercial break is only skipped once so poorly detected commercial breaks can be - * manually re-entered. Start and end are recorded to prevent looping and to allow seeking back -@@ -3293,9 +3301,12 @@ bool CDVDPlayer::CloseTeletextStream(bool bWaitForBuffers) - void CDVDPlayer::FlushBuffers(bool queued, double pts, bool accurate) - { - double startpts; -+#ifndef TARGET_RASPBERRY_PI -+ /* for now, ignore accurate flag as it discards keyframes and causes corrupt frames */ - if(accurate) - startpts = pts; - else -+#endif - startpts = DVD_NOPTS_VALUE; - - /* call with demuxer pts */ --- -1.9.3 - - -From d4487b87819003a44f59a607074a41108f644915 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 13 Mar 2014 16:08:46 +0000 -Subject: [PATCH 57/94] [omxplayer] Make use of TrueHD fastpath when downmixing - -The TrueHD codec actually works in 3 stages. It decodes the downmixed stereo. It then decodes the differences required to produce 5.1. -It then decodes the differences required to produce 7.1. - -Many users end up downmixing this 7.1 stream back to 2.0. -Much better to tell the codec we only need the 2.0 stream. It saves about 50% of the CPU required ---- - xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -index 557e847..7f6ef6e 100644 ---- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -@@ -25,6 +25,8 @@ - #include "utils/log.h" - - #include "cores/AudioEngine/Utils/AEUtil.h" -+#include "settings/Settings.h" -+#include "PCMRemap.h" - - // the size of the audio_render output port buffers - #define AUDIO_DECODE_OUTPUT_BUFFER (32*1024) -@@ -91,6 +93,16 @@ bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints) - m_pCodecContext->block_align = hints.blockalign; - m_pCodecContext->bit_rate = hints.bitrate; - m_pCodecContext->bits_per_coded_sample = hints.bitspersample; -+ enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); -+ if (hints.codec == AV_CODEC_ID_TRUEHD) -+ { -+ if (layout == PCM_LAYOUT_2_0) -+ m_pCodecContext->request_channel_layout = AV_CH_LAYOUT_STEREO; -+ else if (layout <= PCM_LAYOUT_5_1) -+ m_pCodecContext->request_channel_layout = AV_CH_LAYOUT_5POINT1; -+ } -+ if (m_pCodecContext->request_channel_layout) -+ CLog::Log(LOGNOTICE,"COMXAudioCodecOMX::Open() Requesting channel layout of %d", (unsigned)m_pCodecContext->request_channel_layout); - - // vorbis has variable sized planar output, so skip concatenation - if (hints.codec == AV_CODEC_ID_VORBIS) --- -1.9.3 - - -From 8dedad4307cbca1416262af9e2ac2404c7490713 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 15 Mar 2014 19:38:38 +0000 -Subject: [PATCH 58/94] [omxplayer] When in dual audio mode, make one output - the slave - -May help audio sync between the two outputs ---- - xbmc/cores/omxplayer/OMXAudio.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp -index 3e64de0..72e42ec 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXAudio.cpp -@@ -245,7 +245,7 @@ bool COMXAudio::PortSettingsChanged() - { - // By default audio_render is the clock master, and if output samples don't fit the timestamps, it will speed up/slow down the clock. - // This tends to be better for maintaining audio sync and avoiding audio glitches, but can affect video/display sync -- if(CSettings::Get().GetBool("videoplayer.usedisplayasclock")) -+ if(CSettings::Get().GetBool("videoplayer.usedisplayasclock") || (CSettings::Get().GetBool("audiooutput.dualaudio") && CSettings::Get().GetString("audiooutput.audiodevice") != "PI:Analogue")) - { - OMX_CONFIG_BOOLEANTYPE configBool; - OMX_INIT_STRUCTURE(configBool); -@@ -271,7 +271,7 @@ bool COMXAudio::PortSettingsChanged() - { - // By default audio_render is the clock master, and if output samples don't fit the timestamps, it will speed up/slow down the clock. - // This tends to be better for maintaining audio sync and avoiding audio glitches, but can affect video/display sync -- if(CSettings::Get().GetBool("videoplayer.usedisplayasclock")) -+ if(CSettings::Get().GetBool("videoplayer.usedisplayasclock") || (CSettings::Get().GetBool("audiooutput.dualaudio") && CSettings::Get().GetString("audiooutput.audiodevice") == "PI:Analogue")) - { - OMX_CONFIG_BOOLEANTYPE configBool; - OMX_INIT_STRUCTURE(configBool); --- -1.9.3 - - -From 96842193cb39ac3625a1dcbdd67388141733a5ee Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 30 Dec 2013 12:02:14 +0000 -Subject: [PATCH 59/94] [rbp] Hardware accelerated resampling - -This replaces the format conversion, up/down mixing and resampling code from ActiveAE with a GPU accelerated version. -Should significantly reduce CPU when using paplayer or dvdplayer. - -Requires updated firmware ---- - .../Engines/ActiveAE/ActiveAEResample.cpp | 5 + - .../Engines/ActiveAE/ActiveAEResample.h | 9 + - .../Engines/ActiveAE/ActiveAEResamplePi.cpp | 592 +++++++++++++++++++++ - .../Engines/ActiveAE/ActiveAEResamplePi.h | 65 +++ - xbmc/cores/AudioEngine/Makefile.in | 1 + - xbmc/linux/OMXCore.cpp | 4 +- - 6 files changed, 674 insertions(+), 2 deletions(-) - create mode 100644 xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp - create mode 100644 xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.h - -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp -index e131f16..94b69a0 100644 ---- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp -@@ -18,6 +18,10 @@ - * - */ - -+#include "system.h" -+ -+#if !defined(TARGET_RASPBERRY_PI) -+ - #include "ActiveAEResample.h" - - using namespace ActiveAE; -@@ -344,3 +348,4 @@ int CActiveAEResample::GetAVChannelIndex(enum AEChannel aechannel, uint64_t layo - { - return m_dllAvUtil.av_get_channel_layout_channel_index(layout, GetAVChannel(aechannel)); - } -+#endif -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h -index 1e0e342..6a8949b 100644 ---- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h -@@ -21,11 +21,18 @@ - - #include "DllAvUtil.h" - #include "DllSwResample.h" -+ -+#include "system.h" -+ - #include "cores/AudioEngine/Utils/AEChannelInfo.h" - #include "cores/AudioEngine/Utils/AEAudioFormat.h" - #include "cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h" - #include "cores/AudioEngine/Interfaces/AE.h" - -+#if defined(TARGET_RASPBERRY_PI) -+#include "ActiveAEResamplePi.h" -+#else -+ - namespace ActiveAE - { - -@@ -62,3 +69,5 @@ class CActiveAEResample - }; - - } -+ -+#endif -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -new file mode 100644 -index 0000000..1d7b425 ---- /dev/null -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -@@ -0,0 +1,592 @@ -+/* -+ * Copyright (C) 2010-2013 Team XBMC -+ * http://xbmc.org -+ * -+ * This Program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * This Program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with XBMC; see the file COPYING. If not, see -+ * <http://www.gnu.org/licenses/>. -+ * -+ */ -+ -+#include "system.h" -+ -+#if defined(TARGET_RASPBERRY_PI) -+ -+#include "ActiveAEResample.h" -+#include "linux/RBP.h" -+#include "cores/omxplayer/PCMRemap.h" -+#include "settings/Settings.h" -+#include "utils/log.h" -+ -+//#define DEBUG_VERBOSE -+ -+#define CLASSNAME "CActiveAEResamplePi" -+ -+#define BUFFERSIZE (32*1024*2*8) -+ -+//#define BENCHMARKING -+#ifdef BENCHMARKING -+#define LOGTIMEINIT(f) \ -+ struct timespec now; \ -+ uint64_t Start, End; \ -+ clock_gettime(CLOCK_MONOTONIC, &now); \ -+ Start = ((int64_t)now.tv_sec * 1000000000L) + now.tv_nsec; \ -+ const char *_filename = f; -+ -+#define LOGTIME(n) \ -+ clock_gettime(CLOCK_MONOTONIC, &now); \ -+ End = ((int64_t)now.tv_sec * 1000000000L) + now.tv_nsec; \ -+ CLog::Log(LOGNOTICE, "ActiveAE::%s %d - resample %s took %.0fms", __FUNCTION__, n, _filename, (End-Start)*1e-6); \ -+ Start=End; -+#else -+#define LOGTIMEINIT(f) -+#define LOGTIME(n) -+#endif -+ -+using namespace ActiveAE; -+ -+CActiveAEResample::CActiveAEResample() -+{ -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ m_loaded = false; -+ -+ if (m_dllAvUtil.Load() && m_dllSwResample.Load()) -+ m_loaded = true; -+ -+ m_Initialized = false; -+ m_last_src_fmt = AV_SAMPLE_FMT_NONE; -+ m_last_dst_fmt = AV_SAMPLE_FMT_NONE; -+ m_last_src_channels = 0; -+ m_last_dst_channels = 0; -+} -+ -+CActiveAEResample::~CActiveAEResample() -+{ -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ DeInit(); -+ m_dllAvUtil.Unload(); -+ m_dllSwResample.Unload(); -+} -+ -+void CActiveAEResample::DeInit() -+{ -+ CLog::Log(LOGDEBUG, "%s:%s", CLASSNAME, __func__); -+ if (m_Initialized) -+ { -+ m_omx_mixer.FlushAll(); -+ m_omx_mixer.Deinitialize(); -+ m_Initialized = false; -+ } -+} -+ -+bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, bool normalize, CAEChannelInfo *remapLayout, AEQuality quality) -+{ -+ LOGTIMEINIT("x"); -+ -+ CLog::Log(LOGINFO, "%s::%s remap:%p chan:%d->%d rate:%d->%d format:%d->%d bits:%d->%d norm:%d upmix:%d", CLASSNAME, __func__, remapLayout, src_channels, dst_channels, src_rate, dst_rate, src_fmt, dst_fmt, src_bits, dst_bits, normalize, upmix); -+ if (!m_loaded) -+ return false; -+ -+ m_dst_chan_layout = dst_chan_layout; -+ m_dst_channels = dst_channels; -+ m_dst_rate = dst_rate; -+ m_dst_fmt = dst_fmt; -+ m_dst_bits = dst_bits ? dst_bits : 8; -+ m_src_chan_layout = src_chan_layout; -+ m_src_channels = src_channels; -+ m_src_rate = src_rate; -+ m_src_fmt = src_fmt; -+ m_src_bits = src_bits ? src_bits : 8; -+ -+ if (m_dst_chan_layout == 0) -+ m_dst_chan_layout = m_dllAvUtil.av_get_default_channel_layout(m_dst_channels); -+ if (m_src_chan_layout == 0) -+ m_src_chan_layout = m_dllAvUtil.av_get_default_channel_layout(m_src_channels); -+ -+ OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8 mix; -+ OMX_INIT_STRUCTURE(mix); -+ -+ assert(sizeof(mix.coeff)/sizeof(mix.coeff[0]) == 64); -+ -+ LOGTIME(1); -+// this code is just uses ffmpeg to produce the 8x8 mixing matrix -+{ -+ // dummy sample rate and format, as we only care about channel mapping -+ SwrContext *m_pContext = m_dllSwResample.swr_alloc_set_opts(NULL, m_dst_chan_layout, AV_SAMPLE_FMT_FLT, 48000, -+ m_src_chan_layout, AV_SAMPLE_FMT_FLT, 48000, 0, NULL); -+ if (!m_pContext) -+ { -+ CLog::Log(LOGERROR, "CActiveAEResample::Init - create context failed"); -+ return false; -+ } -+ // tell resampler to clamp float values -+ // not required for sink stage (remapLayout == true) -+ if (!remapLayout && normalize) -+ { -+ m_dllAvUtil.av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0); -+ } -+ -+ if (remapLayout) -+ { -+ // one-to-one mapping of channels -+ // remapLayout is the layout of the sink, if the channel is in our src layout -+ // the channel is mapped by setting coef 1.0 -+ double m_rematrix[AE_CH_MAX][AE_CH_MAX]; -+ memset(m_rematrix, 0, sizeof(m_rematrix)); -+ m_dst_chan_layout = 0; -+ for (unsigned int out=0; out<remapLayout->Count(); out++) -+ { -+ m_dst_chan_layout += (uint64_t) (1 << out); -+ int idx = GetAVChannelIndex((*remapLayout)[out], m_src_chan_layout); -+ if (idx >= 0) -+ { -+ m_rematrix[out][idx] = 1.0; -+ } -+ } -+ -+ m_dllAvUtil.av_opt_set_int(m_pContext, "out_channel_count", m_dst_channels, 0); -+ m_dllAvUtil.av_opt_set_int(m_pContext, "out_channel_layout", m_dst_chan_layout, 0); -+ -+ if (m_dllSwResample.swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0) -+ { -+ CLog::Log(LOGERROR, "CActiveAEResample::Init - setting channel matrix failed"); -+ return false; -+ } -+ } -+ // stereo upmix -+ else if (upmix && m_src_channels == 2 && m_dst_channels > 2) -+ { -+ double m_rematrix[AE_CH_MAX][AE_CH_MAX]; -+ memset(m_rematrix, 0, sizeof(m_rematrix)); -+ for (int out=0; out<m_dst_channels; out++) -+ { -+ uint64_t out_chan = m_dllAvUtil.av_channel_layout_extract_channel(m_dst_chan_layout, out); -+ switch(out_chan) -+ { -+ case AV_CH_FRONT_LEFT: -+ case AV_CH_BACK_LEFT: -+ case AV_CH_SIDE_LEFT: -+ m_rematrix[out][0] = 1.0; -+ break; -+ case AV_CH_FRONT_RIGHT: -+ case AV_CH_BACK_RIGHT: -+ case AV_CH_SIDE_RIGHT: -+ m_rematrix[out][1] = 1.0; -+ break; -+ case AV_CH_FRONT_CENTER: -+ m_rematrix[out][0] = 0.5; -+ m_rematrix[out][1] = 0.5; -+ break; -+ case AV_CH_LOW_FREQUENCY: -+ m_rematrix[out][0] = 0.5; -+ m_rematrix[out][1] = 0.5; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ if (m_dllSwResample.swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0) -+ { -+ CLog::Log(LOGERROR, "CActiveAEResample::Init - setting channel matrix failed"); -+ return false; -+ } -+ } -+ -+ if (m_dllSwResample.swr_init(m_pContext) < 0) -+ { -+ CLog::Log(LOGERROR, "CActiveAEResample::Init - init resampler failed"); -+ return false; -+ } -+ -+ const int samples = 8; -+ uint8_t *output, *input; -+ av_samples_alloc(&output, NULL, m_dst_channels, samples, AV_SAMPLE_FMT_FLT, 1); -+ av_samples_alloc(&input , NULL, m_src_channels, samples, AV_SAMPLE_FMT_FLT, 1); -+ -+ // Produce "identity" samples -+ float *f = (float *)input; -+ for (int j=0; j < samples; j++) -+ for (int i=0; i < m_src_channels; i++) -+ *f++ = i == j ? 1.0f : 0.0f; -+ -+ int ret = m_dllSwResample.swr_convert(m_pContext, &output, samples, (const uint8_t **)&input, samples); -+ if (ret < 0) -+ CLog::Log(LOGERROR, "CActiveAEResample::Resample - resample failed"); -+ -+ f = (float *)output; -+ for (int j=0; j < samples; j++) -+ for (int i=0; i < m_dst_channels; i++) -+ mix.coeff[8*i+j] = *f++ * (1<<16); -+ -+ for (int j=0; j < 8; j++) -+ { -+ char s[128] = {}, *t=s; -+ for (int i=0; i < 8; i++) -+ t += sprintf(t, "% 6.2f ", mix.coeff[j*8+i] * (1.0/0x10000)); -+ CLog::Log(LOGINFO, "%s::%s %s", CLASSNAME, __func__, s); -+ } -+ av_freep(&input); -+ av_freep(&output); -+ m_dllSwResample.swr_free(&m_pContext); -+} -+ LOGTIME(2); -+ -+ // This may be called before Application calls g_RBP.Initialise, so call it here too -+ g_RBP.Initialize(); -+ -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; -+ -+ if (!m_omx_mixer.Initialize("OMX.broadcom.audio_mixer", OMX_IndexParamAudioInit)) -+ CLog::Log(LOGERROR, "%s::%s - m_omx_mixer.Initialize omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(3); -+ -+ OMX_INIT_STRUCTURE(m_pcm_input); -+ m_pcm_input.nPortIndex = m_omx_mixer.GetInputPort(); -+ m_pcm_input.eNumData = OMX_NumericalDataSigned; -+ m_pcm_input.eEndian = OMX_EndianLittle; -+ m_pcm_input.bInterleaved = OMX_TRUE; -+ m_pcm_input.nBitPerSample = m_src_bits; -+ m_pcm_input.ePCMMode = m_src_fmt == AV_SAMPLE_FMT_FLT ? (OMX_AUDIO_PCMMODETYPE)0x8000 : OMX_AUDIO_PCMModeLinear; -+ m_pcm_input.nChannels = src_channels; -+ m_pcm_input.nSamplingRate = src_rate; -+ -+ omx_err = m_omx_mixer.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_input); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s - error m_omx_mixer in SetParameter omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ OMX_INIT_STRUCTURE(m_pcm_output); -+ m_pcm_output.nPortIndex = m_omx_mixer.GetOutputPort(); -+ m_pcm_output.eNumData = OMX_NumericalDataSigned; -+ m_pcm_output.eEndian = OMX_EndianLittle; -+ m_pcm_output.bInterleaved = OMX_TRUE; -+ m_pcm_output.nBitPerSample = m_dst_bits; -+ m_pcm_output.ePCMMode = m_dst_fmt == AV_SAMPLE_FMT_FLT ? (OMX_AUDIO_PCMMODETYPE)0x8000 : OMX_AUDIO_PCMModeLinear; -+ m_pcm_output.nChannels = dst_channels; -+ m_pcm_output.nSamplingRate = dst_rate; -+ -+ omx_err = m_omx_mixer.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s::%s - error m_omx_mixer out SetParameter omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(4); -+ -+ mix.nPortIndex = m_omx_mixer.GetInputPort(); -+ omx_err = m_omx_mixer.SetConfig(OMX_IndexConfigBrcmAudioDownmixCoefficients8x8, &mix); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s - error setting mixer OMX_IndexConfigBrcmAudioDownmixCoefficients, error 0x%08x\n", -+ CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ // set up the number/size of buffers for decoder input -+ OMX_PARAM_PORTDEFINITIONTYPE port_param; -+ OMX_INIT_STRUCTURE(port_param); -+ port_param.nPortIndex = m_omx_mixer.GetInputPort(); -+ -+ omx_err = m_omx_mixer.GetParameter(OMX_IndexParamPortDefinition, &port_param); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - error get OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ port_param.nBufferCountActual = std::max((unsigned int)port_param.nBufferCountMin, (unsigned int)1); -+ port_param.nBufferSize = BUFFERSIZE; -+ -+ omx_err = m_omx_mixer.SetParameter(OMX_IndexParamPortDefinition, &port_param); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - error set OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(5); -+ -+ omx_err = m_omx_mixer.AllocInputBuffers(); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - Error alloc buffers 0x%08x", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(6); -+ -+ // set up the number/size of buffers for decoder output -+ OMX_INIT_STRUCTURE(port_param); -+ port_param.nPortIndex = m_omx_mixer.GetOutputPort(); -+ -+ omx_err = m_omx_mixer.GetParameter(OMX_IndexParamPortDefinition, &port_param); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - error get OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ port_param.nBufferCountActual = std::max((unsigned int)port_param.nBufferCountMin, (unsigned int)1); -+ port_param.nBufferSize = BUFFERSIZE; -+ -+ omx_err = m_omx_mixer.SetParameter(OMX_IndexParamPortDefinition, &port_param); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - error set OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(7); -+ -+ omx_err = m_omx_mixer.AllocOutputBuffers(); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - Error alloc buffers 0x%08x", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(8); -+ -+ omx_err = m_omx_mixer.SetStateForComponent(OMX_StateExecuting); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s - m_omx_mixer OMX_StateExecuting omx_err(0x%08x)", CLASSNAME, __func__, omx_err); -+ -+ LOGTIME(9); -+ -+ m_Initialized = true; -+ -+ return true; -+} -+ -+int CActiveAEResample::Resample(uint8_t **dst_buffer, int dst_samples, uint8_t **src_buffer, int src_samples, double ratio) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s samples:%d->%d (%.2f)", CLASSNAME, __func__, src_samples, dst_samples, ratio); -+ #endif -+ if (!m_Initialized) -+ return 0; -+ OMX_ERRORTYPE omx_err = OMX_ErrorNone; -+ -+ const int s_pitch = m_pcm_input.nChannels * m_src_bits >> 3; -+ const int d_pitch = m_pcm_output.nChannels * m_dst_bits >> 3; -+ int sent = 0; -+ int received = 0; -+ while (sent < src_samples) -+ { -+ OMX_BUFFERHEADERTYPE *omx_buffer = NULL; -+ OMX_BUFFERHEADERTYPE *m_encoded_buffer = NULL; -+ -+ omx_buffer = m_omx_mixer.GetInputBuffer(1000); -+ if (omx_buffer == NULL) -+ return false; -+ -+ const int max_src_samples = BUFFERSIZE / s_pitch; -+ const int max_dst_samples = (long long)(BUFFERSIZE/d_pitch) * m_src_rate / (m_dst_rate + m_src_rate-1); -+ int send = std::min(std::min(max_dst_samples, max_src_samples), src_samples - sent); -+ -+ omx_buffer->nOffset = 0; -+ omx_buffer->nFlags = OMX_BUFFERFLAG_EOS; -+ omx_buffer->nFilledLen = send * s_pitch; -+ -+ assert(omx_buffer->nFilledLen > 0 && omx_buffer->nFilledLen <= omx_buffer->nAllocLen); -+ -+ if (omx_buffer->nFilledLen) -+ { -+ memcpy(omx_buffer->pBuffer, src_buffer[0] + sent * s_pitch, omx_buffer->nFilledLen); -+ sent += send; -+ } -+ -+ omx_err = m_omx_mixer.EmptyThisBuffer(omx_buffer); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s OMX_EmptyThisBuffer() failed with result(0x%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ -+ m_encoded_buffer = m_omx_mixer.GetOutputBuffer(); -+ -+ if (!m_encoded_buffer) -+ { -+ CLog::Log(LOGERROR, "%s::%s no output buffer", CLASSNAME, __func__); -+ return false; -+ } -+ -+ omx_err = m_omx_mixer.FillThisBuffer(m_encoded_buffer); -+ if (omx_err != OMX_ErrorNone) -+ return false; -+ -+ omx_err = m_omx_mixer.WaitForOutputDone(1000); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_mixer.WaitForOutputDone result(0x%x)", CLASSNAME, __func__, omx_err); -+ return false; -+ } -+ assert(m_encoded_buffer->nFilledLen > 0 && m_encoded_buffer->nFilledLen <= m_encoded_buffer->nAllocLen); -+ -+ if (m_omx_mixer.BadState()) -+ { -+ CLog::Log(LOGERROR, "%s::%s m_omx_mixer.BadState", CLASSNAME, __func__); -+ return false; -+ } -+ -+ if (m_encoded_buffer->nFilledLen) -+ { -+ memcpy(dst_buffer[0] + received * d_pitch, m_encoded_buffer->pBuffer, m_encoded_buffer->nFilledLen); -+ received += m_encoded_buffer->nFilledLen / d_pitch; -+ } -+ } -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s format:%d->%d rate:%d->%d chan:%d->%d samples %d->%d (%f) %d =%d", CLASSNAME, __func__, -+ (int)m_src_fmt, (int)m_dst_fmt, m_src_rate, m_dst_rate, m_src_channels, m_dst_channels, src_samples, dst_samples, ratio, m_Initialized, received); -+ #endif -+ return received; -+} -+ -+int64_t CActiveAEResample::GetDelay(int64_t base) -+{ -+ int ret = 0; -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s = %d", CLASSNAME, __func__, ret); -+ #endif -+ return ret; -+} -+ -+int CActiveAEResample::GetBufferedSamples() -+{ -+ int ret = 0; -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s = %d", CLASSNAME, __func__, ret); -+ #endif -+ return ret; -+} -+ -+int CActiveAEResample::CalcDstSampleCount(int src_samples, int dst_rate, int src_rate) -+{ -+ int ret = ((long long)src_samples * dst_rate + src_rate-1) / src_rate; -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s = %d", CLASSNAME, __func__, ret); -+ #endif -+ return ret; -+} -+ -+int CActiveAEResample::GetSrcBufferSize(int samples) -+{ -+ int ret = 0; -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s = %d", CLASSNAME, __func__, ret); -+ #endif -+ return ret; -+} -+ -+int CActiveAEResample::GetDstBufferSize(int samples) -+{ -+ int ret = CalcDstSampleCount(samples, m_dst_rate, m_src_rate); -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s = %d", CLASSNAME, __func__, ret); -+ #endif -+ return ret; -+} -+ -+uint64_t CActiveAEResample::GetAVChannelLayout(CAEChannelInfo &info) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ uint64_t channelLayout = 0; -+ if (info.HasChannel(AE_CH_FL)) channelLayout |= AV_CH_FRONT_LEFT; -+ if (info.HasChannel(AE_CH_FR)) channelLayout |= AV_CH_FRONT_RIGHT; -+ if (info.HasChannel(AE_CH_FC)) channelLayout |= AV_CH_FRONT_CENTER; -+ if (info.HasChannel(AE_CH_LFE)) channelLayout |= AV_CH_LOW_FREQUENCY; -+ if (info.HasChannel(AE_CH_BL)) channelLayout |= AV_CH_BACK_LEFT; -+ if (info.HasChannel(AE_CH_BR)) channelLayout |= AV_CH_BACK_RIGHT; -+ if (info.HasChannel(AE_CH_FLOC)) channelLayout |= AV_CH_FRONT_LEFT_OF_CENTER; -+ if (info.HasChannel(AE_CH_FROC)) channelLayout |= AV_CH_FRONT_RIGHT_OF_CENTER; -+ if (info.HasChannel(AE_CH_BC)) channelLayout |= AV_CH_BACK_CENTER; -+ if (info.HasChannel(AE_CH_SL)) channelLayout |= AV_CH_SIDE_LEFT; -+ if (info.HasChannel(AE_CH_SR)) channelLayout |= AV_CH_SIDE_RIGHT; -+ if (info.HasChannel(AE_CH_TC)) channelLayout |= AV_CH_TOP_CENTER; -+ if (info.HasChannel(AE_CH_TFL)) channelLayout |= AV_CH_TOP_FRONT_LEFT; -+ if (info.HasChannel(AE_CH_TFC)) channelLayout |= AV_CH_TOP_FRONT_CENTER; -+ if (info.HasChannel(AE_CH_TFR)) channelLayout |= AV_CH_TOP_FRONT_RIGHT; -+ if (info.HasChannel(AE_CH_TBL)) channelLayout |= AV_CH_TOP_BACK_LEFT; -+ if (info.HasChannel(AE_CH_TBC)) channelLayout |= AV_CH_TOP_BACK_CENTER; -+ if (info.HasChannel(AE_CH_TBR)) channelLayout |= AV_CH_TOP_BACK_RIGHT; -+ -+ return channelLayout; -+} -+ -+AVSampleFormat CActiveAEResample::GetAVSampleFormat(AEDataFormat format) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ if (format == AE_FMT_U8) return AV_SAMPLE_FMT_U8; -+ else if (format == AE_FMT_S16NE) return AV_SAMPLE_FMT_S16; -+ else if (format == AE_FMT_S32NE) return AV_SAMPLE_FMT_S32; -+ else if (format == AE_FMT_S24NE4) return AV_SAMPLE_FMT_S32; -+ else if (format == AE_FMT_FLOAT) return AV_SAMPLE_FMT_FLT; -+ else if (format == AE_FMT_DOUBLE) return AV_SAMPLE_FMT_DBL; -+ -+ else if (format == AE_FMT_U8P) return AV_SAMPLE_FMT_U8P; -+ else if (format == AE_FMT_S16NEP) return AV_SAMPLE_FMT_S16P; -+ else if (format == AE_FMT_S32NEP) return AV_SAMPLE_FMT_S32P; -+ else if (format == AE_FMT_S24NE4P) return AV_SAMPLE_FMT_S32P; -+ else if (format == AE_FMT_FLOATP) return AV_SAMPLE_FMT_FLTP; -+ else if (format == AE_FMT_DOUBLEP) return AV_SAMPLE_FMT_DBLP; -+ -+ return AV_SAMPLE_FMT_FLT; -+} -+ -+AEDataFormat CActiveAEResample::GetAESampleFormat(AVSampleFormat format, int bits) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ if (format == AV_SAMPLE_FMT_U8) return AE_FMT_U8; -+ else if (format == AV_SAMPLE_FMT_S16) return AE_FMT_S16NE; -+ else if (format == AV_SAMPLE_FMT_S32 && bits == 32) return AE_FMT_S32NE; -+ else if (format == AV_SAMPLE_FMT_S32 && bits == 24) return AE_FMT_S24NE4; -+ else if (format == AV_SAMPLE_FMT_FLT) return AE_FMT_FLOAT; -+ else if (format == AV_SAMPLE_FMT_DBL) return AE_FMT_DOUBLE; -+ -+ else if (format == AV_SAMPLE_FMT_U8P) return AE_FMT_U8P; -+ else if (format == AV_SAMPLE_FMT_S16P) return AE_FMT_S16NEP; -+ else if (format == AV_SAMPLE_FMT_S32P && bits == 32) return AE_FMT_S32NEP; -+ else if (format == AV_SAMPLE_FMT_S32P && bits == 24) return AE_FMT_S24NE4P; -+ else if (format == AV_SAMPLE_FMT_FLTP) return AE_FMT_FLOATP; -+ else if (format == AV_SAMPLE_FMT_DBLP) return AE_FMT_DOUBLEP; -+ -+ CLog::Log(LOGERROR, "CActiveAEResample::GetAESampleFormat - format not supported"); -+ return AE_FMT_INVALID; -+} -+ -+uint64_t CActiveAEResample::GetAVChannel(enum AEChannel aechannel) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ switch (aechannel) -+ { -+ case AE_CH_FL: return AV_CH_FRONT_LEFT; -+ case AE_CH_FR: return AV_CH_FRONT_RIGHT; -+ case AE_CH_FC: return AV_CH_FRONT_CENTER; -+ case AE_CH_LFE: return AV_CH_LOW_FREQUENCY; -+ case AE_CH_BL: return AV_CH_BACK_LEFT; -+ case AE_CH_BR: return AV_CH_BACK_RIGHT; -+ case AE_CH_FLOC: return AV_CH_FRONT_LEFT_OF_CENTER; -+ case AE_CH_FROC: return AV_CH_FRONT_RIGHT_OF_CENTER; -+ case AE_CH_BC: return AV_CH_BACK_CENTER; -+ case AE_CH_SL: return AV_CH_SIDE_LEFT; -+ case AE_CH_SR: return AV_CH_SIDE_RIGHT; -+ case AE_CH_TC: return AV_CH_TOP_CENTER; -+ case AE_CH_TFL: return AV_CH_TOP_FRONT_LEFT; -+ case AE_CH_TFC: return AV_CH_TOP_FRONT_CENTER; -+ case AE_CH_TFR: return AV_CH_TOP_FRONT_RIGHT; -+ case AE_CH_TBL: return AV_CH_TOP_BACK_LEFT; -+ case AE_CH_TBC: return AV_CH_TOP_BACK_CENTER; -+ case AE_CH_TBR: return AV_CH_TOP_BACK_RIGHT; -+ default: -+ return 0; -+ } -+} -+ -+int CActiveAEResample::GetAVChannelIndex(enum AEChannel aechannel, uint64_t layout) -+{ -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ return m_dllAvUtil.av_get_channel_layout_channel_index(layout, GetAVChannel(aechannel)); -+} -+ -+#endif -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.h -new file mode 100644 -index 0000000..8371c33 ---- /dev/null -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.h -@@ -0,0 +1,65 @@ -+#pragma once -+/* -+ * Copyright (C) 2010-2013 Team XBMC -+ * http://xbmc.org -+ * -+ * This Program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * This Program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with XBMC; see the file COPYING. If not, see -+ * <http://www.gnu.org/licenses/>. -+ * -+ */ -+ -+#include "linux/OMXCore.h" -+ -+namespace ActiveAE -+{ -+ -+class CActiveAEResample -+{ -+public: -+ CActiveAEResample(); -+ virtual ~CActiveAEResample(); -+ bool Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, bool normalize, CAEChannelInfo *remapLayout, AEQuality quality); -+ int Resample(uint8_t **dst_buffer, int dst_samples, uint8_t **src_buffer, int src_samples, double ratio); -+ int64_t GetDelay(int64_t base); -+ int GetBufferedSamples(); -+ int CalcDstSampleCount(int src_samples, int dst_rate, int src_rate); -+ int GetSrcBufferSize(int samples); -+ int GetDstBufferSize(int samples); -+ static uint64_t GetAVChannelLayout(CAEChannelInfo &info); -+// static CAEChannelInfo GetAEChannelLayout(uint64_t layout); -+ static AVSampleFormat GetAVSampleFormat(AEDataFormat format); -+ static AEDataFormat GetAESampleFormat(AVSampleFormat format, int bits); -+ static uint64_t GetAVChannel(enum AEChannel aechannel); -+ int GetAVChannelIndex(enum AEChannel aechannel, uint64_t layout); -+ -+protected: -+ void DeInit(); -+ DllAvUtil m_dllAvUtil; -+ DllSwResample m_dllSwResample; -+ bool m_loaded; -+ uint64_t m_src_chan_layout, m_dst_chan_layout; -+ int m_src_rate, m_dst_rate; -+ int m_src_channels, m_dst_channels; -+ AVSampleFormat m_src_fmt, m_dst_fmt; -+ int m_src_bits, m_dst_bits; -+ -+ OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_input; -+ OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_output; -+ COMXCoreComponent m_omx_mixer; -+ bool m_Initialized; -+ AVSampleFormat m_last_src_fmt, m_last_dst_fmt; -+ int m_last_src_channels, m_last_dst_channels; -+}; -+ -+} -diff --git a/xbmc/cores/AudioEngine/Makefile.in b/xbmc/cores/AudioEngine/Makefile.in -index b49c3cc..2ba50f9 100644 ---- a/xbmc/cores/AudioEngine/Makefile.in -+++ b/xbmc/cores/AudioEngine/Makefile.in -@@ -31,6 +31,7 @@ SRCS += Engines/ActiveAE/ActiveAESink.cpp - SRCS += Engines/ActiveAE/ActiveAEStream.cpp - SRCS += Engines/ActiveAE/ActiveAESound.cpp - SRCS += Engines/ActiveAE/ActiveAEResample.cpp -+SRCS += Engines/ActiveAE/ActiveAEResamplePi.cpp - SRCS += Engines/ActiveAE/ActiveAEBuffer.cpp - - ifeq (@USE_ANDROID@,1) -diff --git a/xbmc/linux/OMXCore.cpp b/xbmc/linux/OMXCore.cpp -index 99e407a..8d3c86a 100644 ---- a/xbmc/linux/OMXCore.cpp -+++ b/xbmc/linux/OMXCore.cpp -@@ -448,7 +448,7 @@ void COMXCoreComponent::FlushAll() - - void COMXCoreComponent::FlushInput() - { -- if(!m_handle) -+ if(!m_handle || m_resource_error) - return; - - OMX_ERRORTYPE omx_err = OMX_ErrorNone; -@@ -470,7 +470,7 @@ void COMXCoreComponent::FlushInput() - - void COMXCoreComponent::FlushOutput() - { -- if(!m_handle) -+ if(!m_handle || m_resource_error) - return; - - OMX_ERRORTYPE omx_err = OMX_ErrorNone; --- -1.9.3 - - -From 07042c916d780bf4acb742e174005aa1e38f3a13 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 27 Mar 2014 00:22:05 +0000 -Subject: [PATCH 60/94] [PiResample] Work around AE not providing correct - src_bits - ---- - .../AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -index 1d7b425..a91e208 100644 ---- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -@@ -97,16 +97,25 @@ bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst - if (!m_loaded) - return false; - -+ if (src_bits == 0) -+ { -+ if (src_fmt == AV_SAMPLE_FMT_U8) src_bits = 8; -+ else if (src_fmt == AV_SAMPLE_FMT_S16) src_bits = 16; -+ else if (src_fmt == AV_SAMPLE_FMT_S32) src_bits = 32; -+ else if (src_fmt == AV_SAMPLE_FMT_FLT) src_bits = 32; -+ } -+ assert(src_bits && dst_bits); -+ - m_dst_chan_layout = dst_chan_layout; - m_dst_channels = dst_channels; - m_dst_rate = dst_rate; - m_dst_fmt = dst_fmt; -- m_dst_bits = dst_bits ? dst_bits : 8; -+ m_dst_bits = dst_bits; - m_src_chan_layout = src_chan_layout; - m_src_channels = src_channels; - m_src_rate = src_rate; - m_src_fmt = src_fmt; -- m_src_bits = src_bits ? src_bits : 8; -+ m_src_bits = src_bits; - - if (m_dst_chan_layout == 0) - m_dst_chan_layout = m_dllAvUtil.av_get_default_channel_layout(m_dst_channels); --- -1.9.3 - - -From 16e8c9550b1afc0a4f5c050cc10c2c19ec9cea38 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Tue, 25 Mar 2014 19:43:07 +0000 -Subject: [PATCH 61/94] [ffmpeg] Speed up wtv index creation - -The index creation is O(N^2) with number of entries (typically thousands). -On a Pi this can take more than 60 seconds to execute for a recording of a few hours. - -By replacing with an O(N) loop, this takes virtually zero time ---- - lib/ffmpeg/libavformat/wtvdec.c | 18 ++++++++++-------- - 1 file changed, 10 insertions(+), 8 deletions(-) - -diff --git a/lib/ffmpeg/libavformat/wtvdec.c b/lib/ffmpeg/libavformat/wtvdec.c -index e423370..70898bd 100644 ---- a/lib/ffmpeg/libavformat/wtvdec.c -+++ b/lib/ffmpeg/libavformat/wtvdec.c -@@ -980,21 +980,23 @@ static int read_header(AVFormatContext *s) - pb = wtvfile_open(s, root, root_size, ff_timeline_table_0_entries_Events_le16); - if (pb) { - int i; -+ AVIndexEntry *e = wtv->index_entries; -+ AVIndexEntry *e_end = wtv->index_entries + wtv->nb_index_entries - 1; -+ uint64_t last_position = 0; - while (1) { - uint64_t frame_nb = avio_rl64(pb); - uint64_t position = avio_rl64(pb); -+ while (frame_nb > e->size && e <= e_end) { -+ e->pos = last_position; -+ e++; -+ } - if (url_feof(pb)) - break; -- for (i = wtv->nb_index_entries - 1; i >= 0; i--) { -- AVIndexEntry *e = wtv->index_entries + i; -- if (frame_nb > e->size) -- break; -- if (position > e->pos) -- e->pos = position; -- } -+ last_position = position; - } -+ e_end->pos = last_position; - wtvfile_close(pb); -- st->duration = wtv->index_entries[wtv->nb_index_entries - 1].timestamp; -+ st->duration = e_end->timestamp; - } - } - } --- -1.9.3 - - -From c95293a4cfd39a5296b434c330c3e6e24831bb6e Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 7 Apr 2014 18:19:32 +0100 -Subject: [PATCH 62/94] [rbp/omxplayer] When opening a stream don't try to - update gui so often - ---- - xbmc/dialogs/GUIDialogBusy.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/xbmc/dialogs/GUIDialogBusy.cpp b/xbmc/dialogs/GUIDialogBusy.cpp -index e9ba7d3..0fdc3c2 100644 ---- a/xbmc/dialogs/GUIDialogBusy.cpp -+++ b/xbmc/dialogs/GUIDialogBusy.cpp -@@ -64,7 +64,11 @@ bool CGUIDialogBusy::WaitOnEvent(CEvent &event, unsigned int displaytime /* = 10 - if (dialog) - { - dialog->Show(); -+#ifdef TARGET_RASPBERRY_PI -+ while(!event.WaitMSec(100)) -+#else - while(!event.WaitMSec(1)) -+#endif - { - g_windowManager.ProcessRenderLoop(false); - if (allowCancel && dialog->IsCanceled()) --- -1.9.3 - - -From 9420d803f17902c7d9f1e6734ab42a78c5d67572 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 7 Apr 2014 15:28:57 +0100 -Subject: [PATCH 63/94] [omxcodec] Clamp video texture at edges to avoid image - wrapping - ---- - xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -index a57abe4..e22a153 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -@@ -1339,6 +1339,8 @@ void CLinuxRendererGLES::RenderOpenMax(int index, int field) - GLint filter = m_scalingMethod == VS_SCALINGMETHOD_NEAREST ? GL_NEAREST : GL_LINEAR; - glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, filter); - glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, filter); -+ glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); -+ glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - g_Windowing.EnableGUIShader(SM_TEXTURE_RGBA); - --- -1.9.3 - - -From 49c65c8d083952be840d8730f3fa40cfd5e0211c Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 7 Apr 2014 17:36:19 +0100 -Subject: [PATCH 64/94] [PiSink] Remove unneeded header and use CAEChannelInfo - directly - ---- - .../AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp | 1 - - xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp | 14 +++++++------- - 2 files changed, 7 insertions(+), 8 deletions(-) - -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -index a91e208..60c5e04 100644 ---- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResamplePi.cpp -@@ -24,7 +24,6 @@ - - #include "ActiveAEResample.h" - #include "linux/RBP.h" --#include "cores/omxplayer/PCMRemap.h" - #include "settings/Settings.h" - #include "utils/log.h" - -diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -index 9ce00e3..070e6eb 100644 ---- a/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -+++ b/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -@@ -78,9 +78,9 @@ static void SetAudioProps(bool stream_channels, uint32_t channel_map) - CLog::Log(LOGDEBUG, "%s:%s hdmi_stream_channels %d hdmi_channel_map %08x", CLASSNAME, __func__, stream_channels, channel_map); - } - --static uint32_t GetChannelMap(AEAudioFormat &format, bool passthrough) -+static uint32_t GetChannelMap(const CAEChannelInfo &channelLayout, bool passthrough) - { -- unsigned int channels = format.m_channelLayout.Count(); -+ unsigned int channels = channelLayout.Count(); - uint32_t channel_map = 0; - if (passthrough) - return 0; -@@ -119,12 +119,12 @@ static uint32_t GetChannelMap(AEAudioFormat &format, bool passthrough) - // According to CEA-861-D only RL and RR are known. In case of a format having SL and SR channels - // but no BR BL channels, we use the wide map in order to open only the num of channels really - // needed. -- if (format.m_channelLayout.HasChannel(AE_CH_BL) && !format.m_channelLayout.HasChannel(AE_CH_SL)) -+ if (channelLayout.HasChannel(AE_CH_BL) && !channelLayout.HasChannel(AE_CH_SL)) - map = map_back; - - for (unsigned int i = 0; i < channels; ++i) - { -- AEChannel c = format.m_channelLayout[i]; -+ AEChannel c = channelLayout[i]; - unsigned int chan = 0; - if ((unsigned int)c < sizeof map_normal / sizeof *map_normal) - chan = map[(unsigned int)c]; -@@ -155,9 +155,9 @@ static uint32_t GetChannelMap(AEAudioFormat &format, bool passthrough) - 0xff, // 7 - 0x13, // 7.1 - }; -- uint8_t cea = format.m_channelLayout.HasChannel(AE_CH_LFE) ? cea_map_lfe[channels] : cea_map[channels]; -+ uint8_t cea = channelLayout.HasChannel(AE_CH_LFE) ? cea_map_lfe[channels] : cea_map[channels]; - if (cea == 0xff) -- CLog::Log(LOGERROR, "%s::%s - Unexpected CEA mapping %d,%d", CLASSNAME, __func__, format.m_channelLayout.HasChannel(AE_CH_LFE), channels); -+ CLog::Log(LOGERROR, "%s::%s - Unexpected CEA mapping %d,%d", CLASSNAME, __func__, channelLayout.HasChannel(AE_CH_LFE), channels); - - channel_map |= cea << 24; - -@@ -189,7 +189,7 @@ bool CAESinkPi::Initialize(AEAudioFormat &format, std::string &device) - format.m_frames = format.m_sampleRate * AUDIO_PLAYBUFFER; - format.m_frameSamples = format.m_frames * channels; - -- SetAudioProps(m_passthrough, GetChannelMap(format, m_passthrough)); -+ SetAudioProps(m_passthrough, GetChannelMap(format.m_channelLayout, m_passthrough)); - - m_format = format; - m_sinkbuffer_sec_per_byte = 1.0 / (double)(m_format.m_frameSize * m_format.m_sampleRate); --- -1.9.3 - - -From 6ce35e828b39e0a8f2d81cb6fb6162edd53468a8 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 7 Apr 2014 17:37:41 +0100 -Subject: [PATCH 65/94] [omxplayer] Remove PCMRemap and handle multichannel - mixing like ActiveAE does - ---- - tools/buildsteps/rbpi/config-xbmc-makefile | 4 +- - tools/depends/target/alsa-lib/Makefile | 2 +- - tools/depends/target/libcec/Makefile | 2 +- - xbmc/cores/omxplayer/Makefile.in | 1 - - xbmc/cores/omxplayer/OMXAudio.cpp | 395 +++++++++----- - xbmc/cores/omxplayer/OMXAudio.h | 9 +- - xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp | 39 +- - xbmc/cores/omxplayer/OMXAudioCodecOMX.h | 5 +- - xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 4 +- - xbmc/cores/omxplayer/PCMRemap.cpp | 813 ----------------------------- - xbmc/cores/omxplayer/PCMRemap.h | 151 ------ - 11 files changed, 294 insertions(+), 1131 deletions(-) - delete mode 100644 xbmc/cores/omxplayer/PCMRemap.cpp - delete mode 100644 xbmc/cores/omxplayer/PCMRemap.h - -diff --git a/tools/buildsteps/rbpi/config-xbmc-makefile b/tools/buildsteps/rbpi/config-xbmc-makefile -index 761a3b4..18600e2 100644 ---- a/tools/buildsteps/rbpi/config-xbmc-makefile -+++ b/tools/buildsteps/rbpi/config-xbmc-makefile -@@ -12,10 +12,10 @@ CONFIGURE = cp -f $(CONFIG_SUB) $(CONFIG_GUESS) build-aux/ ;\ - --disable-gl --enable-gles --enable-airplay \ - --enable-airtunes --enable-libcec --enable-player=omxplayer \ - --disable-sdl --disable-x11 --disable-xrandr --disable-openmax \ -- --disable-optical-drive --disable-dvdcss --disable-joystick \ -+ --disable-optical-drive --enable-dvdcss --enable-openmax --disable-joystick \ - --disable-crystalhd --disable-vtbdecoder --disable-vaapi \ - --disable-vdpau --disable-projectm --disable-rsxs --disable-fishbmc \ -- --disable-alsa -+ --enable-alsa - - all: $(SOURCE)/libxbmc.so - -diff --git a/tools/depends/target/alsa-lib/Makefile b/tools/depends/target/alsa-lib/Makefile -index b03fc19..a04d933 100644 ---- a/tools/depends/target/alsa-lib/Makefile -+++ b/tools/depends/target/alsa-lib/Makefile -@@ -19,7 +19,7 @@ CONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; \ - --with-ctl-plugins=ext \ - --with-pcm-plugins="copy,linear,route,mulaw,alaw,adpcm,rate,plug,multi,file,null,empty,share,meter,hooks,lfloat,ladspa,asym,iec958,softvol,extplug,ioplug,mmap_emul" \ - --disable-resmgr --enable-aload --enable-mixer --enable-pcm --disable-rawmidi --enable-hwdep --disable-seq --disable-alisp --disable-old-symbols --disable-python \ -- --with-softfloat=yes --with-libdl=yes --with-pthread=yes --with-librt=no --disable-shared \ -+ --with-softfloat=yes --with-libdl=yes --with-pthread=yes --with-librt=no --enable-shared \ - - LIBDYLIB=$(PLATFORM)/src/.libs/$(LIBNAME).a - -diff --git a/tools/depends/target/libcec/Makefile b/tools/depends/target/libcec/Makefile -index 16fec1b..d18f1c8 100644 ---- a/tools/depends/target/libcec/Makefile -+++ b/tools/depends/target/libcec/Makefile -@@ -8,7 +8,7 @@ SOURCE=$(LIBNAME)-$(VERSION)-2 - ARCHIVE=$(SOURCE).tar.gz - - # configuration settings --CONFIGURE=./configure --prefix=$(PREFIX) --disable-rpi \ -+CONFIGURE=./configure --prefix=$(PREFIX) --enable-rpi \ - - LIBDYLIB=$(PLATFORM)/src/lib/.libs/libcec.la - -diff --git a/xbmc/cores/omxplayer/Makefile.in b/xbmc/cores/omxplayer/Makefile.in -index 3163282..e5cad70 100644 ---- a/xbmc/cores/omxplayer/Makefile.in -+++ b/xbmc/cores/omxplayer/Makefile.in -@@ -7,7 +7,6 @@ SRCS += OMXAudioCodecOMX.cpp - SRCS += OMXPlayerAudio.cpp - SRCS += OMXPlayerVideo.cpp - SRCS += OMXImage.cpp --SRCS += PCMRemap.cpp - - LIB = omxplayer.a - -diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp -index 72e42ec..d9beb68 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXAudio.cpp -@@ -29,6 +29,7 @@ - #include "OMXAudio.h" - #include "Application.h" - #include "utils/log.h" -+#include "linux/RBP.h" - - #define CLASSNAME "COMXAudio" - -@@ -40,6 +41,7 @@ - #include "guilib/LocalizeStrings.h" - #include "cores/AudioEngine/Utils/AEConvert.h" - #include "cores/AudioEngine/AEFactory.h" -+#include "DllSwResample.h" - - using namespace std; - -@@ -404,28 +406,147 @@ bool COMXAudio::PortSettingsChanged() - return true; - } - --static unsigned count_bits(int64_t value) -+static uint64_t GetAVChannelLayout(CAEChannelInfo &info) - { -- unsigned bits = 0; -- for(;value;++bits) -- value &= value - 1; -- return bits; -+ #ifdef DEBUG_VERBOSE -+ CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__); -+ #endif -+ uint64_t channelLayout = 0; -+ if (info.HasChannel(AE_CH_FL)) channelLayout |= AV_CH_FRONT_LEFT; -+ if (info.HasChannel(AE_CH_FR)) channelLayout |= AV_CH_FRONT_RIGHT; -+ if (info.HasChannel(AE_CH_FC)) channelLayout |= AV_CH_FRONT_CENTER; -+ if (info.HasChannel(AE_CH_LFE)) channelLayout |= AV_CH_LOW_FREQUENCY; -+ if (info.HasChannel(AE_CH_BL)) channelLayout |= AV_CH_BACK_LEFT; -+ if (info.HasChannel(AE_CH_BR)) channelLayout |= AV_CH_BACK_RIGHT; -+ if (info.HasChannel(AE_CH_FLOC)) channelLayout |= AV_CH_FRONT_LEFT_OF_CENTER; -+ if (info.HasChannel(AE_CH_FROC)) channelLayout |= AV_CH_FRONT_RIGHT_OF_CENTER; -+ if (info.HasChannel(AE_CH_BC)) channelLayout |= AV_CH_BACK_CENTER; -+ if (info.HasChannel(AE_CH_SL)) channelLayout |= AV_CH_SIDE_LEFT; -+ if (info.HasChannel(AE_CH_SR)) channelLayout |= AV_CH_SIDE_RIGHT; -+ if (info.HasChannel(AE_CH_TC)) channelLayout |= AV_CH_TOP_CENTER; -+ if (info.HasChannel(AE_CH_TFL)) channelLayout |= AV_CH_TOP_FRONT_LEFT; -+ if (info.HasChannel(AE_CH_TFC)) channelLayout |= AV_CH_TOP_FRONT_CENTER; -+ if (info.HasChannel(AE_CH_TFR)) channelLayout |= AV_CH_TOP_FRONT_RIGHT; -+ if (info.HasChannel(AE_CH_TBL)) channelLayout |= AV_CH_TOP_BACK_LEFT; -+ if (info.HasChannel(AE_CH_TBC)) channelLayout |= AV_CH_TOP_BACK_CENTER; -+ if (info.HasChannel(AE_CH_TBR)) channelLayout |= AV_CH_TOP_BACK_RIGHT; -+ -+ return channelLayout; -+} -+ -+static void SetAudioProps(bool stream_channels, uint32_t channel_map) -+{ -+ char command[80], response[80]; -+ -+ sprintf(command, "hdmi_stream_channels %d", stream_channels ? 1 : 0); -+ vc_gencmd(response, sizeof response, command); -+ -+ sprintf(command, "hdmi_channel_map 0x%08x", channel_map); -+ vc_gencmd(response, sizeof response, command); -+ -+ CLog::Log(LOGDEBUG, "%s:%s hdmi_stream_channels %d hdmi_channel_map %08x", CLASSNAME, __func__, stream_channels, channel_map); -+} -+ -+static uint32_t GetChannelMap(const CAEChannelInfo &channelLayout, bool passthrough) -+{ -+ unsigned int channels = channelLayout.Count(); -+ uint32_t channel_map = 0; -+ if (passthrough) -+ return 0; -+ -+ static const unsigned char map_normal[] = -+ { -+ 0, //AE_CH_RAW , -+ 1, //AE_CH_FL -+ 2, //AE_CH_FR -+ 4, //AE_CH_FC -+ 3, //AE_CH_LFE -+ 7, //AE_CH_BL -+ 8, //AE_CH_BR -+ 1, //AE_CH_FLOC, -+ 2, //AE_CH_FROC, -+ 4, //AE_CH_BC, -+ 5, //AE_CH_SL -+ 6, //AE_CH_SR -+ }; -+ static const unsigned char map_back[] = -+ { -+ 0, //AE_CH_RAW , -+ 1, //AE_CH_FL -+ 2, //AE_CH_FR -+ 4, //AE_CH_FC -+ 3, //AE_CH_LFE -+ 5, //AE_CH_BL -+ 6, //AE_CH_BR -+ 1, //AE_CH_FLOC, -+ 2, //AE_CH_FROC, -+ 4, //AE_CH_BC, -+ 5, //AE_CH_SL -+ 6, //AE_CH_SR -+ }; -+ const unsigned char *map = map_normal; -+ // According to CEA-861-D only RL and RR are known. In case of a format having SL and SR channels -+ // but no BR BL channels, we use the wide map in order to open only the num of channels really -+ // needed. -+ if (channelLayout.HasChannel(AE_CH_BL) && !channelLayout.HasChannel(AE_CH_SL)) -+ map = map_back; -+ -+ for (unsigned int i = 0; i < channels; ++i) -+ { -+ AEChannel c = channelLayout[i]; -+ unsigned int chan = 0; -+ if ((unsigned int)c < sizeof map_normal / sizeof *map_normal) -+ chan = map[(unsigned int)c]; -+ if (chan > 0) -+ channel_map |= (chan-1) << (3*i); -+ } -+ // These numbers are from Table 28 Audio InfoFrame Data byte 4 of CEA 861 -+ // and describe the speaker layout -+ static const uint8_t cea_map[] = { -+ 0xff, // 0 -+ 0xff, // 1 -+ 0x00, // 2.0 -+ 0x02, // 3.0 -+ 0x08, // 4.0 -+ 0x0a, // 5.0 -+ 0xff, // 6 -+ 0x12, // 7.0 -+ 0xff, // 8 -+ }; -+ static const uint8_t cea_map_lfe[] = { -+ 0xff, // 0 -+ 0xff, // 1 -+ 0xff, // 2 -+ 0x01, // 2.1 -+ 0x03, // 3.1 -+ 0x09, // 4.1 -+ 0x0b, // 5.1 -+ 0xff, // 7 -+ 0x13, // 7.1 -+ }; -+ uint8_t cea = channelLayout.HasChannel(AE_CH_LFE) ? cea_map_lfe[channels] : cea_map[channels]; -+ if (cea == 0xff) -+ CLog::Log(LOGERROR, "%s::%s - Unexpected CEA mapping %d,%d", CLASSNAME, __func__, channelLayout.HasChannel(AE_CH_LFE), channels); -+ -+ channel_map |= cea << 24; -+ -+ return channel_map; - } - --bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, uint64_t channelMap, bool bUsePassthrough, bool bUseHWDecode) -+bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, CAEChannelInfo channelMap, bool bUsePassthrough, bool bUseHWDecode) - { - CSingleLock lock (m_critSection); - OMX_ERRORTYPE omx_err; - - Deinitialize(); - -- if(!m_dllAvUtil.Load()) -+ if (!m_dllAvUtil.Load()) - return false; - - m_HWDecode = bUseHWDecode; - m_Passthrough = bUsePassthrough; - -- m_InputChannels = count_bits(channelMap); -+ m_InputChannels = channelMap.Count(); - m_format = format; - - if(m_InputChannels == 0) -@@ -471,26 +592,133 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo - - if (!m_Passthrough) - { -- enum PCMChannels inLayout[OMX_AUDIO_MAXCHANNELS]; -- enum PCMChannels outLayout[OMX_AUDIO_MAXCHANNELS]; -- enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); -+ bool upmix = CSettings::Get().GetBool("audiooutput.stereoupmix"); -+ bool normalize = CSettings::Get().GetBool("audiooutput.normalizelevels"); -+ void *remapLayout = NULL; -+ -+ CAEChannelInfo stdLayout = (enum AEStdChLayout)CSettings::Get().GetInt("audiooutput.channels"); -+ - // ignore layout setting for analogue - if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "PI:Analogue") -- layout = PCM_LAYOUT_2_0; -+ stdLayout = AE_CH_LAYOUT_2_0; - - // force out layout to stereo if input is not multichannel - it gives the receiver a chance to upmix -- if (channelMap == (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT) || channelMap == AV_CH_FRONT_CENTER) -- layout = PCM_LAYOUT_2_0; -- BuildChannelMap(inLayout, channelMap); -- m_OutputChannels = BuildChannelMapCEA(outLayout, GetChannelLayout(layout)); -- CPCMRemap m_remap; -- m_remap.Reset(); -- /*outLayout = */m_remap.SetInputFormat (m_InputChannels, inLayout, CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8, m_format.m_sampleRate, layout); -- m_remap.SetOutputFormat(m_OutputChannels, outLayout); -- m_remap.GetDownmixMatrix(m_downmix_matrix); -- m_wave_header.dwChannelMask = channelMap; -- BuildChannelMapOMX(m_input_channels, channelMap); -- BuildChannelMapOMX(m_output_channels, GetChannelLayout(layout)); -+ if (m_InputChannels <= 2) -+ stdLayout = AE_CH_LAYOUT_2_0; -+ -+ uint64_t m_dst_chan_layout = GetAVChannelLayout(stdLayout); -+ uint64_t m_src_chan_layout = GetAVChannelLayout(channelMap); -+ m_OutputChannels = stdLayout.Count(); -+ -+ int m_dst_channels = m_OutputChannels; -+ int m_src_channels = m_InputChannels; -+ SetAudioProps(m_Passthrough, GetChannelMap(stdLayout, m_Passthrough)); -+ -+ CLog::Log(LOGINFO, "%s::%s remap:%p chan:%d->%d norm:%d upmix:%d %llx:%llx", CLASSNAME, __func__, remapLayout, m_src_channels, m_dst_channels, normalize, upmix, m_src_chan_layout, m_dst_chan_layout); -+ -+ // this code is just uses ffmpeg to produce the 8x8 mixing matrix -+ // dummy sample rate and format, as we only care about channel mapping -+ DllSwResample m_dllSwResample; -+ if (!m_dllSwResample.Load()) -+ return false; -+ -+ SwrContext *m_pContext = m_dllSwResample.swr_alloc_set_opts(NULL, m_dst_chan_layout, AV_SAMPLE_FMT_FLT, 48000, -+ m_src_chan_layout, AV_SAMPLE_FMT_FLT, 48000, 0, NULL); -+ if(!m_pContext) -+ { -+ CLog::Log(LOGERROR, "COMXAudio::Init - create context failed"); -+ return false; -+ } -+ // tell resampler to clamp float values -+ // not required for sink stage (remapLayout == true) -+ if (!remapLayout && normalize) -+ { -+ av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0); -+ } -+ -+ // stereo upmix -+ if (upmix && m_src_channels == 2 && m_dst_channels > 2) -+ { -+ double m_rematrix[AE_CH_MAX][AE_CH_MAX]; -+ memset(m_rematrix, 0, sizeof(m_rematrix)); -+ for (int out=0; out<m_dst_channels; out++) -+ { -+ uint64_t out_chan = m_dllAvUtil.av_channel_layout_extract_channel(m_dst_chan_layout, out); -+ switch(out_chan) -+ { -+ case AV_CH_FRONT_LEFT: -+ case AV_CH_BACK_LEFT: -+ case AV_CH_SIDE_LEFT: -+ m_rematrix[out][0] = 1.0; -+ break; -+ case AV_CH_FRONT_RIGHT: -+ case AV_CH_BACK_RIGHT: -+ case AV_CH_SIDE_RIGHT: -+ m_rematrix[out][1] = 1.0; -+ break; -+ case AV_CH_FRONT_CENTER: -+ m_rematrix[out][0] = 0.5; -+ m_rematrix[out][1] = 0.5; -+ break; -+ case AV_CH_LOW_FREQUENCY: -+ m_rematrix[out][0] = 0.5; -+ m_rematrix[out][1] = 0.5; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ if (m_dllSwResample.swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0) -+ { -+ CLog::Log(LOGERROR, "COMXAudio::Init - setting channel matrix failed"); -+ return false; -+ } -+ } -+ -+ if (m_dllSwResample.swr_init(m_pContext) < 0) -+ { -+ CLog::Log(LOGERROR, "COMXAudio::Init - init resampler failed"); -+ return false; -+ } -+ -+ const int samples = 8; -+ uint8_t *output, *input; -+ av_samples_alloc(&output, NULL, m_dst_channels, samples, AV_SAMPLE_FMT_FLT, 1); -+ av_samples_alloc(&input , NULL, m_src_channels, samples, AV_SAMPLE_FMT_FLT, 1); -+ -+ // Produce "identity" samples -+ float *f = (float *)input; -+ for (int j=0; j < samples; j++) -+ for (int i=0; i < m_src_channels; i++) -+ *f++ = i == j ? 1.0f : 0.0f; -+ -+ int ret = m_dllSwResample.swr_convert(m_pContext, &output, samples, (const uint8_t **)&input, samples); -+ if (ret < 0) -+ CLog::Log(LOGERROR, "COMXAudio::Resample - resample failed"); -+ -+ f = (float *)output; -+ for (int j=0; j < 8; j++) -+ { -+ for (int i=0; i < m_dst_channels; i++) -+ m_downmix_matrix[8*i+j] = *f++; -+ for (int i=m_dst_channels; i < 8; i++) -+ m_downmix_matrix[8*i+j] = 0.0f; -+ } -+ -+ for (int j=0; j < 8; j++) -+ { -+ char s[128] = {}, *t=s; -+ for (int i=0; i < 8; i++) -+ t += sprintf(t, "% 6.2f ", m_downmix_matrix[j*8+i]); -+ CLog::Log(LOGINFO, "%s::%s %s", CLASSNAME, __func__, s); -+ } -+ av_freep(&input); -+ av_freep(&output); -+ m_dllSwResample.swr_free(&m_pContext); -+ m_dllSwResample.Unload(); -+ -+ m_wave_header.dwChannelMask = m_src_chan_layout; - } - - m_SampleRate = m_format.m_sampleRate; -@@ -1605,122 +1833,3 @@ void COMXAudio::CheckOutputBufferSize(void **buffer, int *oldSize, int newSize) - } - memset(*buffer, 0x0, *oldSize); - } -- --void COMXAudio::BuildChannelMap(enum PCMChannels *channelMap, uint64_t layout) --{ -- int index = 0; -- if (layout & AV_CH_FRONT_LEFT ) channelMap[index++] = PCM_FRONT_LEFT ; -- if (layout & AV_CH_FRONT_RIGHT ) channelMap[index++] = PCM_FRONT_RIGHT ; -- if (layout & AV_CH_FRONT_CENTER ) channelMap[index++] = PCM_FRONT_CENTER ; -- if (layout & AV_CH_LOW_FREQUENCY ) channelMap[index++] = PCM_LOW_FREQUENCY ; -- if (layout & AV_CH_BACK_LEFT ) channelMap[index++] = PCM_BACK_LEFT ; -- if (layout & AV_CH_BACK_RIGHT ) channelMap[index++] = PCM_BACK_RIGHT ; -- if (layout & AV_CH_FRONT_LEFT_OF_CENTER ) channelMap[index++] = PCM_FRONT_LEFT_OF_CENTER ; -- if (layout & AV_CH_FRONT_RIGHT_OF_CENTER) channelMap[index++] = PCM_FRONT_RIGHT_OF_CENTER; -- if (layout & AV_CH_BACK_CENTER ) channelMap[index++] = PCM_BACK_CENTER ; -- if (layout & AV_CH_SIDE_LEFT ) channelMap[index++] = PCM_SIDE_LEFT ; -- if (layout & AV_CH_SIDE_RIGHT ) channelMap[index++] = PCM_SIDE_RIGHT ; -- if (layout & AV_CH_TOP_CENTER ) channelMap[index++] = PCM_TOP_CENTER ; -- if (layout & AV_CH_TOP_FRONT_LEFT ) channelMap[index++] = PCM_TOP_FRONT_LEFT ; -- if (layout & AV_CH_TOP_FRONT_CENTER ) channelMap[index++] = PCM_TOP_FRONT_CENTER ; -- if (layout & AV_CH_TOP_FRONT_RIGHT ) channelMap[index++] = PCM_TOP_FRONT_RIGHT ; -- if (layout & AV_CH_TOP_BACK_LEFT ) channelMap[index++] = PCM_TOP_BACK_LEFT ; -- if (layout & AV_CH_TOP_BACK_CENTER ) channelMap[index++] = PCM_TOP_BACK_CENTER ; -- if (layout & AV_CH_TOP_BACK_RIGHT ) channelMap[index++] = PCM_TOP_BACK_RIGHT ; -- while (index<OMX_AUDIO_MAXCHANNELS) -- channelMap[index++] = PCM_INVALID; --} -- --// See CEA spec: Table 20, Audio InfoFrame data byte 4 for the ordering here --int COMXAudio::BuildChannelMapCEA(enum PCMChannels *channelMap, uint64_t layout) --{ -- int index = 0; -- if (layout & AV_CH_FRONT_LEFT ) channelMap[index++] = PCM_FRONT_LEFT; -- if (layout & AV_CH_FRONT_RIGHT ) channelMap[index++] = PCM_FRONT_RIGHT; -- if (layout & AV_CH_LOW_FREQUENCY ) channelMap[index++] = PCM_LOW_FREQUENCY; -- if (layout & AV_CH_FRONT_CENTER ) channelMap[index++] = PCM_FRONT_CENTER; -- if (layout & AV_CH_BACK_LEFT ) channelMap[index++] = PCM_BACK_LEFT; -- if (layout & AV_CH_BACK_RIGHT ) channelMap[index++] = PCM_BACK_RIGHT; -- if (layout & AV_CH_SIDE_LEFT ) channelMap[index++] = PCM_SIDE_LEFT; -- if (layout & AV_CH_SIDE_RIGHT ) channelMap[index++] = PCM_SIDE_RIGHT; -- -- while (index<OMX_AUDIO_MAXCHANNELS) -- channelMap[index++] = PCM_INVALID; -- -- int num_channels = 0; -- for (index=0; index<OMX_AUDIO_MAXCHANNELS; index++) -- if (channelMap[index] != PCM_INVALID) -- num_channels = index+1; -- return num_channels; --} -- --void COMXAudio::BuildChannelMapOMX(enum OMX_AUDIO_CHANNELTYPE * channelMap, uint64_t layout) --{ -- int index = 0; -- -- if (layout & AV_CH_FRONT_LEFT ) channelMap[index++] = OMX_AUDIO_ChannelLF; -- if (layout & AV_CH_FRONT_RIGHT ) channelMap[index++] = OMX_AUDIO_ChannelRF; -- if (layout & AV_CH_FRONT_CENTER ) channelMap[index++] = OMX_AUDIO_ChannelCF; -- if (layout & AV_CH_LOW_FREQUENCY ) channelMap[index++] = OMX_AUDIO_ChannelLFE; -- if (layout & AV_CH_BACK_LEFT ) channelMap[index++] = OMX_AUDIO_ChannelLR; -- if (layout & AV_CH_BACK_RIGHT ) channelMap[index++] = OMX_AUDIO_ChannelRR; -- if (layout & AV_CH_SIDE_LEFT ) channelMap[index++] = OMX_AUDIO_ChannelLS; -- if (layout & AV_CH_SIDE_RIGHT ) channelMap[index++] = OMX_AUDIO_ChannelRS; -- if (layout & AV_CH_BACK_CENTER ) channelMap[index++] = OMX_AUDIO_ChannelCS; -- // following are not in openmax spec, but gpu does accept them -- if (layout & AV_CH_FRONT_LEFT_OF_CENTER ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)10; -- if (layout & AV_CH_FRONT_RIGHT_OF_CENTER) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)11; -- if (layout & AV_CH_TOP_CENTER ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)12; -- if (layout & AV_CH_TOP_FRONT_LEFT ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)13; -- if (layout & AV_CH_TOP_FRONT_CENTER ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)14; -- if (layout & AV_CH_TOP_FRONT_RIGHT ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)15; -- if (layout & AV_CH_TOP_BACK_LEFT ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)16; -- if (layout & AV_CH_TOP_BACK_CENTER ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)17; -- if (layout & AV_CH_TOP_BACK_RIGHT ) channelMap[index++] = (enum OMX_AUDIO_CHANNELTYPE)18; -- -- while (index<OMX_AUDIO_MAXCHANNELS) -- channelMap[index++] = OMX_AUDIO_ChannelNone; --} -- --uint64_t COMXAudio::GetChannelLayout(enum PCMLayout layout) --{ -- uint64_t layouts[] = { -- /* 2.0 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT, -- /* 2.1 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_LOW_FREQUENCY, -- /* 3.0 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER, -- /* 3.1 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER | 1<<PCM_LOW_FREQUENCY, -- /* 4.0 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT, -- /* 4.1 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT | 1<<PCM_LOW_FREQUENCY, -- /* 5.0 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT, -- /* 5.1 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT | 1<<PCM_LOW_FREQUENCY, -- /* 7.0 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER | 1<<PCM_SIDE_LEFT | 1<<PCM_SIDE_RIGHT | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT, -- /* 7.1 */ 1<<PCM_FRONT_LEFT | 1<<PCM_FRONT_RIGHT | 1<<PCM_FRONT_CENTER | 1<<PCM_SIDE_LEFT | 1<<PCM_SIDE_RIGHT | 1<<PCM_BACK_LEFT | 1<<PCM_BACK_RIGHT | 1<<PCM_LOW_FREQUENCY -- }; -- return (int)layout < 10 ? layouts[(int)layout] : 0; --} -- --CAEChannelInfo COMXAudio::GetAEChannelLayout(uint64_t layout) --{ -- CAEChannelInfo m_channelLayout; -- m_channelLayout.Reset(); -- -- if (layout & AV_CH_FRONT_LEFT ) m_channelLayout += AE_CH_FL ; -- if (layout & AV_CH_FRONT_RIGHT ) m_channelLayout += AE_CH_FR ; -- if (layout & AV_CH_FRONT_CENTER ) m_channelLayout += AE_CH_FC ; -- if (layout & AV_CH_LOW_FREQUENCY ) m_channelLayout += AE_CH_LFE ; -- if (layout & AV_CH_BACK_LEFT ) m_channelLayout += AE_CH_BL ; -- if (layout & AV_CH_BACK_RIGHT ) m_channelLayout += AE_CH_BR ; -- if (layout & AV_CH_FRONT_LEFT_OF_CENTER ) m_channelLayout += AE_CH_FLOC; -- if (layout & AV_CH_FRONT_RIGHT_OF_CENTER) m_channelLayout += AE_CH_FROC; -- if (layout & AV_CH_BACK_CENTER ) m_channelLayout += AE_CH_BC ; -- if (layout & AV_CH_SIDE_LEFT ) m_channelLayout += AE_CH_SL ; -- if (layout & AV_CH_SIDE_RIGHT ) m_channelLayout += AE_CH_SR ; -- if (layout & AV_CH_TOP_CENTER ) m_channelLayout += AE_CH_TC ; -- if (layout & AV_CH_TOP_FRONT_LEFT ) m_channelLayout += AE_CH_TFL ; -- if (layout & AV_CH_TOP_FRONT_CENTER ) m_channelLayout += AE_CH_TFC ; -- if (layout & AV_CH_TOP_FRONT_RIGHT ) m_channelLayout += AE_CH_TFR ; -- if (layout & AV_CH_TOP_BACK_LEFT ) m_channelLayout += AE_CH_BL ; -- if (layout & AV_CH_TOP_BACK_CENTER ) m_channelLayout += AE_CH_BC ; -- if (layout & AV_CH_TOP_BACK_RIGHT ) m_channelLayout += AE_CH_BR ; -- return m_channelLayout; --} -diff --git a/xbmc/cores/omxplayer/OMXAudio.h b/xbmc/cores/omxplayer/OMXAudio.h -index b0264d8..a1c59da 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.h -+++ b/xbmc/cores/omxplayer/OMXAudio.h -@@ -38,7 +38,6 @@ - #include "OMXCore.h" - #include "DllAvCodec.h" - #include "DllAvUtil.h" --#include "PCMRemap.h" - - #include "threads/CriticalSection.h" - -@@ -61,7 +60,7 @@ class COMXAudio - float GetCacheTime(); - float GetCacheTotal(); - COMXAudio(); -- bool Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, uint64_t channelMap, bool bUsePassthrough, bool bUseHWDecode); -+ bool Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, CAEChannelInfo channelMap, bool bUsePassthrough, bool bUseHWDecode); - bool PortSettingsChanged(); - ~COMXAudio(); - -@@ -99,12 +98,6 @@ class COMXAudio - unsigned int GetAudioRenderingLatency(); - float GetMaxLevel(double &pts); - -- void BuildChannelMap(enum PCMChannels *channelMap, uint64_t layout); -- int BuildChannelMapCEA(enum PCMChannels *channelMap, uint64_t layout); -- void BuildChannelMapOMX(enum OMX_AUDIO_CHANNELTYPE *channelMap, uint64_t layout); -- uint64_t GetChannelLayout(enum PCMLayout layout); -- CAEChannelInfo GetAEChannelLayout(uint64_t layout); -- - private: - IAudioCallback* m_pCallback; - bool m_Initialized; -diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -index 7f6ef6e..5e47317 100644 ---- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.cpp -@@ -26,7 +26,6 @@ - - #include "cores/AudioEngine/Utils/AEUtil.h" - #include "settings/Settings.h" --#include "PCMRemap.h" - - // the size of the audio_render output port buffers - #define AUDIO_DECODE_OUTPUT_BUFFER (32*1024) -@@ -93,12 +92,11 @@ bool COMXAudioCodecOMX::Open(CDVDStreamInfo &hints) - m_pCodecContext->block_align = hints.blockalign; - m_pCodecContext->bit_rate = hints.bitrate; - m_pCodecContext->bits_per_coded_sample = hints.bitspersample; -- enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); - if (hints.codec == AV_CODEC_ID_TRUEHD) - { -- if (layout == PCM_LAYOUT_2_0) -+ if (CSettings::Get().GetInt("audiooutput.channels") == AE_CH_LAYOUT_2_0) - m_pCodecContext->request_channel_layout = AV_CH_LAYOUT_STEREO; -- else if (layout <= PCM_LAYOUT_5_1) -+ else if (CSettings::Get().GetInt("audiooutput.channels") == AE_CH_LAYOUT_5_1) - m_pCodecContext->request_channel_layout = AV_CH_LAYOUT_5POINT1; - } - if (m_pCodecContext->request_channel_layout) -@@ -323,7 +321,7 @@ int COMXAudioCodecOMX::GetBitRate() - return m_pCodecContext->bit_rate; - } - --static unsigned count_bits(int64_t value) -+static unsigned count_bits(uint64_t value) - { - unsigned bits = 0; - for(;value;++bits) -@@ -331,9 +329,10 @@ static unsigned count_bits(int64_t value) - return bits; - } - --uint64_t COMXAudioCodecOMX::GetChannelMap() -+void COMXAudioCodecOMX::BuildChannelMap() - { - uint64_t layout; -+ - int bits = count_bits(m_pCodecContext->channel_layout); - if (bits == m_pCodecContext->channels) - layout = m_pCodecContext->channel_layout; -@@ -342,5 +341,31 @@ uint64_t COMXAudioCodecOMX::GetChannelMap() - CLog::Log(LOGINFO, "COMXAudioCodecOMX::GetChannelMap - FFmpeg reported %d channels, but the layout contains %d ignoring", m_pCodecContext->channels, bits); - layout = m_dllAvUtil.av_get_default_channel_layout(m_pCodecContext->channels); - } -- return layout; -+ -+ m_channelLayout.Reset(); -+ -+ if (layout & AV_CH_FRONT_LEFT ) m_channelLayout += AE_CH_FL ; -+ if (layout & AV_CH_FRONT_RIGHT ) m_channelLayout += AE_CH_FR ; -+ if (layout & AV_CH_FRONT_CENTER ) m_channelLayout += AE_CH_FC ; -+ if (layout & AV_CH_LOW_FREQUENCY ) m_channelLayout += AE_CH_LFE ; -+ if (layout & AV_CH_BACK_LEFT ) m_channelLayout += AE_CH_BL ; -+ if (layout & AV_CH_BACK_RIGHT ) m_channelLayout += AE_CH_BR ; -+ if (layout & AV_CH_FRONT_LEFT_OF_CENTER ) m_channelLayout += AE_CH_FLOC; -+ if (layout & AV_CH_FRONT_RIGHT_OF_CENTER) m_channelLayout += AE_CH_FROC; -+ if (layout & AV_CH_BACK_CENTER ) m_channelLayout += AE_CH_BC ; -+ if (layout & AV_CH_SIDE_LEFT ) m_channelLayout += AE_CH_SL ; -+ if (layout & AV_CH_SIDE_RIGHT ) m_channelLayout += AE_CH_SR ; -+ if (layout & AV_CH_TOP_CENTER ) m_channelLayout += AE_CH_TC ; -+ if (layout & AV_CH_TOP_FRONT_LEFT ) m_channelLayout += AE_CH_TFL ; -+ if (layout & AV_CH_TOP_FRONT_CENTER ) m_channelLayout += AE_CH_TFC ; -+ if (layout & AV_CH_TOP_FRONT_RIGHT ) m_channelLayout += AE_CH_TFR ; -+ if (layout & AV_CH_TOP_BACK_LEFT ) m_channelLayout += AE_CH_BL ; -+ if (layout & AV_CH_TOP_BACK_CENTER ) m_channelLayout += AE_CH_BC ; -+ if (layout & AV_CH_TOP_BACK_RIGHT ) m_channelLayout += AE_CH_BR ; -+} -+ -+CAEChannelInfo COMXAudioCodecOMX::GetChannelMap() -+{ -+ BuildChannelMap(); -+ return m_channelLayout; - } -diff --git a/xbmc/cores/omxplayer/OMXAudioCodecOMX.h b/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -index 66e5b4a..6e6b226 100644 ---- a/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -+++ b/xbmc/cores/omxplayer/OMXAudioCodecOMX.h -@@ -40,7 +40,8 @@ class COMXAudioCodecOMX - int GetData(BYTE** dst, double &dts, double &pts); - void Reset(); - int GetChannels(); -- uint64_t GetChannelMap(); -+ void BuildChannelMap(); -+ CAEChannelInfo GetChannelMap(); - int GetSampleRate(); - int GetBitsPerSample(); - static const char* GetName() { return "FFmpeg"; } -@@ -62,7 +63,7 @@ class COMXAudioCodecOMX - bool m_bOpenedCodec; - - int m_channels; -- -+ CAEChannelInfo m_channelLayout; - bool m_bFirstFrame; - bool m_bGotFrame; - bool m_bNoConcatenate; -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -index a4c11777..d3348ec 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -@@ -567,13 +567,13 @@ bool OMXPlayerAudio::OpenDecoder() - /* GetDataFormat is setting up evrything */ - m_format.m_dataFormat = GetDataFormat(m_hints); - -- uint64_t channelMap = 0; -+ CAEChannelInfo channelMap; - if (m_pAudioCodec && !m_passthrough) - channelMap = m_pAudioCodec->GetChannelMap(); - else if (m_passthrough) - // we just want to get the channel count right to stop OMXAudio.cpp rejecting stream - // the actual layout is not used -- channelMap = (1<<m_nChannels)-1; -+ channelMap = AE_CH_LAYOUT_5_1; - bool bAudioRenderOpen = m_omxAudio.Initialize(m_format, m_av_clock, m_hints, channelMap, m_passthrough, m_hw_decode); - - m_codec_name = ""; -diff --git a/xbmc/cores/omxplayer/PCMRemap.cpp b/xbmc/cores/omxplayer/PCMRemap.cpp -deleted file mode 100644 -index f8acfcc..0000000 ---- a/xbmc/cores/omxplayer/PCMRemap.cpp -+++ /dev/null -@@ -1,813 +0,0 @@ --/* -- * Copyright (C) 2005-2010 Team XBMC -- * http://xbmc.org -- * -- * This Program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This Program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with XBMC; see the file COPYING. If not, write to -- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -- * http://www.gnu.org/copyleft/gpl.html -- * -- */ -- --#ifndef __STDC_LIMIT_MACROS --#define __STDC_LIMIT_MACROS --#endif -- --#include <cstdlib> --#include <string.h> --#include <stdio.h> --#include <math.h> -- --//#include "MathUtils.h" --#include "PCMRemap.h" --#include "utils/log.h" --#include "utils/StringUtils.h" --#include "settings/Settings.h" --#include "settings/AdvancedSettings.h" --#ifdef _WIN32 --#include "../win32/PlatformDefs.h" --#endif -- --static enum PCMChannels PCMLayoutMap[PCM_MAX_LAYOUT][PCM_MAX_CH + 1] = --{ -- /* 2.0 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_INVALID}, -- /* 2.1 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_LOW_FREQUENCY, PCM_INVALID}, -- /* 3.0 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_INVALID}, -- /* 3.1 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_LOW_FREQUENCY, PCM_INVALID}, -- /* 4.0 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_INVALID}, -- /* 4.1 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_LOW_FREQUENCY, PCM_INVALID}, -- /* 5.0 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_INVALID}, -- /* 5.1 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_LOW_FREQUENCY, PCM_INVALID}, -- /* 7.0 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_SIDE_LEFT, PCM_SIDE_RIGHT, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_INVALID}, -- /* 7.1 */ {PCM_FRONT_LEFT, PCM_FRONT_RIGHT, PCM_FRONT_CENTER, PCM_SIDE_LEFT, PCM_SIDE_RIGHT, PCM_BACK_LEFT, PCM_BACK_RIGHT, PCM_LOW_FREQUENCY, PCM_INVALID} --}; -- --/* -- map missing output into channel @ volume level -- the order of this table is important, mix tables can not depend on channels that have not been defined yet -- eg, FC can only be mixed into FL, FR as they are the only channels that have been defined --*/ --#define PCM_MAX_MIX 3 --static struct PCMMapInfo PCMDownmixTable[PCM_MAX_CH][PCM_MAX_MIX] = --{ -- /* PCM_FRONT_LEFT */ -- { -- {PCM_INVALID} -- }, -- /* PCM_FRONT_RIGHT */ -- { -- {PCM_INVALID} -- }, -- /* PCM_FRONT_CENTER */ -- { -- {PCM_FRONT_LEFT_OF_CENTER , 1.0}, -- {PCM_FRONT_RIGHT_OF_CENTER, 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_LOW_FREQUENCY */ -- { -- /* -- A/52B 7.8 paragraph 2 recomends +10db -- but due to horrible clipping when normalize -- is disabled we set this to 1.0 -- */ -- {PCM_FRONT_LEFT , 1.0},//3.5}, -- {PCM_FRONT_RIGHT , 1.0},//3.5}, -- {PCM_INVALID} -- }, -- /* PCM_BACK_LEFT */ -- { -- {PCM_FRONT_LEFT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_BACK_RIGHT */ -- { -- {PCM_FRONT_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_FRONT_LEFT_OF_CENTER */ -- { -- {PCM_FRONT_LEFT , 1.0}, -- {PCM_FRONT_CENTER , 1.0, true}, -- {PCM_INVALID} -- }, -- /* PCM_FRONT_RIGHT_OF_CENTER */ -- { -- {PCM_FRONT_RIGHT , 1.0}, -- {PCM_FRONT_CENTER , 1.0, true}, -- {PCM_INVALID} -- }, -- /* PCM_BACK_CENTER */ -- { -- {PCM_BACK_LEFT , 1.0}, -- {PCM_BACK_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_SIDE_LEFT */ -- { -- {PCM_FRONT_LEFT , 1.0}, -- {PCM_BACK_LEFT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_SIDE_RIGHT */ -- { -- {PCM_FRONT_RIGHT , 1.0}, -- {PCM_BACK_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_FRONT_LEFT */ -- { -- {PCM_FRONT_LEFT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_FRONT_RIGHT */ -- { -- {PCM_FRONT_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_FRONT_CENTER */ -- { -- {PCM_TOP_FRONT_LEFT , 1.0}, -- {PCM_TOP_FRONT_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_CENTER */ -- { -- {PCM_TOP_FRONT_LEFT , 1.0}, -- {PCM_TOP_FRONT_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_BACK_LEFT */ -- { -- {PCM_BACK_LEFT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_BACK_RIGHT */ -- { -- {PCM_BACK_RIGHT , 1.0}, -- {PCM_INVALID} -- }, -- /* PCM_TOP_BACK_CENTER */ -- { -- {PCM_TOP_BACK_LEFT , 1.0}, -- {PCM_TOP_BACK_RIGHT , 1.0}, -- {PCM_INVALID} -- } --}; -- --CPCMRemap::CPCMRemap() : -- m_inSet (false), -- m_outSet (false), -- m_inChannels (0), -- m_outChannels (0), -- m_inSampleSize(0), -- m_ignoreLayout(false), -- m_buf(NULL), -- m_bufsize(0), -- m_attenuation (1.0), -- m_attenuationInc(0.0), -- m_attenuationMin(1.0), -- m_sampleRate (48000.0), //safe default -- m_holdCounter (0), -- m_limiterEnabled(false) --{ -- Dispose(); --} -- --CPCMRemap::~CPCMRemap() --{ -- Dispose(); --} -- --void CPCMRemap::Dispose() --{ -- free(m_buf); -- m_buf = NULL; -- m_bufsize = 0; --} -- --/* resolves the channels recursively and returns the new index of tablePtr */ --struct PCMMapInfo* CPCMRemap::ResolveChannel(enum PCMChannels channel, float level, bool ifExists, std::vector<enum PCMChannels> path, struct PCMMapInfo *tablePtr) --{ -- if (channel == PCM_INVALID) return tablePtr; -- -- /* if its a 1 to 1 mapping, return */ -- if (m_useable[channel]) -- { -- tablePtr->channel = channel; -- tablePtr->level = level; -- -- ++tablePtr; -- tablePtr->channel = PCM_INVALID; -- return tablePtr; -- } else -- if (ifExists) -- level /= 2; -- -- struct PCMMapInfo *info; -- std::vector<enum PCMChannels>::iterator itt; -- -- for(info = PCMDownmixTable[channel]; info->channel != PCM_INVALID; ++info) -- { -- /* make sure we are not about to recurse into ourself */ -- bool found = false; -- for(itt = path.begin(); itt != path.end(); ++itt) -- if (*itt == info->channel) -- { -- found = true; -- break; -- } -- -- if (found) -- continue; -- -- path.push_back(channel); -- float l = (info->level * (level / 100)) * 100; -- tablePtr = ResolveChannel(info->channel, l, info->ifExists, path, tablePtr); -- path.pop_back(); -- } -- -- return tablePtr; --} -- --/* -- Builds a lookup table without extra adjustments, useful if we simply -- want to find out which channels are active. -- For final adjustments, BuildMap() is used. --*/ --void CPCMRemap::ResolveChannels() --{ -- unsigned int in_ch, out_ch; -- bool hasSide = false; -- bool hasBack = false; -- -- memset(m_useable, 0, sizeof(m_useable)); -- -- if (!m_outSet) -- { -- /* Output format is not known yet, assume the full configured map. -- * Note that m_ignoreLayout-using callers normally ignore the result of -- * this function when !m_outSet, when it is called only for an advice for -- * the caller of SetInputFormat about the best possible output map, and -- * they can still set their output format arbitrarily in their call to -- * SetOutputFormat. */ -- for (enum PCMChannels *chan = PCMLayoutMap[m_channelLayout]; *chan != PCM_INVALID; ++chan) -- m_useable[*chan] = true; -- } -- else if (m_ignoreLayout) -- { -- for(out_ch = 0; out_ch < m_outChannels; ++out_ch) -- m_useable[m_outMap[out_ch]] = true; -- } -- else -- { -- /* figure out what channels we have and can use */ -- for(enum PCMChannels *chan = PCMLayoutMap[m_channelLayout]; *chan != PCM_INVALID; ++chan) -- { -- for(out_ch = 0; out_ch < m_outChannels; ++out_ch) -- if (m_outMap[out_ch] == *chan) -- { -- m_useable[*chan] = true; -- break; -- } -- } -- } -- -- /* force mono audio to front left and front right */ -- if (!m_ignoreLayout && m_inChannels == 1 && m_inMap[0] == PCM_FRONT_CENTER -- && m_useable[PCM_FRONT_LEFT] && m_useable[PCM_FRONT_RIGHT]) -- { -- CLog::Log(LOGDEBUG, "CPCMRemap: Mapping mono audio to front left and front right"); -- m_useable[PCM_FRONT_CENTER] = false; -- m_useable[PCM_FRONT_LEFT_OF_CENTER] = false; -- m_useable[PCM_FRONT_RIGHT_OF_CENTER] = false; -- } -- -- /* see if our input has side/back channels */ -- for(in_ch = 0; in_ch < m_inChannels; ++in_ch) -- switch(m_inMap[in_ch]) -- { -- case PCM_SIDE_LEFT: -- case PCM_SIDE_RIGHT: -- hasSide = true; -- break; -- -- case PCM_BACK_LEFT: -- case PCM_BACK_RIGHT: -- hasBack = true; -- break; -- -- default:; -- } -- -- /* if our input has side, and not back channels, and our output doesnt have side channels */ -- if (hasSide && !hasBack && (!m_useable[PCM_SIDE_LEFT] || !m_useable[PCM_SIDE_RIGHT])) -- { -- CLog::Log(LOGDEBUG, "CPCMRemap: Forcing side channel map to back channels"); -- for(in_ch = 0; in_ch < m_inChannels; ++in_ch) -- if (m_inMap[in_ch] == PCM_SIDE_LEFT ) m_inMap[in_ch] = PCM_BACK_LEFT; -- else if (m_inMap[in_ch] == PCM_SIDE_RIGHT) m_inMap[in_ch] = PCM_BACK_RIGHT; -- } -- -- /* resolve all the channels */ -- struct PCMMapInfo table[PCM_MAX_CH + 1], *info, *dst; -- std::vector<enum PCMChannels> path; -- -- for (int i = 0; i < PCM_MAX_CH + 1; i++) -- { -- for (int j = 0; j < PCM_MAX_CH + 1; j++) -- m_lookupMap[i][j].channel = PCM_INVALID; -- } -- -- memset(m_counts, 0, sizeof(m_counts)); -- for(in_ch = 0; in_ch < m_inChannels; ++in_ch) { -- -- for (int i = 0; i < PCM_MAX_CH + 1; i++) -- table[i].channel = PCM_INVALID; -- -- ResolveChannel(m_inMap[in_ch], 1.0f, false, path, table); -- for(info = table; info->channel != PCM_INVALID; ++info) -- { -- /* find the end of the table */ -- for(dst = m_lookupMap[info->channel]; dst->channel != PCM_INVALID; ++dst); -- -- /* append it to the table and set its input offset */ -- dst->channel = m_inMap[in_ch]; -- dst->in_offset = in_ch * 2; -- dst->level = info->level; -- m_counts[dst->channel]++; -- } -- } --} -- --/* -- builds a lookup table to convert from the input mapping to the output -- mapping, this decreases the amount of work per sample to remap it. --*/ --void CPCMRemap::BuildMap() --{ -- struct PCMMapInfo *dst; -- unsigned int out_ch; -- -- if (!m_inSet || !m_outSet) return; -- -- m_inStride = m_inSampleSize * m_inChannels ; -- m_outStride = m_inSampleSize * m_outChannels; -- -- /* see if we need to normalize the levels */ -- bool dontnormalize = !CSettings::Get().GetBool("audiooutput.normalizelevels"); -- CLog::Log(LOGDEBUG, "CPCMRemap: Downmix normalization is %s", (dontnormalize ? "disabled" : "enabled")); -- -- ResolveChannels(); -- -- /* convert the levels into RMS values */ -- float loudest = 0.0; -- bool hasLoudest = false; -- -- for(out_ch = 0; out_ch < m_outChannels; ++out_ch) -- { -- float scale = 0; -- int count = 0; -- for(dst = m_lookupMap[m_outMap[out_ch]]; dst->channel != PCM_INVALID; ++dst) -- { -- dst->copy = false; -- dst->level = dst->level / sqrt((float)m_counts[dst->channel]); -- scale += dst->level; -- ++count; -- } -- -- /* if there is only 1 channel to mix, and the level is 1.0, then just copy the channel */ -- dst = m_lookupMap[m_outMap[out_ch]]; -- if (count == 1 && dst->level > 0.99 && dst->level < 1.01) -- dst->copy = true; -- -- /* normalize the levels if it is turned on */ -- if (!dontnormalize) -- for(dst = m_lookupMap[m_outMap[out_ch]]; dst->channel != PCM_INVALID; ++dst) -- { -- dst->level /= scale; -- /* find the loudest output level we have that is not 1-1 */ -- if (dst->level < 1.0 && loudest < dst->level) -- { -- loudest = dst->level; -- hasLoudest = true; -- } -- } -- } -- -- /* adjust the channels that are too loud */ -- for(out_ch = 0; out_ch < m_outChannels; ++out_ch) -- { -- CStdString s = "", f; -- for(dst = m_lookupMap[m_outMap[out_ch]]; dst->channel != PCM_INVALID; ++dst) -- { -- if (hasLoudest && dst->copy) -- { -- dst->level = loudest; -- dst->copy = false; -- } -- -- f = StringUtils::Format("%s(%f%s) ", PCMChannelStr(dst->channel).c_str(), dst->level, dst->copy ? "*" : ""); -- s += f; -- } -- CLog::Log(LOGDEBUG, "CPCMRemap: %s = %s\n", PCMChannelStr(m_outMap[out_ch]).c_str(), s.c_str()); -- } --} -- --void CPCMRemap::DumpMap(CStdString info, unsigned int channels, enum PCMChannels *channelMap) --{ -- if (channelMap == NULL) -- { -- CLog::Log(LOGINFO, "CPCMRemap: %s channel map: NULL", info.c_str()); -- return; -- } -- -- CStdString mapping; -- for(unsigned int i = 0; i < channels; ++i) -- mapping += ((i == 0) ? "" : ",") + PCMChannelStr(channelMap[i]); -- -- CLog::Log(LOGINFO, "CPCMRemap: %s channel map: %s\n", info.c_str(), mapping.c_str()); --} -- --void CPCMRemap::Reset() --{ -- m_inSet = false; -- m_outSet = false; -- Dispose(); --} -- --/* sets the input format, and returns the requested channel layout */ --enum PCMChannels *CPCMRemap::SetInputFormat(unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate, PCMLayout layout) --{ -- m_inChannels = channels; -- m_inSampleSize = sampleSize; -- m_sampleRate = sampleRate; -- m_inSet = channelMap != NULL; -- if (channelMap) -- memcpy(m_inMap, channelMap, sizeof(enum PCMChannels) * channels); -- -- /* get the audio layout, and count the channels in it */ -- m_channelLayout = layout; -- if (m_channelLayout >= PCM_MAX_LAYOUT) m_channelLayout = PCM_LAYOUT_2_0; -- -- -- DumpMap("I", channels, channelMap); -- BuildMap(); -- -- /* now remove the empty channels from PCMLayoutMap; -- * we don't perform upmixing so we want the minimum amount of those */ -- if (channelMap) { -- if (!m_outSet) -- ResolveChannels(); /* Do basic channel resolving to find out the empty channels; -- * If m_outSet == true, this was done already by BuildMap() above */ -- int i = 0; -- for (enum PCMChannels *chan = PCMLayoutMap[m_channelLayout]; *chan != PCM_INVALID; ++chan) -- if (m_lookupMap[*chan][0].channel != PCM_INVALID) { -- /* something is mapped here, so add the channel */ -- m_layoutMap[i++] = *chan; -- } -- m_layoutMap[i] = PCM_INVALID; -- } else -- memcpy(m_layoutMap, PCMLayoutMap[m_channelLayout], sizeof(PCMLayoutMap[m_channelLayout])); -- -- m_attenuation = 1.0; -- m_attenuationInc = 1.0; -- m_holdCounter = 0; -- -- return m_layoutMap; --} -- --/* sets the output format supported by the audio renderer */ --void CPCMRemap::SetOutputFormat(unsigned int channels, enum PCMChannels *channelMap, bool ignoreLayout/* = false */) --{ -- m_outChannels = channels; -- m_outSet = channelMap != NULL; -- m_ignoreLayout = ignoreLayout; -- if (channelMap) -- memcpy(m_outMap, channelMap, sizeof(enum PCMChannels) * channels); -- -- DumpMap("O", channels, channelMap); -- BuildMap(); -- -- m_attenuation = 1.0; -- m_attenuationInc = 1.0; -- m_holdCounter = 0; --} -- --#if 0 --void CPCMRemap::Remap(void *data, void *out, unsigned int samples, long drc) --{ -- float gain = 1.0f; -- if (drc > 0) -- gain = pow(10.0f, (float)drc / 2000.0f); -- -- Remap(data, out, samples, gain); --} -- --/* remap the supplied data into out, which must be pre-allocated */ --void CPCMRemap::Remap(void *data, void *out, unsigned int samples, float gain /*= 1.0f*/) --{ -- CheckBufferSize(samples * m_outChannels * sizeof(float)); -- -- //set output buffer to 0 -- memset(out, 0, samples * m_outChannels * m_inSampleSize); -- -- //set intermediate buffer to 0 -- memset(m_buf, 0, m_bufsize); -- -- ProcessInput(data, out, samples, gain); -- AddGain(m_buf, samples * m_outChannels, gain); -- ProcessLimiter(samples, gain); -- ProcessOutput(out, samples, gain); --} -- --void CPCMRemap::CheckBufferSize(int size) --{ -- if (m_bufsize < size) -- { -- m_bufsize = size; -- m_buf = (float*)realloc(m_buf, m_bufsize); -- } --} -- --void CPCMRemap::ProcessInput(void* data, void* out, unsigned int samples, float gain) --{ -- for (unsigned int ch = 0; ch < m_outChannels; ch++) -- { -- struct PCMMapInfo *info = m_lookupMap[m_outMap[ch]]; -- if (info->channel == PCM_INVALID) -- continue; -- -- if (info->copy && gain == 1.0f) //do direct copy -- { -- uint8_t* src = (uint8_t*)data + info->in_offset; -- uint8_t* dst = (uint8_t*)out + ch * m_inSampleSize; -- uint8_t* dstend = dst + samples * m_outStride; -- while (dst != dstend) -- { -- *(int16_t*)dst = *(int16_t*)src; -- src += m_inStride; -- dst += m_outStride; -- } -- } -- else //needs some volume change or mixing, put into intermediate buffer -- { -- for(; info->channel != PCM_INVALID; info++) -- { -- uint8_t* src = (uint8_t*)data + info->in_offset; -- float* dst = m_buf + ch; -- float* dstend = dst + samples * m_outChannels; -- while (dst != dstend) -- { -- *dst += (float)(*(int16_t*)src) * info->level; -- src += m_inStride; -- dst += m_outChannels; -- } -- } -- } -- } --} -- --void CPCMRemap::AddGain(float* buf, unsigned int samples, float gain) --{ -- if (gain != 1.0f) //needs a gain change -- { -- float* ptr = m_buf; -- float* end = m_buf + samples; -- while (ptr != end) -- *(ptr++) *= gain; -- } --} -- --void CPCMRemap::ProcessLimiter(unsigned int samples, float gain) --{ -- //check total gain for each output channel -- float highestgain = 1.0f; -- for (unsigned int ch = 0; ch < m_outChannels; ch++) -- { -- struct PCMMapInfo *info = m_lookupMap[m_outMap[ch]]; -- if (info->channel == PCM_INVALID) -- continue; -- -- float chgain = 0.0f; -- for(; info->channel != PCM_INVALID; info++) -- chgain += info->level * gain; -- -- if (chgain > highestgain) -- highestgain = chgain; -- } -- -- m_attenuationMin = 1.0f; -- -- //if one of the channels can clip, enable a limiter -- if (highestgain > 1.0001f) -- { -- m_attenuationMin = m_attenuation; -- -- if (!m_limiterEnabled) -- { -- CLog::Log(LOGDEBUG, "CPCMRemap:: max gain: %f, enabling limiter", highestgain); -- m_limiterEnabled = true; -- } -- -- for (unsigned int i = 0; i < samples; i++) -- { -- //for each collection of samples, get the highest absolute value -- float maxAbs = 0.0f; -- for (unsigned int outch = 0; outch < m_outChannels; outch++) -- { -- float absval = fabs(m_buf[i * m_outChannels + outch]) / 32768.0f; -- if (maxAbs < absval) -- maxAbs = absval; -- } -- -- //if attenuatedAbs is higher than 1.0f, audio is clipping -- float attenuatedAbs = maxAbs * m_attenuation; -- if (attenuatedAbs > 1.0f) -- { -- //set m_attenuation so that m_attenuation * sample is the maximum output value -- m_attenuation = 1.0f / maxAbs; -- if (m_attenuation < m_attenuationMin) -- m_attenuationMin = m_attenuation; -- //value to add to m_attenuation to make it 1.0f -- m_attenuationInc = 1.0f - m_attenuation; -- //amount of samples to hold m_attenuation -- m_holdCounter = MathUtils::round_int(m_sampleRate * g_advancedSettings.m_limiterHold); -- } -- else if (m_attenuation < 1.0f && attenuatedAbs > 0.95f) -- { -- //if we're attenuating and we get within 5% of clipping, hold m_attenuation -- m_attenuationInc = 1.0f - m_attenuation; -- m_holdCounter = MathUtils::round_int(m_sampleRate * g_advancedSettings.m_limiterHold); -- } -- -- //apply attenuation -- for (unsigned int outch = 0; outch < m_outChannels; outch++) -- m_buf[i * m_outChannels + outch] *= m_attenuation; -- -- if (m_holdCounter) -- { -- //hold m_attenuation -- m_holdCounter--; -- } -- else if (m_attenuationInc > 0.0f) -- { -- //move m_attenuation to 1.0 in g_advancedSettings.m_limiterRelease seconds -- m_attenuation += m_attenuationInc / m_sampleRate / g_advancedSettings.m_limiterRelease; -- if (m_attenuation > 1.0f) -- { -- m_attenuation = 1.0f; -- m_attenuationInc = 0.0f; -- } -- } -- } -- } -- else -- { -- if (m_limiterEnabled) -- { -- CLog::Log(LOGDEBUG, "CPCMRemap:: max gain: %f, disabling limiter", highestgain); -- m_limiterEnabled = false; -- } -- -- //reset the limiter -- m_attenuation = 1.0f; -- m_attenuationInc = 0.0f; -- m_holdCounter = 0; -- } --} -- --void CPCMRemap::ProcessOutput(void* out, unsigned int samples, float gain) --{ -- //copy from intermediate buffer to output -- for (unsigned int ch = 0; ch < m_outChannels; ch++) -- { -- struct PCMMapInfo *info = m_lookupMap[m_outMap[ch]]; -- if (info->channel == PCM_INVALID) -- continue; -- -- if (!info->copy || gain != 1.0f) -- { -- float* src = m_buf + ch; -- uint8_t* dst = (uint8_t*)out + ch * m_inSampleSize; -- uint8_t* dstend = dst + samples * m_outStride; -- -- while(dst != dstend) -- { -- *(int16_t*)dst = MathUtils::round_int(std::min(std::max(*src, (float)INT16_MIN), (float)INT16_MAX)); -- src += m_outChannels; -- dst += m_outStride; -- } -- } -- } --} -- --bool CPCMRemap::CanRemap() --{ -- return (m_inSet && m_outSet); --} -- --int CPCMRemap::InBytesToFrames(int bytes) --{ -- return bytes / m_inSampleSize / m_inChannels; --} -- --int CPCMRemap::FramesToOutBytes(int frames) --{ -- return frames * m_inSampleSize * m_outChannels; --} -- --int CPCMRemap::FramesToInBytes(int frames) --{ -- return frames * m_inSampleSize * m_inChannels; --} --#endif --CStdString CPCMRemap::PCMChannelStr(enum PCMChannels ename) --{ -- const char* PCMChannelName[] = -- { -- "FL", -- "FR", -- "CE", -- "LFE", -- "BL", -- "BR", -- "FLOC", -- "FROC", -- "BC", -- "SL", -- "SR", -- "TFL", -- "TFR", -- "TFC", -- "TC", -- "TBL", -- "TBR", -- "TBC" -- }; -- -- int namepos = (int)ename; -- CStdString namestr; -- -- if (namepos < 0 || namepos >= (int)(sizeof(PCMChannelName) / sizeof(const char*))) -- namestr = StringUtils::Format("UNKNOWN CHANNEL:%i", namepos); -- else -- namestr = PCMChannelName[namepos]; -- -- return namestr; --} --#if 0 --CStdString CPCMRemap::PCMLayoutStr(enum PCMLayout ename) --{ -- const char* PCMLayoutName[] = -- { -- "2.0", -- "2.1", -- "3.0", -- "3.1", -- "4.0", -- "4.1", -- "5.0", -- "5.1", -- "7.0", -- "7.1" -- }; -- -- int namepos = (int)ename; -- CStdString namestr; -- -- if (namepos < 0 || namepos >= (int)(sizeof(PCMLayoutName) / sizeof(const char*))) -- namestr.Format("UNKNOWN LAYOUT:%i", namepos); -- else -- namestr = PCMLayoutName[namepos]; -- -- return namestr; --} --#endif -- -- --void CPCMRemap::GetDownmixMatrix(float *downmix) --{ -- for (int i=0; i<8*8; i++) -- downmix[i] = 0.0f; -- -- for (unsigned int ch = 0; ch < m_outChannels; ch++) -- { -- struct PCMMapInfo *info = m_lookupMap[m_outMap[ch]]; -- if (info->channel == PCM_INVALID) -- continue; -- -- for(; info->channel != PCM_INVALID; info++) -- downmix[8*ch + (info->in_offset>>1)] = info->level; -- } --} -diff --git a/xbmc/cores/omxplayer/PCMRemap.h b/xbmc/cores/omxplayer/PCMRemap.h -deleted file mode 100644 -index a273cd1..0000000 ---- a/xbmc/cores/omxplayer/PCMRemap.h -+++ /dev/null -@@ -1,151 +0,0 @@ --#ifndef __PCM_REMAP__H__ --#define __PCM_REMAP__H__ -- --/* -- * Copyright (C) 2005-2010 Team XBMC -- * http://xbmc.org -- * -- * This Program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This Program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with XBMC; see the file COPYING. If not, write to -- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -- * http://www.gnu.org/copyleft/gpl.html -- * -- */ -- --#include <stdint.h> --#include <vector> --#include "utils/StdString.h" -- --#define PCM_MAX_CH 18 --enum PCMChannels --{ -- PCM_INVALID = -1, -- PCM_FRONT_LEFT, -- PCM_FRONT_RIGHT, -- PCM_FRONT_CENTER, -- PCM_LOW_FREQUENCY, -- PCM_BACK_LEFT, -- PCM_BACK_RIGHT, -- PCM_FRONT_LEFT_OF_CENTER, -- PCM_FRONT_RIGHT_OF_CENTER, -- PCM_BACK_CENTER, -- PCM_SIDE_LEFT, -- PCM_SIDE_RIGHT, -- PCM_TOP_FRONT_LEFT, -- PCM_TOP_FRONT_RIGHT, -- PCM_TOP_FRONT_CENTER, -- PCM_TOP_CENTER, -- PCM_TOP_BACK_LEFT, -- PCM_TOP_BACK_RIGHT, -- PCM_TOP_BACK_CENTER --}; -- --#define PCM_MAX_LAYOUT 10 --enum PCMLayout --{ -- PCM_LAYOUT_2_0 = 0, -- PCM_LAYOUT_2_1, -- PCM_LAYOUT_3_0, -- PCM_LAYOUT_3_1, -- PCM_LAYOUT_4_0, -- PCM_LAYOUT_4_1, -- PCM_LAYOUT_5_0, -- PCM_LAYOUT_5_1, -- PCM_LAYOUT_7_0, -- PCM_LAYOUT_7_1 --}; -- --struct PCMMapInfo --{ -- enum PCMChannels channel; -- float level; -- bool ifExists; -- int in_offset; -- bool copy; --}; -- --//! Channels remapper class --/*! -- The usual set-up process: -- - user calls SetInputFormat with the input channels information -- - SetInputFormat responds with a channelmap corresponding to the speaker -- layout that the user has configured, with empty (according to information -- calculated from the input channelmap) channels removed -- - user uses this information to create the desired output channelmap, -- and calls SetOutputFormat to set it (if the channelmap contains channels -- that do not exist in the configured speaker layout, they will contain -- only silence unless ignoreLayout is true) -- */ -- --class CPCMRemap --{ --protected: -- bool m_inSet, m_outSet; -- enum PCMLayout m_channelLayout; -- unsigned int m_inChannels, m_outChannels; -- unsigned int m_inSampleSize; -- enum PCMChannels m_inMap [PCM_MAX_CH]; -- enum PCMChannels m_outMap[PCM_MAX_CH]; -- enum PCMChannels m_layoutMap[PCM_MAX_CH + 1]; -- -- bool m_ignoreLayout; -- bool m_useable [PCM_MAX_CH]; -- int m_inStride, m_outStride; -- struct PCMMapInfo m_lookupMap[PCM_MAX_CH + 1][PCM_MAX_CH + 1]; -- int m_counts[PCM_MAX_CH]; -- -- float* m_buf; -- int m_bufsize; -- float m_attenuation; -- float m_attenuationInc; -- float m_attenuationMin; //lowest attenuation value during a call of Remap(), used for the codec info -- float m_sampleRate; -- unsigned int m_holdCounter; -- bool m_limiterEnabled; -- bool m_dontnormalize; -- -- struct PCMMapInfo* ResolveChannel(enum PCMChannels channel, float level, bool ifExists, std::vector<enum PCMChannels> path, struct PCMMapInfo *tablePtr); -- void ResolveChannels(); //!< Partial BuildMap(), just enough to see which output channels are active -- void BuildMap(); -- void DumpMap(CStdString info, int unsigned channels, enum PCMChannels *channelMap); -- void Dispose(); -- CStdString PCMChannelStr(enum PCMChannels ename); -- CStdString PCMLayoutStr(enum PCMLayout ename); -- -- void CheckBufferSize(int size); -- void ProcessInput(void* data, void* out, unsigned int samples, float gain); -- void AddGain(float* buf, unsigned int samples, float gain); -- void ProcessLimiter(unsigned int samples, float gain); -- void ProcessOutput(void* out, unsigned int samples, float gain); -- --public: -- -- CPCMRemap(); -- ~CPCMRemap(); -- -- void Reset(); -- enum PCMChannels *SetInputFormat (unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate, PCMLayout layout); -- void SetOutputFormat(unsigned int channels, enum PCMChannels *channelMap, bool ignoreLayout = false); --#if 0 -- void Remap(void *data, void *out, unsigned int samples, long drc); -- void Remap(void *data, void *out, unsigned int samples, float gain = 1.0f); -- bool CanRemap(); -- int InBytesToFrames (int bytes ); -- int FramesToOutBytes(int frames); -- int FramesToInBytes (int frames); --#endif -- float GetCurrentAttenuation() { return m_attenuationMin; } -- void GetDownmixMatrix(float *downmix); --}; -- --#endif --- -1.9.3 - - -From f642e8eac4fb16039ce662a8a170908efd43ebf8 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 10 Apr 2014 17:19:18 +0100 -Subject: [PATCH 66/94] [omxplayer] Remove unused framerate functions - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 4 +--- - xbmc/linux/OMXClock.cpp | 35 --------------------------------- - xbmc/linux/OMXClock.h | 4 ---- - 3 files changed, 1 insertion(+), 42 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index a5620da..019f4b2 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -527,7 +527,7 @@ bool OMXPlayerVideo::OpenDecoder() - return false; - - if (m_hints.fpsrate && m_hints.fpsscale) -- m_fFrameRate = DVD_TIME_BASE / OMXClock::NormalizeFrameduration((double)DVD_TIME_BASE * m_hints.fpsscale / m_hints.fpsrate); -+ m_fFrameRate = DVD_TIME_BASE / CDVDCodecUtils::NormalizeFrameduration((double)DVD_TIME_BASE * m_hints.fpsscale / m_hints.fpsrate); - else - m_fFrameRate = 25; - -@@ -564,8 +564,6 @@ bool OMXPlayerVideo::OpenDecoder() - sprintf(command, "hdmi_ntsc_freqs %d", bNtscFreq); - CLog::Log(LOGINFO, "OMXPlayerVideo::OpenDecoder fps: %f %s\n", m_fFrameRate, command); - m_DllBcmHost.vc_gencmd(response, sizeof response, command); -- -- m_av_clock->SetRefreshRate(m_fFrameRate); - } - - // start from assuming all recent frames had valid pts -diff --git a/xbmc/linux/OMXClock.cpp b/xbmc/linux/OMXClock.cpp -index bee7bac..c631ab6 100644 ---- a/xbmc/linux/OMXClock.cpp -+++ b/xbmc/linux/OMXClock.cpp -@@ -39,7 +39,6 @@ OMXClock::OMXClock() - { - m_pause = false; - -- m_fps = 25.0f; - m_omx_speed = DVD_PLAYSPEED_NORMAL; - m_WaitMask = 0; - m_eState = OMX_TIME_ClockStateStopped; -@@ -565,38 +564,4 @@ int64_t OMXClock::CurrentHostFrequency(void) - return( (int64_t)1000000000L ); - } - --int OMXClock::GetRefreshRate(double* interval) --{ -- if(!interval) -- return false; -- -- *interval = m_fps; -- return true; --} -- --double OMXClock::NormalizeFrameduration(double frameduration) --{ -- //if the duration is within 20 microseconds of a common duration, use that -- const double durations[] = {DVD_TIME_BASE * 1.001 / 24.0, DVD_TIME_BASE / 24.0, DVD_TIME_BASE / 25.0, -- DVD_TIME_BASE * 1.001 / 30.0, DVD_TIME_BASE / 30.0, DVD_TIME_BASE / 50.0, -- DVD_TIME_BASE * 1.001 / 60.0, DVD_TIME_BASE / 60.0}; -- -- double lowestdiff = DVD_TIME_BASE; -- int selected = -1; -- for (size_t i = 0; i < sizeof(durations) / sizeof(durations[0]); i++) -- { -- double diff = fabs(frameduration - durations[i]); -- if (diff < DVD_MSEC_TO_TIME(0.02) && diff < lowestdiff) -- { -- selected = i; -- lowestdiff = diff; -- } -- } -- -- if (selected != -1) -- return durations[selected]; -- else -- return frameduration; --} -- - #endif -diff --git a/xbmc/linux/OMXClock.h b/xbmc/linux/OMXClock.h -index f83074a..7bb6d4d 100644 ---- a/xbmc/linux/OMXClock.h -+++ b/xbmc/linux/OMXClock.h -@@ -50,7 +50,6 @@ class OMXClock - protected: - bool m_pause; - pthread_mutex_t m_lock; -- double m_fps; - int m_omx_speed; - OMX_U32 m_WaitMask; - OMX_TIME_CLOCKSTATE m_eState; -@@ -91,9 +90,6 @@ class OMXClock - static int64_t CurrentHostCounter(void); - static int64_t CurrentHostFrequency(void); - -- int GetRefreshRate(double* interval = NULL); -- void SetRefreshRate(double fps) { m_fps = fps; }; -- - static double NormalizeFrameduration(double frameduration); - }; - --- -1.9.3 - - -From 652d09aff0c0ed4cab08ab7ebbe0da37118c53ba Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sun, 30 Mar 2014 15:54:34 +0100 -Subject: [PATCH 67/94] [omxplayer] Make the sharpness control act as a - sharpness control. - -This fixes scaling kernel as Mitchell Netravali, and varies sharpness over range B=[5/3,0] C=[-1/3,1/2] ---- - xbmc/cores/omxplayer/OMXPlayer.cpp | 338 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 338 insertions(+) - -diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp -index 2515fa1..b09e8e0 100644 ---- a/xbmc/cores/omxplayer/OMXPlayer.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp -@@ -1051,6 +1051,334 @@ bool COMXPlayer::IsBetterStream(COMXCurrentStream& current, CDemuxStream* stream - return false; - } - -+static void SetSharpness(float sharpness) -+{ -+ const int16_t mitchells[][32] = -+ { -+ { // B=1.66667 C=-0.33333 -+ 0, 3, 8, 15, 24, 35, 49, 55, 70, 92,100,107,109,113,113,114,114,113,113,109,107,100, 92, 70, 55, 49, 35, 24, 15, 8, 3, 0, -+ }, -+ { // B=1.64000 C=-0.32000 -+ 0, 3, 7, 14, 24, 34, 48, 54, 69, 91,100,107,111,114,116,116,116,116,114,111,107,100, 91, 69, 54, 48, 34, 24, 14, 7, 3, 0, -+ }, -+ { // B=1.61333 C=-0.30667 -+ 0, 3, 7, 14, 23, 34, 47, 53, 68, 90, 99,107,112,115,118,118,118,118,115,112,107, 99, 90, 68, 53, 47, 34, 23, 14, 7, 3, 0, -+ }, -+ { // B=1.58667 C=-0.29333 -+ 0, 2, 7, 14, 22, 33, 46, 52, 67, 89, 99,107,113,117,119,121,121,119,117,113,107, 99, 89, 67, 52, 46, 33, 22, 14, 7, 2, 0, -+ }, -+ { // B=1.56000 C=-0.28000 -+ 0, 2, 7, 13, 22, 32, 45, 51, 66, 88, 98,107,114,119,121,123,123,121,119,114,107, 98, 88, 66, 51, 45, 32, 22, 13, 7, 2, 0, -+ }, -+ { // B=1.53333 C=-0.26667 -+ 0, 2, 7, 12, 21, 31, 44, 50, 65, 87, 98,108,114,120,123,125,125,123,120,114,108, 98, 87, 65, 50, 44, 31, 21, 12, 7, 2, 0, -+ }, -+ { // B=1.50667 C=-0.25333 -+ 0, 2, 6, 12, 20, 30, 43, 49, 64, 86, 98,108,116,122,125,127,127,125,122,116,108, 98, 86, 64, 49, 43, 30, 20, 12, 6, 2, 0, -+ }, -+ { // B=1.48000 C=-0.24000 -+ 0, 2, 6, 12, 19, 29, 42, 47, 63, 85, 98,108,117,123,127,130,130,127,123,117,108, 98, 85, 63, 47, 42, 29, 19, 12, 6, 2, 0, -+ }, -+ { // B=1.45333 C=-0.22667 -+ 0, 2, 6, 11, 19, 28, 41, 46, 62, 85, 97,108,118,125,129,132,132,129,125,118,108, 97, 85, 62, 46, 41, 28, 19, 11, 6, 2, 0, -+ }, -+ { // B=1.42667 C=-0.21333 -+ 0, 2, 5, 11, 18, 28, 40, 45, 61, 84, 97,108,119,126,131,134,134,131,126,119,108, 97, 84, 61, 45, 40, 28, 18, 11, 5, 2, 0, -+ }, -+ { // B=1.40000 C=-0.20000 -+ 0, 2, 5, 10, 18, 27, 39, 44, 60, 84, 96,109,119,127,134,136,136,134,127,119,109, 96, 84, 60, 44, 39, 27, 18, 10, 5, 2, 0, -+ }, -+ { // B=1.37333 C=-0.18667 -+ 0, 1, 5, 10, 17, 26, 38, 43, 58, 82, 96,109,120,129,135,139,139,135,129,120,109, 96, 82, 58, 43, 38, 26, 17, 10, 5, 1, 0, -+ }, -+ { // B=1.34667 C=-0.17333 -+ 0, 2, 4, 10, 16, 25, 37, 42, 57, 81, 96,109,121,131,137,141,141,137,131,121,109, 96, 81, 57, 42, 37, 25, 16, 10, 4, 2, 0, -+ }, -+ { // B=1.32000 C=-0.16000 -+ 0, 1, 4, 9, 15, 24, 36, 41, 56, 81, 95,110,122,132,139,143,143,139,132,122,110, 95, 81, 56, 41, 36, 24, 15, 9, 4, 1, 0, -+ }, -+ { // B=1.29333 C=-0.14667 -+ 0, 1, 4, 8, 15, 23, 35, 40, 55, 80, 95,110,123,133,141,146,146,141,133,123,110, 95, 80, 55, 40, 35, 23, 15, 8, 4, 1, 0, -+ }, -+ { // B=1.26667 C=-0.13333 -+ 0, 1, 4, 8, 14, 22, 33, 38, 54, 79, 95,110,124,135,143,148,148,143,135,124,110, 95, 79, 54, 38, 33, 22, 14, 8, 4, 1, 0, -+ }, -+ { // B=1.24000 C=-0.12000 -+ 0, 1, 4, 7, 14, 21, 33, 37, 53, 78, 94,110,125,136,145,150,150,145,136,125,110, 94, 78, 53, 37, 33, 21, 14, 7, 4, 1, 0, -+ }, -+ { // B=1.21333 C=-0.10667 -+ 0, 1, 3, 7, 13, 20, 32, 36, 52, 77, 94,110,127,138,147,152,152,147,138,127,110, 94, 77, 52, 36, 32, 20, 13, 7, 3, 1, 0, -+ }, -+ { // B=1.18667 C=-0.09333 -+ 0, 1, 3, 7, 12, 20, 30, 35, 51, 77, 93,111,125,140,149,155,155,149,140,125,111, 93, 77, 51, 35, 30, 20, 12, 7, 3, 1, 0, -+ }, -+ { // B=1.16000 C=-0.08000 -+ 0, 1, 3, 6, 11, 19, 29, 34, 50, 76, 93,111,128,141,151,157,157,151,141,128,111, 93, 76, 50, 34, 29, 19, 11, 6, 3, 1, 0, -+ }, -+ { // B=1.13333 C=-0.06667 -+ 0, 1, 3, 5, 11, 18, 28, 33, 49, 75, 93,111,129,143,153,159,159,153,143,129,111, 93, 75, 49, 33, 28, 18, 11, 5, 3, 1, 0, -+ }, -+ { // B=1.10667 C=-0.05333 -+ 0, 1, 2, 5, 10, 17, 27, 32, 48, 74, 93,111,130,144,155,161,161,155,144,130,111, 93, 74, 48, 32, 27, 17, 10, 5, 2, 1, 0, -+ }, -+ { // B=1.08000 C=-0.04000 -+ 0, 1, 2, 5, 9, 16, 26, 31, 46, 73, 92,112,130,145,157,164,164,157,145,130,112, 92, 73, 46, 31, 26, 16, 9, 5, 2, 1, 0, -+ }, -+ { // B=1.05333 C=-0.02667 -+ 0, 0, 2, 4, 9, 15, 25, 29, 45, 72, 92,112,131,147,159,166,166,159,147,131,112, 92, 72, 45, 29, 25, 15, 9, 4, 2, 0, 0, -+ }, -+ { // B=1.02667 C=-0.01333 -+ 0, 0, 1, 4, 8, 14, 24, 28, 44, 72, 92,112,132,148,161,168,168,161,148,132,112, 92, 72, 44, 28, 24, 14, 8, 4, 1, 0, 0, -+ }, -+ { // B=1.00000 C=0.00000 -+ 0, 0, 1, 4, 7, 14, 23, 27, 43, 71, 91,112,133,150,163,170,170,163,150,133,112, 91, 71, 43, 27, 23, 14, 7, 4, 1, 0, 0, -+ }, -+ { // B=0.97333 C=0.01333 -+ 0, 0, 1, 3, 7, 12, 22, 26, 42, 70, 91,113,133,152,165,173,173,165,152,133,113, 91, 70, 42, 26, 22, 12, 7, 3, 1, 0, 0, -+ }, -+ { // B=0.94667 C=0.02667 -+ 0, 0, 1, 2, 6, 12, 21, 25, 41, 69, 90,113,135,153,167,175,175,167,153,135,113, 90, 69, 41, 25, 21, 12, 6, 2, 1, 0, 0, -+ }, -+ { // B=0.92000 C=0.04000 -+ 0, 0, 0, 2, 5, 11, 20, 24, 40, 68, 90,113,136,154,169,177,177,169,154,136,113, 90, 68, 40, 24, 20, 11, 5, 2, 0, 0, 0, -+ }, -+ { // B=0.89333 C=0.05333 -+ 0, 0, 0, 1, 5, 10, 19, 23, 39, 67, 90,114,136,156,171,179,179,171,156,136,114, 90, 67, 39, 23, 19, 10, 5, 1, 0, 0, 0, -+ }, -+ { // B=0.86667 C=0.06667 -+ 0, 0, 0, 1, 4, 9, 18, 22, 38, 66, 89,114,137,157,173,182,182,173,157,137,114, 89, 66, 38, 22, 18, 9, 4, 1, 0, 0, 0, -+ }, -+ { // B=0.84000 C=0.08000 -+ 0, 0, -1, 1, 3, 9, 17, 21, 37, 65, 89,114,138,159,175,184,184,175,159,138,114, 89, 65, 37, 21, 17, 9, 3, 1, -1, 0, 0, -+ }, -+ { // B=0.81333 C=0.09333 -+ 0, 0, -1, 0, 3, 7, 16, 19, 36, 65, 89,114,139,160,177,186,186,177,160,139,114, 89, 65, 36, 19, 16, 7, 3, 0, -1, 0, 0, -+ }, -+ { // B=0.78667 C=0.10667 -+ 0, -1, -1, 0, 2, 6, 15, 18, 35, 64, 88,115,139,162,179,188,188,179,162,139,115, 88, 64, 35, 18, 15, 6, 2, 0, -1, -1, 0, -+ }, -+ { // B=0.76000 C=0.12000 -+ 0, -1, -1, -1, 1, 6, 14, 17, 33, 63, 88,115,141,163,181,191,191,181,163,141,115, 88, 63, 33, 17, 14, 6, 1, -1, -1, -1, 0, -+ }, -+ { // B=0.73333 C=0.13333 -+ 0, -1, -1, -1, 0, 5, 13, 16, 32, 62, 87,115,142,165,183,193,193,183,165,142,115, 87, 62, 32, 16, 13, 5, 0, -1, -1, -1, 0, -+ }, -+ { // B=0.70667 C=0.14667 -+ 0, -1, -1, -2, 0, 4, 12, 15, 31, 61, 87,115,143,166,185,195,195,185,166,143,115, 87, 61, 31, 15, 12, 4, 0, -2, -1, -1, 0, -+ }, -+ { // B=0.68000 C=0.16000 -+ 0, -1, -2, -2, -1, 3, 11, 14, 30, 61, 87,116,142,168,187,197,197,187,168,142,116, 87, 61, 30, 14, 11, 3, -1, -2, -2, -1, 0, -+ }, -+ { // B=0.65333 C=0.17333 -+ 0, -1, -2, -3, -1, 2, 10, 13, 29, 60, 86,116,144,169,189,200,200,189,169,144,116, 86, 60, 29, 13, 10, 2, -1, -3, -2, -1, 0, -+ }, -+ { // B=0.62667 C=0.18667 -+ 0, -1, -3, -3, -2, 1, 9, 12, 28, 59, 86,116,145,171,191,202,202,191,171,145,116, 86, 59, 28, 12, 9, 1, -2, -3, -3, -1, 0, -+ }, -+ { // B=0.60000 C=0.20000 -+ 0, -1, -3, -3, -3, 0, 8, 10, 27, 58, 86,116,146,172,193,204,204,193,172,146,116, 86, 58, 27, 10, 8, 0, -3, -3, -3, -1, 0, -+ }, -+ { // B=0.57333 C=0.21333 -+ 0, -1, -3, -4, -3, -1, 7, 9, 26, 57, 86,116,147,174,194,207,207,194,174,147,116, 86, 57, 26, 9, 7, -1, -3, -4, -3, -1, 0, -+ }, -+ { // B=0.54667 C=0.22667 -+ 0, -2, -3, -5, -4, -1, 5, 8, 25, 57, 85,117,148,176,196,209,209,196,176,148,117, 85, 57, 25, 8, 5, -1, -4, -5, -3, -2, 0, -+ }, -+ { // B=0.52000 C=0.24000 -+ 0, -1, -4, -5, -5, -2, 4, 7, 24, 55, 85,117,149,177,199,211,211,199,177,149,117, 85, 55, 24, 7, 4, -2, -5, -5, -4, -1, 0, -+ }, -+ { // B=0.49333 C=0.25333 -+ 0, -2, -4, -5, -6, -3, 3, 6, 23, 55, 84,117,150,178,200,214,214,200,178,150,117, 84, 55, 23, 6, 3, -3, -6, -5, -4, -2, 0, -+ }, -+ { // B=0.46667 C=0.26667 -+ 0, -2, -4, -6, -6, -4, 2, 6, 22, 54, 84,118,150,180,202,216,216,202,180,150,118, 84, 54, 22, 6, 2, -4, -6, -6, -4, -2, 0, -+ }, -+ { // B=0.44000 C=0.28000 -+ 0, -2, -4, -6, -7, -5, 2, 5, 21, 53, 83,118,150,181,205,218,218,205,181,150,118, 83, 53, 21, 5, 2, -5, -7, -6, -4, -2, 0, -+ }, -+ { // B=0.41333 C=0.29333 -+ 0, -2, -4, -7, -7, -6, 0, 5, 20, 53, 83,118,152,183,207,220,220,207,183,152,118, 83, 53, 20, 5, 0, -6, -7, -7, -4, -2, 0, -+ }, -+ { // B=0.38667 C=0.30667 -+ 0, -2, -5, -7, -8, -7, -1, 4, 19, 52, 83,118,153,185,208,223,223,208,185,153,118, 83, 52, 19, 4, -1, -7, -8, -7, -5, -2, 0, -+ }, -+ { // B=0.36000 C=0.32000 -+ 0, -2, -5, -8, -8, -8, -2, 3, 19, 51, 83,118,155,186,210,225,225,210,186,155,118, 83, 51, 19, 3, -2, -8, -8, -8, -5, -2, 0, -+ }, -+ { // B=0.33333 C=0.33333 -+ 0, -2, -6, -8,-10, -8, -3, 2, 18, 50, 82,119,155,187,213,227,227,213,187,155,119, 82, 50, 18, 2, -3, -8,-10, -8, -6, -2, 0, -+ }, -+ { // B=0.32667 C=0.33667 -+ 0, -2, -6, -8,-10, -8, -3, 2, 18, 49, 82,119,155,188,213,228,228,213,188,155,119, 82, 49, 18, 2, -3, -8,-10, -8, -6, -2, 0, -+ }, -+ { // B=0.32000 C=0.34000 -+ 0, -2, -6, -8,-10, -9, -3, 2, 18, 49, 82,119,155,188,214,228,228,214,188,155,119, 82, 49, 18, 2, -3, -9,-10, -8, -6, -2, 0, -+ }, -+ { // B=0.31333 C=0.34333 -+ 0, -2, -6, -8,-10, -9, -4, 1, 18, 49, 82,119,155,188,214,229,229,214,188,155,119, 82, 49, 18, 1, -4, -9,-10, -8, -6, -2, 0, -+ }, -+ { // B=0.30667 C=0.34667 -+ 0, -2, -6, -9,-10, -9, -4, 1, 18, 49, 82,119,156,189,214,229,229,214,189,156,119, 82, 49, 18, 1, -4, -9,-10, -9, -6, -2, 0, -+ }, -+ { // B=0.30000 C=0.35000 -+ 0, -3, -5, -9,-10,-10, -4, 1, 18, 49, 82,119,156,189,215,230,230,215,189,156,119, 82, 49, 18, 1, -4,-10,-10, -9, -5, -3, 0, -+ }, -+ { // B=0.29333 C=0.35333 -+ 0, -2, -6, -9,-10,-10, -4, 1, 17, 48, 82,119,156,190,215,231,231,215,190,156,119, 82, 48, 17, 1, -4,-10,-10, -9, -6, -2, 0, -+ }, -+ { // B=0.28667 C=0.35667 -+ 0, -2, -6, -9,-11,-10, -5, 1, 17, 48, 82,119,157,190,216,231,231,216,190,157,119, 82, 48, 17, 1, -5,-10,-11, -9, -6, -2, 0, -+ }, -+ { // B=0.28000 C=0.36000 -+ 0, -3, -6, -9,-11,-10, -5, 0, 17, 48, 82,119,157,190,217,231,231,217,190,157,119, 82, 48, 17, 0, -5,-10,-11, -9, -6, -3, 0, -+ }, -+ { // B=0.27333 C=0.36333 -+ 0, -3, -6, -9,-11,-11, -5, 0, 17, 48, 82,119,157,191,217,232,232,217,191,157,119, 82, 48, 17, 0, -5,-11,-11, -9, -6, -3, 0, -+ }, -+ { // B=0.26667 C=0.36667 -+ 0, -3, -6, -9,-11,-11, -5, 0, 17, 48, 81,119,157,191,217,233,233,217,191,157,119, 81, 48, 17, 0, -5,-11,-11, -9, -6, -3, 0, -+ }, -+ { // B=0.26000 C=0.37000 -+ 0, -3, -6,-10,-11,-11, -5, 0, 16, 47, 81,120,156,191,218,233,233,218,191,156,120, 81, 47, 16, 0, -5,-11,-11,-10, -6, -3, 0, -+ }, -+ { // B=0.25333 C=0.37333 -+ 0, -3, -6, -9,-12,-11, -6, 0, 16, 47, 81,119,158,192,218,234,234,218,192,158,119, 81, 47, 16, 0, -6,-11,-12, -9, -6, -3, 0, -+ }, -+ { // B=0.24667 C=0.37667 -+ 0, -3, -6,-10,-12,-11, -6, 0, 16, 47, 81,120,157,192,219,234,234,219,192,157,120, 81, 47, 16, 0, -6,-11,-12,-10, -6, -3, 0, -+ }, -+ { // B=0.24000 C=0.38000 -+ 0, -3, -6,-10,-12,-12, -6, -1, 16, 47, 81,120,158,193,219,235,235,219,193,158,120, 81, 47, 16, -1, -6,-12,-12,-10, -6, -3, 0, -+ }, -+ { // B=0.23333 C=0.38333 -+ 0, -3, -6,-10,-12,-12, -6, -1, 16, 46, 81,120,158,193,220,236,236,220,193,158,120, 81, 46, 16, -1, -6,-12,-12,-10, -6, -3, 0, -+ }, -+ { // B=0.22667 C=0.38667 -+ 0, -3, -6,-10,-12,-12, -7, -1, 15, 47, 80,120,158,194,220,236,236,220,194,158,120, 80, 47, 15, -1, -7,-12,-12,-10, -6, -3, 0, -+ }, -+ { // B=0.22000 C=0.39000 -+ 0, -3, -6,-10,-13,-12, -7, -1, 15, 46, 80,120,159,194,221,237,237,221,194,159,120, 80, 46, 15, -1, -7,-12,-13,-10, -6, -3, 0, -+ }, -+ { // B=0.21333 C=0.39333 -+ 0, -3, -6,-10,-13,-12, -8, -1, 15, 46, 80,120,159,194,221,237,237,221,194,159,120, 80, 46, 15, -1, -8,-12,-13,-10, -6, -3, 0, -+ }, -+ { // B=0.20667 C=0.39667 -+ 0, -3, -7,-10,-13,-12, -8, -2, 15, 46, 80,120,159,194,222,238,238,222,194,159,120, 80, 46, 15, -2, -8,-12,-13,-10, -7, -3, 0, -+ }, -+ { // B=0.20000 C=0.40000 -+ 0, -3, -7,-10,-13,-13, -8, -2, 15, 45, 81,120,159,195,222,238,238,222,195,159,120, 81, 45, 15, -2, -8,-13,-13,-10, -7, -3, 0, -+ }, -+ { // B=0.19333 C=0.40333 -+ 0, -3, -7,-11,-13,-13, -8, -2, 15, 45, 81,120,160,195,223,239,239,223,195,160,120, 81, 45, 15, -2, -8,-13,-13,-11, -7, -3, 0, -+ }, -+ { // B=0.18667 C=0.40667 -+ 0, -3, -7,-10,-14,-13, -9, -2, 14, 45, 80,120,160,196,223,240,240,223,196,160,120, 80, 45, 14, -2, -9,-13,-14,-10, -7, -3, 0, -+ }, -+ { // B=0.18000 C=0.41000 -+ 0, -3, -7,-11,-13,-13, -9, -2, 14, 45, 80,120,160,196,224,240,240,224,196,160,120, 80, 45, 14, -2, -9,-13,-13,-11, -7, -3, 0, -+ }, -+ { // B=0.17333 C=0.41333 -+ 0, -3, -7,-11,-13,-14, -9, -3, 14, 45, 80,120,160,196,225,240,240,225,196,160,120, 80, 45, 14, -3, -9,-14,-13,-11, -7, -3, 0, -+ }, -+ { // B=0.16667 C=0.41667 -+ 0, -3, -7,-11,-14,-14, -9, -3, 14, 44, 80,120,161,197,225,241,241,225,197,161,120, 80, 44, 14, -3, -9,-14,-14,-11, -7, -3, 0, -+ }, -+ { // B=0.16000 C=0.42000 -+ 0, -3, -7,-11,-14,-14,-10, -3, 14, 44, 80,120,161,197,225,242,242,225,197,161,120, 80, 44, 14, -3,-10,-14,-14,-11, -7, -3, 0, -+ }, -+ { // B=0.15333 C=0.42333 -+ 0, -3, -7,-11,-14,-14,-10, -3, 13, 44, 80,120,161,197,226,242,242,226,197,161,120, 80, 44, 13, -3,-10,-14,-14,-11, -7, -3, 0, -+ }, -+ { // B=0.14667 C=0.42667 -+ 0, -3, -7,-11,-15,-14,-10, -4, 14, 43, 80,120,163,198,226,243,243,226,198,163,120, 80, 43, 14, -4,-10,-14,-15,-11, -7, -3, 0, -+ }, -+ { // B=0.14000 C=0.43000 -+ 0, -3, -7,-12,-14,-15,-10, -4, 14, 43, 80,120,163,198,227,243,243,227,198,163,120, 80, 43, 14, -4,-10,-15,-14,-12, -7, -3, 0, -+ }, -+ { // B=0.13333 C=0.43333 -+ 0, -3, -7,-12,-14,-15,-11, -4, 13, 43, 79,121,161,199,227,244,244,227,199,161,121, 79, 43, 13, -4,-11,-15,-14,-12, -7, -3, 0, -+ }, -+ { // B=0.12667 C=0.43667 -+ 0, -3, -7,-12,-14,-15,-11, -4, 13, 43, 79,120,163,199,228,245,245,228,199,163,120, 79, 43, 13, -4,-11,-15,-14,-12, -7, -3, 0, -+ }, -+ { // B=0.12000 C=0.44000 -+ 0, -3, -7,-12,-15,-15,-12, -5, 13, 43, 79,121,162,199,228,245,245,228,199,162,121, 79, 43, 13, -5,-12,-15,-15,-12, -7, -3, 0, -+ }, -+ { // B=0.11333 C=0.44333 -+ 0, -3, -7,-12,-15,-16,-11, -5, 13, 42, 79,121,162,200,229,246,246,229,200,162,121, 79, 42, 13, -5,-11,-16,-15,-12, -7, -3, 0, -+ }, -+ { // B=0.10667 C=0.44667 -+ 0, -3, -8,-12,-15,-16,-12, -5, 13, 42, 79,121,162,200,229,246,246,229,200,162,121, 79, 42, 13, -5,-12,-16,-15,-12, -8, -3, 0, -+ }, -+ { // B=0.10000 C=0.45000 -+ 0, -3, -8,-12,-16,-16,-12, -6, 13, 42, 79,121,163,200,230,247,247,230,200,163,121, 79, 42, 13, -6,-12,-16,-16,-12, -8, -3, 0, -+ }, -+ { // B=0.09333 C=0.45333 -+ 0, -3, -8,-12,-16,-16,-13, -5, 12, 42, 79,121,163,201,230,248,248,230,201,163,121, 79, 42, 12, -5,-13,-16,-16,-12, -8, -3, 0, -+ }, -+ { // B=0.08667 C=0.45667 -+ 0, -3, -8,-12,-16,-16,-13, -5, 12, 41, 79,121,163,201,231,248,248,231,201,163,121, 79, 41, 12, -5,-13,-16,-16,-12, -8, -3, 0, -+ }, -+ { // B=0.08000 C=0.46000 -+ 0, -3, -8,-12,-16,-17,-13, -6, 12, 41, 79,121,163,201,232,248,248,232,201,163,121, 79, 41, 12, -6,-13,-17,-16,-12, -8, -3, 0, -+ }, -+ { // B=0.07333 C=0.46333 -+ 0, -3, -8,-13,-16,-17,-13, -6, 12, 41, 79,121,164,202,232,249,249,232,202,164,121, 79, 41, 12, -6,-13,-17,-16,-13, -8, -3, 0, -+ }, -+ { // B=0.06667 C=0.46667 -+ 0, -3, -8,-13,-16,-17,-14, -6, 11, 41, 79,121,164,202,233,249,249,233,202,164,121, 79, 41, 11, -6,-14,-17,-16,-13, -8, -3, 0, -+ }, -+ { // B=0.06000 C=0.47000 -+ 0, -3, -8,-13,-16,-18,-14, -6, 11, 40, 79,121,164,203,233,250,250,233,203,164,121, 79, 40, 11, -6,-14,-18,-16,-13, -8, -3, 0, -+ }, -+ { // B=0.05333 C=0.47333 -+ 0, -3, -8,-13,-17,-18,-14, -6, 11, 40, 79,121,165,203,233,251,251,233,203,165,121, 79, 40, 11, -6,-14,-18,-17,-13, -8, -3, 0, -+ }, -+ { // B=0.04667 C=0.47667 -+ 0, -4, -8,-13,-17,-18,-14, -7, 11, 40, 79,121,166,203,234,251,251,234,203,166,121, 79, 40, 11, -7,-14,-18,-17,-13, -8, -4, 0, -+ }, -+ { // B=0.04000 C=0.48000 -+ 0, -4, -8,-13,-17,-18,-14, -7, 11, 40, 78,121,166,204,234,251,251,234,204,166,121, 78, 40, 11, -7,-14,-18,-17,-13, -8, -4, 0, -+ }, -+ { // B=0.03333 C=0.48333 -+ 0, -4, -8,-14,-17,-18,-15, -7, 11, 40, 78,122,164,204,235,252,252,235,204,164,122, 78, 40, 11, -7,-15,-18,-17,-14, -8, -4, 0, -+ }, -+ { // B=0.02667 C=0.48667 -+ 0, -4, -8,-14,-17,-19,-15, -7, 10, 40, 78,122,164,205,235,253,253,235,205,164,122, 78, 40, 10, -7,-15,-19,-17,-14, -8, -4, 0, -+ }, -+ { // B=0.02000 C=0.49000 -+ 0, -4, -8,-14,-17,-19,-15, -7, 10, 39, 78,122,164,205,236,253,253,236,205,164,122, 78, 39, 10, -7,-15,-19,-17,-14, -8, -4, 0, -+ }, -+ { // B=0.01333 C=0.49333 -+ 0, -4, -8,-14,-18,-19,-16, -7, 9, 40, 78,122,165,205,236,254,254,236,205,165,122, 78, 40, 9, -7,-16,-19,-18,-14, -8, -4, 0, -+ }, -+ { // B=0.00667 C=0.49667 -+ 0, -4, -9,-14,-18,-19,-15, -8, 10, 39, 78,122,166,206,236,254,254,236,206,166,122, 78, 39, 10, -8,-15,-19,-18,-14, -9, -4, 0, -+ }, -+ { // B=0.00000 C=0.50000 -+ 0, -4, -8,-14,-18,-19,-16, -8, 9, 39, 77,122,166,206,237,255,255,237,206,166,122, 77, 39, 9, -8,-16,-19,-18,-14, -8, -4, 0, -+ }, -+ }; -+ int index = (sharpness + 1.0f) * 50.0f + 0.5f; -+ if (index >=0 && index <= 100) -+ { -+ const int16_t *coef = mitchells[index]; -+ -+ char command[33*12]; -+ char response[33*12]; -+ unsigned int len = sprintf(command, "scaling_kernel "); -+ for (int i=0; i < 32; i++) { -+ if (len + 12 < sizeof command) -+ len += sprintf(command+len, "%d ", coef[i]); -+ } -+ // no interpolate flag -+ if (len + 12 < sizeof command) -+ len += sprintf(command+len, " %d", 0); -+ //printf("%i: %s\n", index, command); -+ vc_gencmd(response, sizeof response, command); -+ } -+} -+ - void COMXPlayer::Process() - { - bool bOmxWaitVideo = false; -@@ -1183,6 +1511,8 @@ void COMXPlayer::Process() - SetCaching(CACHESTATE_FLUSH); - - EDEINTERLACEMODE current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode; -+ float current_sharpness = CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness; -+ SetSharpness(current_sharpness); - - while (!m_bAbortRequest) - { -@@ -1214,6 +1544,13 @@ void COMXPlayer::Process() - current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode; - } - -+ // if sharpness setting has changed, we should update it -+ if (current_sharpness != CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness) -+ { -+ current_sharpness = CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness; -+ SetSharpness(current_sharpness); -+ } -+ - m_video_fifo = (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize()); - m_audio_fifo = (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal()); - -@@ -4577,6 +4914,7 @@ void COMXPlayer::GetRenderFeatures(std::vector<int> &renderFeatures) - renderFeatures.push_back(RENDERFEATURE_CROP); - renderFeatures.push_back(RENDERFEATURE_PIXEL_RATIO); - renderFeatures.push_back(RENDERFEATURE_ZOOM); -+ renderFeatures.push_back(RENDERFEATURE_SHARPNESS); - } - - void COMXPlayer::GetDeinterlaceMethods(std::vector<int> &deinterlaceMethods) --- -1.9.3 - - -From 97a3f2347e45eee8f960a2190891d4bd9de3dda0 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 10 Apr 2014 17:24:51 +0100 -Subject: [PATCH 68/94] [rpi] Include ntsc frequencies in list of supported - resolutions - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 8 ------ - xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp | 35 ++++++++++++++++++++++++- - xbmc/windowing/egl/WinSystemEGL.cpp | 3 ++- - 3 files changed, 36 insertions(+), 10 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index 019f4b2..b8a3871 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -556,14 +556,6 @@ bool OMXPlayerVideo::OpenDecoder() - m_omxVideo.GetDecoderName().c_str() , m_hints.width, m_hints.height, m_hints.profile, m_fFrameRate); - - m_codecname = m_omxVideo.GetDecoderName(); -- -- // if we are closer to ntsc version of framerate, let gpu know -- int iFrameRate = (int)(m_fFrameRate + 0.5f); -- bool bNtscFreq = fabs(m_fFrameRate * 1001.0f / 1000.0f - iFrameRate) < fabs(m_fFrameRate - iFrameRate); -- char response[80], command[80]; -- sprintf(command, "hdmi_ntsc_freqs %d", bNtscFreq); -- CLog::Log(LOGINFO, "OMXPlayerVideo::OpenDecoder fps: %f %s\n", m_fFrameRate, command); -- m_DllBcmHost.vc_gencmd(response, sizeof response, command); - } - - // start from assuming all recent frames had valid pts -diff --git a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -index dc47095..21b8cc4 100644 ---- a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -+++ b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -@@ -20,6 +20,7 @@ - #include "system.h" - - #include <EGL/egl.h> -+#include <math.h> - #include "EGLNativeTypeRaspberryPI.h" - #include "utils/log.h" - #include "guilib/gui3d.h" -@@ -236,6 +237,18 @@ bool CEGLNativeTypeRaspberryPI::SetNativeResolution(const RESOLUTION_INFO &res) - property.param2 = 0; - vc_tv_hdmi_set_property(&property); - } -+ -+ HDMI_PROPERTY_PARAM_T property; -+ property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE; -+ // if we are closer to ntsc version of framerate, let gpu know -+ int iFrameRate = (int)(res.fRefreshRate + 0.5f); -+ if (fabsf(res.fRefreshRate * (1001.0f / 1000.0f) - iFrameRate) < fabsf(res.fRefreshRate - iFrameRate)) -+ property.param1 = HDMI_PIXEL_CLOCK_TYPE_NTSC; -+ else -+ property.param1 = HDMI_PIXEL_CLOCK_TYPE_PAL; -+ property.param2 = 0; -+ vc_tv_hdmi_set_property(&property); -+ - int success = m_DllBcmHost->vc_tv_hdmi_power_on_explicit_new(HDMI_MODE_HDMI, GETFLAGS_GROUP(res.dwFlags), GETFLAGS_MODE(res.dwFlags)); - - if (success == 0) -@@ -442,7 +455,10 @@ bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &r - m_desktopRes.dwFlags |= D3DPRESENTFLAG_MODE3DTB; - m_desktopRes.fPixelRatio *= 0.5; - } -- m_desktopRes.fRefreshRate = (float)tv_state.display.hdmi.frame_rate; -+ HDMI_PROPERTY_PARAM_T property; -+ property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE; -+ vc_tv_hdmi_get_property(&property); -+ m_desktopRes.fRefreshRate = property.param1 == HDMI_PIXEL_CLOCK_TYPE_NTSC ? tv_state.display.hdmi.frame_rate * (1000.0f/1001.0f) : tv_state.display.hdmi.frame_rate; - } - else // sdtv - { -@@ -576,6 +592,12 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - res.iSubtitles = (int)(0.965 * res.iHeight); - - AddUniqueResolution(res, resolutions); -+ if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) -+ { -+ RESOLUTION_INFO res2 = res; -+ res2.fRefreshRate = (float)tv->frame_rate * (1000.0f/1001.0f); -+ AddUniqueResolution(res2, resolutions); -+ } - - // Also add 3D versions of modes - if (tv->struct_3d_mask & HDMI_3D_STRUCT_SIDE_BY_SIDE_HALF_HORIZONTAL) -@@ -590,6 +612,11 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - res2.iSubtitles = (int)(0.965 * res2.iHeight); - - AddUniqueResolution(res2, resolutions); -+ if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) -+ { -+ res2.fRefreshRate = (float)tv->frame_rate * (1000.0f/1001.0f); -+ AddUniqueResolution(res2, resolutions); -+ } - } - if (tv->struct_3d_mask & HDMI_3D_STRUCT_TOP_AND_BOTTOM) - { -@@ -603,6 +630,12 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - res2.iSubtitles = (int)(0.965 * res2.iHeight); - - AddUniqueResolution(res2, resolutions); -+ if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) -+ { -+ res2.fRefreshRate = (float)tv->frame_rate * (1000.0f/1001.0f); -+ AddUniqueResolution(res2, resolutions); -+ } -+ - } - } - } -diff --git a/xbmc/windowing/egl/WinSystemEGL.cpp b/xbmc/windowing/egl/WinSystemEGL.cpp -index 0c32947..258a293 100644 ---- a/xbmc/windowing/egl/WinSystemEGL.cpp -+++ b/xbmc/windowing/egl/WinSystemEGL.cpp -@@ -34,6 +34,7 @@ - #include "EGLWrapper.h" - #include "EGLQuirks.h" - #include <vector> -+#include <float.h> - //////////////////////////////////////////////////////////////////////////////////////////// - CWinSystemEGL::CWinSystemEGL() : CWinSystemBase() - { -@@ -399,7 +400,7 @@ void CWinSystemEGL::UpdateResolutions() - resDesktop.iScreenWidth == resolutions[i].iScreenWidth && - resDesktop.iScreenHeight == resolutions[i].iScreenHeight && - (resDesktop.dwFlags & D3DPRESENTFLAG_MODEMASK) == (resolutions[i].dwFlags & D3DPRESENTFLAG_MODEMASK) && -- resDesktop.fRefreshRate == resolutions[i].fRefreshRate) -+ fabs(resDesktop.fRefreshRate - resolutions[i].fRefreshRate) < FLT_EPSILON) - { - ResDesktop = res_index; - } --- -1.9.3 - - -From 6e000e35a42863a9db644692246c43300e4ab948 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 10 Apr 2014 17:26:20 +0100 -Subject: [PATCH 69/94] [omxplayer] Allow a framerate callback from GPU to - trigger a hdmi mode change - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 8 +++++--- - xbmc/cores/omxplayer/OMXPlayerVideo.h | 4 ++-- - xbmc/cores/omxplayer/OMXVideo.cpp | 35 +++++++++++++++++---------------- - xbmc/cores/omxplayer/OMXVideo.h | 2 +- - 4 files changed, 26 insertions(+), 23 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index b8a3871..e9010b1 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -694,7 +694,7 @@ void OMXPlayerVideo::RenderUpdateCallBack(const void *ctx, const CRect &SrcRect, - player->SetVideoRect(SrcRect, DestRect); - } - --void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, float display_aspect) -+void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, float framerate, float display_aspect) - { - RESOLUTION res = g_graphicsContext.GetVideoResolution(); - uint32_t video_width = CDisplaySettings::Get().GetResolutionInfo(res).iScreenWidth; -@@ -743,6 +743,8 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, f - else if( display_aspect != 0.0f ) - iDisplayWidth = (int) (iDisplayHeight * display_aspect); - -+ m_fFrameRate = DVD_TIME_BASE / CDVDCodecUtils::NormalizeFrameduration((double)DVD_TIME_BASE / framerate); -+ - CLog::Log(LOGDEBUG,"%s - change configuration. video:%dx%d. framerate: %4.2f. %dx%d format: BYPASS", - __FUNCTION__, video_width, video_height, m_fFrameRate, iDisplayWidth, iDisplayHeight); - -@@ -757,9 +759,9 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, f - g_renderManager.RegisterRenderUpdateCallBack((const void*)this, RenderUpdateCallBack); - } - --void OMXPlayerVideo::ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float display_aspect) -+void OMXPlayerVideo::ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float framerate, float display_aspect) - { - OMXPlayerVideo *player = static_cast<OMXPlayerVideo*>(ctx); -- player->ResolutionUpdateCallBack(width, height, display_aspect); -+ player->ResolutionUpdateCallBack(width, height, framerate, display_aspect); - } - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.h b/xbmc/cores/omxplayer/OMXPlayerVideo.h -index b49748f..33564dd 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.h -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.h -@@ -125,7 +125,7 @@ class OMXPlayerVideo : public CThread - int GetFreeSpace(); - void SetVideoRect(const CRect &SrcRect, const CRect &DestRect); - static void RenderUpdateCallBack(const void *ctx, const CRect &SrcRect, const CRect &DestRect); -- void ResolutionUpdateCallBack(uint32_t width, uint32_t height, float pixel_aspect); -- static void ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float pixel_aspect); -+ void ResolutionUpdateCallBack(uint32_t width, uint32_t height, float framerate, float pixel_aspect); -+ static void ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float framerate, float pixel_aspect); - }; - #endif -diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp -index 66a351d..10a7530 100644 ---- a/xbmc/cores/omxplayer/OMXVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXVideo.cpp -@@ -171,6 +171,22 @@ bool COMXVideo::PortSettingsChanged() - CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); - } - -+ OMX_CONFIG_INTERLACETYPE interlace; -+ OMX_INIT_STRUCTURE(interlace); -+ interlace.nPortIndex = m_omx_decoder.GetOutputPort(); -+ omx_err = m_omx_decoder.GetConfig(OMX_IndexConfigCommonInterlace, &interlace); -+ -+ if(m_deinterlace_request == VS_DEINTERLACEMODE_FORCE) -+ m_deinterlace = true; -+ else if(m_deinterlace_request == VS_DEINTERLACEMODE_OFF) -+ m_deinterlace = false; -+ else -+ m_deinterlace = interlace.eMode != OMX_InterlaceProgressive; -+ -+ CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, -+ port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, -+ port_image.format.video.xFramerate / (float)(1<<16), interlace.eMode, m_deinterlace); -+ - // let OMXPlayerVideo know about resolution so it can inform RenderManager - if (m_res_callback) - { -@@ -178,7 +194,8 @@ bool COMXVideo::PortSettingsChanged() - if (pixel_aspect.nX && pixel_aspect.nY) - display_aspect = (float)pixel_aspect.nX * port_image.format.video.nFrameWidth / - ((float)pixel_aspect.nY * port_image.format.video.nFrameHeight); -- m_res_callback(m_res_ctx, port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, display_aspect); -+ m_res_callback(m_res_ctx, port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, -+ port_image.format.video.xFramerate / (float)(1<<16), display_aspect); - } - - if (m_settings_changed) -@@ -187,27 +204,11 @@ bool COMXVideo::PortSettingsChanged() - return true; - } - -- OMX_CONFIG_INTERLACETYPE interlace; -- OMX_INIT_STRUCTURE(interlace); -- interlace.nPortIndex = m_omx_decoder.GetOutputPort(); -- omx_err = m_omx_decoder.GetConfig(OMX_IndexConfigCommonInterlace, &interlace); -- -- if(m_deinterlace_request == VS_DEINTERLACEMODE_FORCE) -- m_deinterlace = true; -- else if(m_deinterlace_request == VS_DEINTERLACEMODE_OFF) -- m_deinterlace = false; -- else -- m_deinterlace = interlace.eMode != OMX_InterlaceProgressive; -- - if(!m_omx_render.Initialize("OMX.broadcom.video_render", OMX_IndexParamVideoInit)) - return false; - - m_omx_render.ResetEos(); - -- CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, -- port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, -- port_image.format.video.xFramerate / (float)(1<<16), interlace.eMode, m_deinterlace); -- - if(!m_omx_sched.Initialize("OMX.broadcom.video_scheduler", OMX_IndexParamVideoInit)) - return false; - -diff --git a/xbmc/cores/omxplayer/OMXVideo.h b/xbmc/cores/omxplayer/OMXVideo.h -index d69f854..fd23e70 100644 ---- a/xbmc/cores/omxplayer/OMXVideo.h -+++ b/xbmc/cores/omxplayer/OMXVideo.h -@@ -38,7 +38,7 @@ - - #define CLASSNAME "COMXVideo" - --typedef void (*ResolutionUpdateCallBackFn)(void *ctx, uint32_t width, uint32_t height, float display_aspect); -+typedef void (*ResolutionUpdateCallBackFn)(void *ctx, uint32_t width, uint32_t height, float framerate, float display_aspect); - - class COMXVideo - { --- -1.9.3 - - -From 7d8653f297a2aeea7b10bf36732892878ae89334 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Fri, 11 Apr 2014 19:01:26 +0100 -Subject: [PATCH 70/94] [omxplayer] Request to be notified about framerate - changes - ---- - xbmc/cores/omxplayer/OMXVideo.cpp | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp -index 10a7530..148b16f 100644 ---- a/xbmc/cores/omxplayer/OMXVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXVideo.cpp -@@ -183,7 +183,7 @@ bool COMXVideo::PortSettingsChanged() - else - m_deinterlace = interlace.eMode != OMX_InterlaceProgressive; - -- CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, -+ CLog::Log(LOGDEBUG, "%s::%s - %dx%d@%.2f interlace:%d deinterlace:%d", CLASSNAME, __func__, - port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, - port_image.format.video.xFramerate / (float)(1<<16), interlace.eMode, m_deinterlace); - -@@ -558,7 +558,17 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de - CLog::Log(LOGERROR, "COMXVideo::Open OMX_IndexConfigRequestCallback error (0%08x)\n", omx_err); - return false; - } -- -+ // request portsettingschanged on refresh rate change -+ if (CSettings::Get().GetInt("videoplayer.adjustrefreshrate") == ADJUST_REFRESHRATE_ALWAYS) -+ { -+ notifications.nIndex = OMX_IndexParamPortDefinition; -+ omx_err = m_omx_decoder.SetParameter((OMX_INDEXTYPE)OMX_IndexConfigRequestCallback, ¬ifications); -+ if (omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "COMXVideo::Open OMX_IndexConfigRequestCallback error (0%08x)\n", omx_err); -+ //return false; -+ } -+ } - OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE concanParam; - OMX_INIT_STRUCTURE(concanParam); - if(g_advancedSettings.m_omxDecodeStartWithValidFrame) --- -1.9.3 - - -From 12a54cc9ca0c0500f1d86173df0c8466270bd766 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 14 Apr 2014 17:04:57 +0100 -Subject: [PATCH 71/94] [omxplayer] Support stereo view modes with scaling - -The Pi only supported a single view rectangle, which is sufficient for all mono view modes, -but only supports a subset of stereo modes. - -To work around this, the scaling rectangles were ignored in 3D modes and 3D video was treated as unscaled. -While this worked or square pixel, 16:9 content on a 16:9 display, it went wrong is various other conditions. - -@sraue reported that mono view of SBS/TAB content wasn't scaled correctly, and other forum reports -aspect ratio errors in widescreen 3D videos. - -As it wasn't trivial to work around these bug reports, I've added a new stereo flags to the firmware -that allows a second display region to be created for the second eye, allowing scaling to work. - -I've been through the video stereo modes (none, sbs, tab) and the display stereo modes (mono, sbs, tab) -and all the zoom modes, and compared the scaling to xbmc on windows and all seem to match - -Requires udpated firmware. ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 103 +++++++++++++++++++++----------- - xbmc/cores/omxplayer/OMXPlayerVideo.h | 4 +- - xbmc/cores/omxplayer/OMXVideo.cpp | 45 ++++++++------ - xbmc/cores/omxplayer/OMXVideo.h | 3 +- - 4 files changed, 100 insertions(+), 55 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index e9010b1..d5f3bec 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -97,6 +97,9 @@ OMXPlayerVideo::OMXPlayerVideo(OMXClock *av_clock, - - m_src_rect.SetRect(0, 0, 0, 0); - m_dst_rect.SetRect(0, 0, 0, 0); -+ m_video_stereo_mode = RENDER_STEREO_MODE_OFF; -+ m_display_stereo_mode = RENDER_STEREO_MODE_OFF; -+ m_StereoInvert = false; - m_started = false; - m_iCurrentPts = DVD_NOPTS_VALUE; - m_nextOverlay = DVD_NOPTS_VALUE; -@@ -120,6 +123,9 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints) - // force SetVideoRect to be called initially - m_src_rect.SetRect(0, 0, 0, 0); - m_dst_rect.SetRect(0, 0, 0, 0); -+ m_video_stereo_mode = RENDER_STEREO_MODE_OFF; -+ m_display_stereo_mode = RENDER_STEREO_MODE_OFF; -+ m_StereoInvert = false; - - if (!m_DllBcmHost.Load()) - return false; -@@ -634,58 +640,85 @@ int OMXPlayerVideo::GetFreeSpace() - - void OMXPlayerVideo::SetVideoRect(const CRect &InSrcRect, const CRect &InDestRect) - { -- CRect SrcRect = InSrcRect, DestRect = InDestRect; -+ // we get called twice a frame for left/right. Can ignore the rights. -+ if (g_graphicsContext.GetStereoView() == RENDER_STEREO_VIEW_RIGHT) -+ return; - -- // in 3d modes skip this - we get called as the gui switches from left eye to right eye -+ CRect SrcRect = InSrcRect, DestRect = InDestRect; - unsigned flags = GetStereoModeFlags(GetStereoMode()); -- -- if (CONF_FLAGS_STEREO_MODE_MASK(flags)) -- { -- if (g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_MONO) -- { -- if (GetStereoMode() == "left_right") -- SrcRect.SetRect(0, 0, m_hints.width>>1, m_hints.height); -- else if (GetStereoMode() == "right_left") -- SrcRect.SetRect(m_hints.width>>1, 0, m_hints.width, m_hints.height); -- else if (GetStereoMode() == "top_bottom") -- SrcRect.SetRect(0, 0, m_hints.width, m_hints.height>>1); -- else if (GetStereoMode() == "bottom_top") -- SrcRect.SetRect(0, m_hints.height>>1, m_hints.width, m_hints.height); -- } -- else -- SrcRect.SetRect(0, 0, m_hints.width, m_hints.height); -- // interpreted as fullscreen -- DestRect.SetRect(0, 0, 0, 0); -- } -+ RENDER_STEREO_MODE video_stereo_mode = (flags & CONF_FLAGS_STEREO_MODE_SBS) ? RENDER_STEREO_MODE_SPLIT_VERTICAL : -+ (flags & CONF_FLAGS_STEREO_MODE_TAB) ? RENDER_STEREO_MODE_SPLIT_HORIZONTAL : RENDER_STEREO_MODE_OFF; -+ bool stereo_invert = (flags & CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT) ? true : false; -+ RENDER_STEREO_MODE display_stereo_mode = g_graphicsContext.GetStereoMode(); - - // check if destination rect or video view mode has changed -- if (m_dst_rect != DestRect || m_src_rect != SrcRect) -- { -- m_src_rect = SrcRect; -- m_dst_rect = DestRect; -- } -- else -- { -+ if (!(m_dst_rect != DestRect) && !(m_src_rect != SrcRect) && m_video_stereo_mode == video_stereo_mode && m_display_stereo_mode == display_stereo_mode && m_StereoInvert == stereo_invert) - return; -- } -+ -+ CLog::Log(LOGDEBUG, "OMXPlayerVideo::%s %d,%d,%d,%d -> %d,%d,%d,%d (%d,%d,%d,%d,%s)", __func__, -+ (int)SrcRect.x1, (int)SrcRect.y1, (int)SrcRect.x2, (int)SrcRect.y2, -+ (int)DestRect.x1, (int)DestRect.y1, (int)DestRect.x2, (int)DestRect.y2, -+ video_stereo_mode, display_stereo_mode, CMediaSettings::Get().GetCurrentVideoSettings().m_StereoInvert, g_graphicsContext.GetStereoView(), OMXPlayerVideo::GetStereoMode().c_str()); -+ -+ m_src_rect = SrcRect; -+ m_dst_rect = DestRect; -+ m_video_stereo_mode = video_stereo_mode; -+ m_display_stereo_mode = display_stereo_mode; -+ m_StereoInvert = stereo_invert; - - // might need to scale up m_dst_rect to display size as video decodes - // to separate video plane that is at display size. - RESOLUTION res = g_graphicsContext.GetVideoResolution(); - CRect gui(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iWidth, CDisplaySettings::Get().GetResolutionInfo(res).iHeight); - CRect display(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iScreenWidth, CDisplaySettings::Get().GetResolutionInfo(res).iScreenHeight); -- CRect dst_rect(m_dst_rect); -+ -+ switch (video_stereo_mode) -+ { -+ case RENDER_STEREO_MODE_SPLIT_VERTICAL: -+ // optimisation - use simpler display mode in common case of unscaled 3d with same display mode -+ if (video_stereo_mode == display_stereo_mode && DestRect.x1 == 0.0f && DestRect.x2 * 2.0f == gui.Width() && !stereo_invert) -+ { -+ SrcRect.x2 *= 2.0f; -+ DestRect.x2 *= 2.0f; -+ video_stereo_mode = RENDER_STEREO_MODE_OFF; -+ display_stereo_mode = RENDER_STEREO_MODE_OFF; -+ } -+ else if (stereo_invert) -+ { -+ SrcRect.x1 += m_hints.width / 2; -+ SrcRect.x2 += m_hints.width / 2; -+ } -+ break; -+ -+ case RENDER_STEREO_MODE_SPLIT_HORIZONTAL: -+ // optimisation - use simpler display mode in common case of unscaled 3d with same display mode -+ if (video_stereo_mode == display_stereo_mode && DestRect.y1 == 0.0f && DestRect.y2 * 2.0f == gui.Height() && !stereo_invert) -+ { -+ SrcRect.y2 *= 2.0f; -+ DestRect.y2 *= 2.0f; -+ video_stereo_mode = RENDER_STEREO_MODE_OFF; -+ display_stereo_mode = RENDER_STEREO_MODE_OFF; -+ } -+ else if (stereo_invert) -+ { -+ SrcRect.y1 += m_hints.height / 2; -+ SrcRect.y2 += m_hints.height / 2; -+ } -+ break; -+ -+ default: break; -+ } - - if (gui != display) - { - float xscale = display.Width() / gui.Width(); - float yscale = display.Height() / gui.Height(); -- dst_rect.x1 *= xscale; -- dst_rect.x2 *= xscale; -- dst_rect.y1 *= yscale; -- dst_rect.y2 *= yscale; -+ DestRect.x1 *= xscale; -+ DestRect.x2 *= xscale; -+ DestRect.y1 *= yscale; -+ DestRect.y2 *= yscale; - } -- m_omxVideo.SetVideoRect(SrcRect, dst_rect); -+ m_omxVideo.SetVideoRect(SrcRect, DestRect, video_stereo_mode, display_stereo_mode); - } - - void OMXPlayerVideo::RenderUpdateCallBack(const void *ctx, const CRect &SrcRect, const CRect &DestRect) -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.h b/xbmc/cores/omxplayer/OMXPlayerVideo.h -index 33564dd..6f19395 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.h -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.h -@@ -69,7 +69,9 @@ class OMXPlayerVideo : public CThread - - CRect m_src_rect; - CRect m_dst_rect; -- -+ RENDER_STEREO_MODE m_video_stereo_mode; -+ RENDER_STEREO_MODE m_display_stereo_mode; -+ bool m_StereoInvert; - uint32_t m_history_valid_pts; - DllBcmHost m_DllBcmHost; - -diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp -index 148b16f..dceb8bf 100644 ---- a/xbmc/cores/omxplayer/OMXVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXVideo.cpp -@@ -836,7 +836,7 @@ void COMXVideo::Reset(void) - } - - /////////////////////////////////////////////////////////////////////////////////////////// --void COMXVideo::SetVideoRect(const CRect& SrcRect, const CRect& DestRect) -+void COMXVideo::SetVideoRect(const CRect& SrcRect, const CRect& DestRect, RENDER_STEREO_MODE video_mode, RENDER_STEREO_MODE display_mode) - { - CSingleLock lock (m_critSection); - if(!m_is_open) -@@ -846,27 +846,36 @@ void COMXVideo::SetVideoRect(const CRect& SrcRect, const CRect& DestRect) - - OMX_INIT_STRUCTURE(configDisplay); - configDisplay.nPortIndex = m_omx_render.GetInputPort(); -- configDisplay.set = (OMX_DISPLAYSETTYPE)(OMX_DISPLAY_SET_DEST_RECT|OMX_DISPLAY_SET_SRC_RECT|OMX_DISPLAY_SET_FULLSCREEN|OMX_DISPLAY_SET_NOASPECT); -- configDisplay.dest_rect.x_offset = (int)(DestRect.x1+0.5f); -- configDisplay.dest_rect.y_offset = (int)(DestRect.y1+0.5f); -- configDisplay.dest_rect.width = (int)(DestRect.Width()+0.5f); -- configDisplay.dest_rect.height = (int)(DestRect.Height()+0.5f); -- -- configDisplay.src_rect.x_offset = (int)(SrcRect.x1+0.5f); -- configDisplay.src_rect.y_offset = (int)(SrcRect.y1+0.5f); -- configDisplay.src_rect.width = (int)(SrcRect.Width()+0.5f); -- configDisplay.src_rect.height = (int)(SrcRect.Height()+0.5f); -- -- if (configDisplay.dest_rect.width == 0 || configDisplay.dest_rect.height == 0) -- configDisplay.fullscreen = OMX_TRUE; -+ configDisplay.set = (OMX_DISPLAYSETTYPE)(OMX_DISPLAY_SET_DEST_RECT|OMX_DISPLAY_SET_SRC_RECT|OMX_DISPLAY_SET_FULLSCREEN|OMX_DISPLAY_SET_NOASPECT|OMX_DISPLAY_SET_MODE); -+ configDisplay.dest_rect.x_offset = lrintf(DestRect.x1); -+ configDisplay.dest_rect.y_offset = lrintf(DestRect.y1); -+ configDisplay.dest_rect.width = lrintf(DestRect.Width()); -+ configDisplay.dest_rect.height = lrintf(DestRect.Height()); -+ -+ configDisplay.src_rect.x_offset = lrintf(SrcRect.x1); -+ configDisplay.src_rect.y_offset = lrintf(SrcRect.y1); -+ configDisplay.src_rect.width = lrintf(SrcRect.Width()); -+ configDisplay.src_rect.height = lrintf(SrcRect.Height()); -+ -+ configDisplay.fullscreen = OMX_FALSE; -+ configDisplay.noaspect = OMX_TRUE; -+ -+ if (video_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL && display_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) -+ configDisplay.mode = OMX_DISPLAY_MODE_STEREO_TOP_TO_TOP; -+ else if (video_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL && display_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) -+ configDisplay.mode = OMX_DISPLAY_MODE_STEREO_TOP_TO_LEFT; -+ else if (video_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL && display_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) -+ configDisplay.mode = OMX_DISPLAY_MODE_STEREO_LEFT_TO_TOP; -+ else if (video_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL && display_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) -+ configDisplay.mode = OMX_DISPLAY_MODE_STEREO_LEFT_TO_LEFT; - else -- configDisplay.noaspect = OMX_TRUE; -+ configDisplay.mode = OMX_DISPLAY_MODE_LETTERBOX; - - m_omx_render.SetConfig(OMX_IndexConfigDisplayRegion, &configDisplay); - -- CLog::Log(LOGDEBUG, "dest_rect.x_offset %d dest_rect.y_offset %d dest_rect.width %d dest_rect.height %d\n", -- configDisplay.dest_rect.x_offset, configDisplay.dest_rect.y_offset, -- configDisplay.dest_rect.width, configDisplay.dest_rect.height); -+ CLog::Log(LOGDEBUG, "%s::%s %d,%d,%d,%d -> %d,%d,%d,%d mode:%d", CLASSNAME, __func__, -+ configDisplay.src_rect.x_offset, configDisplay.src_rect.y_offset, configDisplay.src_rect.width, configDisplay.src_rect.height, -+ configDisplay.dest_rect.x_offset, configDisplay.dest_rect.y_offset, configDisplay.dest_rect.width, configDisplay.dest_rect.height, configDisplay.mode); - } - - int COMXVideo::GetInputBufferSize() -diff --git a/xbmc/cores/omxplayer/OMXVideo.h b/xbmc/cores/omxplayer/OMXVideo.h -index fd23e70..226000e 100644 ---- a/xbmc/cores/omxplayer/OMXVideo.h -+++ b/xbmc/cores/omxplayer/OMXVideo.h -@@ -32,6 +32,7 @@ - #include "DVDDemuxers/DVDDemux.h" - #include "xbmc/settings/VideoSettings.h" - #include "threads/CriticalSection.h" -+#include "xbmc/rendering/RenderSystem.h" - #include <string> - - #define VIDEO_BUFFERS 60 -@@ -58,7 +59,7 @@ class COMXVideo - void Reset(void); - void SetDropState(bool bDrop); - std::string GetDecoderName() { return m_video_codec_name; }; -- void SetVideoRect(const CRect& SrcRect, const CRect& DestRect); -+ void SetVideoRect(const CRect& SrcRect, const CRect& DestRect, RENDER_STEREO_MODE video_mode, RENDER_STEREO_MODE display_mode); - int GetInputBufferSize(); - void SubmitEOS(); - bool IsEOS(); --- -1.9.3 - - -From 716400b7b3cf13c6546bba6a0d0a2f47825f9117 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 16 Apr 2014 21:18:06 +0100 -Subject: [PATCH 72/94] [omxplayer] Don't propagate 3d flags based on supported - 3d modes - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 29 ++++------------------------- - 1 file changed, 4 insertions(+), 25 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index d5f3bec..e9f86f3 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -736,36 +736,15 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, f - unsigned flags = 0; - ERenderFormat format = RENDER_FMT_BYPASS; - -+ /* figure out steremode expected based on user settings and hints */ -+ unsigned int stereo_flags = GetStereoModeFlags(GetStereoMode()); -+ - if(m_bAllowFullscreen) - { - flags |= CONF_FLAGS_FULLSCREEN; - m_bAllowFullscreen = false; // only allow on first configure - } -- -- flags |= GetStereoModeFlags(GetStereoMode()); -- -- if(flags & CONF_FLAGS_STEREO_MODE_SBS) -- { -- if(g_Windowing.Support3D(video_width, video_height, D3DPRESENTFLAG_MODE3DSBS)) -- CLog::Log(LOGNOTICE, "3DSBS movie found"); -- else -- { -- flags &= ~CONF_FLAGS_STEREO_MODE_MASK(~0); -- CLog::Log(LOGNOTICE, "3DSBS movie found but not supported"); -- } -- } -- else if(flags & CONF_FLAGS_STEREO_MODE_TAB) -- { -- if(g_Windowing.Support3D(video_width, video_height, D3DPRESENTFLAG_MODE3DTB)) -- CLog::Log(LOGNOTICE, "3DTB movie found"); -- else -- { -- flags &= ~CONF_FLAGS_STEREO_MODE_MASK(~0); -- CLog::Log(LOGNOTICE, "3DTB movie found but not supported"); -- } -- } -- else -- CLog::Log(LOGNOTICE, "not a 3D movie"); -+ flags |= stereo_flags; - - unsigned int iDisplayWidth = width; - unsigned int iDisplayHeight = height; --- -1.9.3 - - -From 7f2220746d9efeb3e8cfc4524479a615db5b710c Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 17 Apr 2014 13:00:52 +0100 -Subject: [PATCH 73/94] [graphics] Don't set stereo mode based on resolution - -The resolution change should follow stereo mode ---- - xbmc/guilib/GraphicContext.cpp | 22 ---------------------- - 1 file changed, 22 deletions(-) - -diff --git a/xbmc/guilib/GraphicContext.cpp b/xbmc/guilib/GraphicContext.cpp -index 5bffdf5..7e4fdd4 100644 ---- a/xbmc/guilib/GraphicContext.cpp -+++ b/xbmc/guilib/GraphicContext.cpp -@@ -418,28 +418,6 @@ void CGraphicContext::SetVideoResolution(RESOLUTION res, bool forceUpdate) - Lock(); - - RESOLUTION_INFO info_org = CDisplaySettings::Get().GetResolutionInfo(res); -- RESOLUTION_INFO info_last = CDisplaySettings::Get().GetResolutionInfo(lastRes); -- -- RENDER_STEREO_MODE stereo_mode = m_stereoMode; -- -- // if the new mode is an actual stereo mode, switch to that -- // if the old mode was an actual stereo mode, switch to no 3d mode -- if (info_org.dwFlags & D3DPRESENTFLAG_MODE3DTB) -- stereo_mode = RENDER_STEREO_MODE_SPLIT_HORIZONTAL; -- else if (info_org.dwFlags & D3DPRESENTFLAG_MODE3DSBS) -- stereo_mode = RENDER_STEREO_MODE_SPLIT_VERTICAL; -- else if ((info_last.dwFlags & D3DPRESENTFLAG_MODE3DSBS) != 0 -- || (info_last.dwFlags & D3DPRESENTFLAG_MODE3DTB) != 0) -- stereo_mode = RENDER_STEREO_MODE_OFF; -- -- if(stereo_mode != m_stereoMode) -- { -- m_stereoView = RENDER_STEREO_VIEW_OFF; -- m_stereoMode = stereo_mode; -- m_nextStereoMode = stereo_mode; -- CSettings::Get().SetInt("videoscreen.stereoscopicmode", (int)m_stereoMode); -- } -- - RESOLUTION_INFO info_mod = GetResInfo(res); - - m_iScreenWidth = info_mod.iWidth; --- -1.9.3 - - -From 7885d90283809ccbcdb9c39809682dfc099049c4 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 17 Apr 2014 13:01:51 +0100 -Subject: [PATCH 74/94] [graphics] Allow switching to a more suitable 3D - resolution - ---- - xbmc/guilib/GraphicContext.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- - xbmc/guilib/GraphicContext.h | 1 + - 2 files changed, 41 insertions(+), 1 deletion(-) - -diff --git a/xbmc/guilib/GraphicContext.cpp b/xbmc/guilib/GraphicContext.cpp -index 7e4fdd4..886b612 100644 ---- a/xbmc/guilib/GraphicContext.cpp -+++ b/xbmc/guilib/GraphicContext.cpp -@@ -35,6 +35,7 @@ - #include "utils/JobManager.h" - #include "video/VideoReferenceClock.h" - #include "cores/IPlayer.h" -+#include <float.h> - - using namespace std; - -@@ -459,6 +460,44 @@ RESOLUTION CGraphicContext::GetVideoResolution() const - return m_Resolution; - } - -+RESOLUTION CGraphicContext::Get3DVideoResolution(RENDER_STEREO_MODE mode) const -+{ -+ RESOLUTION best = m_Resolution; -+ RESOLUTION_INFO curr = CDisplaySettings::Get().GetResolutionInfo(best); -+ -+ // Find closest refresh rate -+ for (size_t i = (int)RES_DESKTOP; i < CDisplaySettings::Get().ResolutionInfoSize(); i++) -+ { -+ const RESOLUTION_INFO info = CDisplaySettings::Get().GetResolutionInfo((RESOLUTION)i); -+ -+ //discard resolutions that are not the same width and height (and interlaced/3D flags) -+ //or have a too low refreshrate -+ if (info.iScreenWidth != curr.iScreenWidth -+ || info.iScreenHeight != curr.iScreenHeight -+ || info.iScreen != curr.iScreen -+ || (info.dwFlags & D3DPRESENTFLAG_INTERLACED) != (curr.dwFlags & D3DPRESENTFLAG_INTERLACED) -+ || fabs(info.fRefreshRate - curr.fRefreshRate) >= FLT_EPSILON) -+ continue; -+ -+ if (mode == RENDER_STEREO_MODE_SPLIT_VERTICAL && info.dwFlags & D3DPRESENTFLAG_MODE3DSBS) -+ { -+ best = (RESOLUTION)i; -+ break; -+ } -+ else if (mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL && info.dwFlags & D3DPRESENTFLAG_MODE3DTB) -+ { -+ best = (RESOLUTION)i; -+ break; -+ } -+ else if ((mode == RENDER_STEREO_MODE_OFF || mode == RENDER_STEREO_MODE_MONO) && !(info.dwFlags & (D3DPRESENTFLAG_MODE3DSBS|D3DPRESENTFLAG_MODE3DTB))) -+ { -+ best = (RESOLUTION)i; -+ break; -+ } -+ } -+ return best; -+} -+ - void CGraphicContext::ResetOverscan(RESOLUTION_INFO &res) - { - res.Overscan.left = 0; -@@ -996,7 +1035,7 @@ void CGraphicContext::Flip(const CDirtyRegionList& dirty) - if(m_stereoMode != m_nextStereoMode) - { - m_stereoMode = m_nextStereoMode; -- SetVideoResolution(GetVideoResolution(), true); -+ SetVideoResolution(Get3DVideoResolution(m_stereoMode), true); - g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_RENDERER_RESET); - } - } -diff --git a/xbmc/guilib/GraphicContext.h b/xbmc/guilib/GraphicContext.h -index 0a27643..df55e92 100644 ---- a/xbmc/guilib/GraphicContext.h -+++ b/xbmc/guilib/GraphicContext.h -@@ -108,6 +108,7 @@ class CGraphicContext : public CCriticalSection, - bool IsValidResolution(RESOLUTION res); - void SetVideoResolution(RESOLUTION res, bool forceUpdate = false); - RESOLUTION GetVideoResolution() const; -+ RESOLUTION Get3DVideoResolution(RENDER_STEREO_MODE mode) const; - void ResetOverscan(RESOLUTION res, OVERSCAN &overscan); - void ResetOverscan(RESOLUTION_INFO &resinfo); - void ResetScreenParameters(RESOLUTION res); --- -1.9.3 - - -From 49438256c57d11b415f6a90f653857e7fae16a1d Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Thu, 17 Apr 2014 13:38:55 +0100 -Subject: [PATCH 75/94] [3D] Support switching to 3D resolutions - -Include matching 3D flags (SBS/TAB) in the score of a resolution to switch to, to enable switching to 3d modes. -Also remove the old code that treated 3D modes differently when assigning a score. ---- - xbmc/cores/VideoRenderers/BaseRenderer.cpp | 47 +++++++++++------------------- - 1 file changed, 17 insertions(+), 30 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/BaseRenderer.cpp b/xbmc/cores/VideoRenderers/BaseRenderer.cpp -index 970b822..9ca1be1 100644 ---- a/xbmc/cores/VideoRenderers/BaseRenderer.cpp -+++ b/xbmc/cores/VideoRenderers/BaseRenderer.cpp -@@ -222,10 +222,14 @@ void CBaseRenderer::FindResolutionFromFpsMatch(float fps, float& weight) - RESOLUTION CBaseRenderer::FindClosestResolution(float fps, float multiplier, RESOLUTION current, float& weight) - { - RESOLUTION_INFO curr = g_graphicsContext.GetResInfo(current); -+ RENDER_STEREO_MODE stereo_mode = g_graphicsContext.GetStereoMode(); - - float fRefreshRate = fps; - -- float last_diff = fRefreshRate; -+ int c_weight = MathUtils::round_int(RefreshWeight(curr.fRefreshRate, fRefreshRate * multiplier) * 1000.0); -+ if (!(stereo_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) != !(curr.dwFlags & D3DPRESENTFLAG_MODE3DSBS) || -+ !(stereo_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) != !(curr.dwFlags & D3DPRESENTFLAG_MODE3DTB)) -+ c_weight += 1000; - - // Find closest refresh rate - for (size_t i = (int)RES_DESKTOP; i < CDisplaySettings::Get().ResolutionInfoSize(); i++) -@@ -241,40 +245,23 @@ RESOLUTION CBaseRenderer::FindClosestResolution(float fps, float multiplier, RES - || info.fRefreshRate < (fRefreshRate * multiplier / 1.001) - 0.001) - continue; - -- // For 3D choose the closest refresh rate -- if(CONF_FLAGS_STEREO_MODE_MASK(m_iFlags)) -- { -- float diff = (info.fRefreshRate - fRefreshRate); -- if(diff < 0) -- diff *= -1.0f; -+ int i_weight = MathUtils::round_int(RefreshWeight(info.fRefreshRate, fRefreshRate * multiplier) * 1000.0); - -- if(diff < last_diff) -- { -- last_diff = diff; -- current = (RESOLUTION)i; -- curr = info; -- } -- } -- else -- { -- int c_weight = MathUtils::round_int(RefreshWeight(curr.fRefreshRate, fRefreshRate * multiplier) * 1000.0); -- int i_weight = MathUtils::round_int(RefreshWeight(info.fRefreshRate, fRefreshRate * multiplier) * 1000.0); -+ if (!(stereo_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) != !(info.dwFlags & D3DPRESENTFLAG_MODE3DSBS) || -+ !(stereo_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) != !(info.dwFlags & D3DPRESENTFLAG_MODE3DTB)) -+ i_weight += 1000; - -- // Closer the better, prefer higher refresh rate if the same -- if ((i_weight < c_weight) -- || (i_weight == c_weight && info.fRefreshRate > curr.fRefreshRate)) -- { -- current = (RESOLUTION)i; -- curr = info; -- } -+ // Closer the better, prefer higher refresh rate if the same -+ if ((i_weight < c_weight) -+ || (i_weight == c_weight && info.fRefreshRate > curr.fRefreshRate)) -+ { -+ current = (RESOLUTION)i; -+ curr = info; -+ c_weight = i_weight; - } - } - -- // For 3D overwrite weight -- if(CONF_FLAGS_STEREO_MODE_MASK(m_iFlags)) -- weight = 0; -- else -- weight = RefreshWeight(curr.fRefreshRate, fRefreshRate * multiplier); -+ weight = RefreshWeight(curr.fRefreshRate, fRefreshRate * multiplier); - - return current; - } --- -1.9.3 - - -From bd077947037288550a8e68efed630a3477a16564 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 23 Apr 2014 00:05:07 +0100 -Subject: [PATCH 76/94] [graphics] Make pixel ratio for 3d modes consistent - -Note: Use the stored stereo flags from lists of resolutions. -Use current stereo mode for current resolution. ---- - xbmc/cores/VideoRenderers/BaseRenderer.cpp | 10 ++++---- - xbmc/guilib/GraphicContext.cpp | 32 ++++++++++--------------- - xbmc/guilib/GraphicContext.h | 4 ++-- - xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp | 8 ------- - 4 files changed, 19 insertions(+), 35 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/BaseRenderer.cpp b/xbmc/cores/VideoRenderers/BaseRenderer.cpp -index 9ca1be1..6bf42bf 100644 ---- a/xbmc/cores/VideoRenderers/BaseRenderer.cpp -+++ b/xbmc/cores/VideoRenderers/BaseRenderer.cpp -@@ -119,7 +119,7 @@ bool CBaseRenderer::FindResolutionFromOverride(float fps, float& weight, bool fa - - for (size_t j = (int)RES_DESKTOP; j < CDisplaySettings::Get().ResolutionInfoSize(); j++) - { -- RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)j); -+ RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)j, false); - - if (info.iScreenWidth == curr.iScreenWidth - && info.iScreenHeight == curr.iScreenHeight -@@ -179,7 +179,7 @@ void CBaseRenderer::FindResolutionFromFpsMatch(float fps, float& weight) - //get the resolution with the refreshrate closest to 60 hertz - for (size_t i = (int)RES_DESKTOP; i < CDisplaySettings::Get().ResolutionInfoSize(); i++) - { -- RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i); -+ RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i, false); - - if (MathUtils::round_int(info.fRefreshRate) == 60 - && info.iScreenWidth == curr.iScreenWidth -@@ -200,7 +200,7 @@ void CBaseRenderer::FindResolutionFromFpsMatch(float fps, float& weight) - CLog::Log(LOGDEBUG, "60 hertz refreshrate not available, choosing highest"); - for (size_t i = (int)RES_DESKTOP; i < CDisplaySettings::Get().ResolutionInfoSize(); i++) - { -- RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i); -+ RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i, false); - - if (info.fRefreshRate > curr.fRefreshRate - && info.iScreenWidth == curr.iScreenWidth -@@ -234,14 +234,14 @@ RESOLUTION CBaseRenderer::FindClosestResolution(float fps, float multiplier, RES - // Find closest refresh rate - for (size_t i = (int)RES_DESKTOP; i < CDisplaySettings::Get().ResolutionInfoSize(); i++) - { -- const RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i); -+ const RESOLUTION_INFO info = g_graphicsContext.GetResInfo((RESOLUTION)i, false); - - //discard resolutions that are not the same width and height (and interlaced/3D flags) - //or have a too low refreshrate - if (info.iScreenWidth != curr.iScreenWidth - || info.iScreenHeight != curr.iScreenHeight - || info.iScreen != curr.iScreen -- || (info.dwFlags & D3DPRESENTFLAG_MODEMASK) != (curr.dwFlags & D3DPRESENTFLAG_MODEMASK) -+ || (info.dwFlags & D3DPRESENTFLAG_INTERLACED) != (curr.dwFlags & D3DPRESENTFLAG_INTERLACED) - || info.fRefreshRate < (fRefreshRate * multiplier / 1.001) - 0.001) - continue; - -diff --git a/xbmc/guilib/GraphicContext.cpp b/xbmc/guilib/GraphicContext.cpp -index 886b612..40a6362 100644 ---- a/xbmc/guilib/GraphicContext.cpp -+++ b/xbmc/guilib/GraphicContext.cpp -@@ -707,32 +707,26 @@ void CGraphicContext::ApplyStateBlock() - g_Windowing.ApplyStateBlock(); - } - --const RESOLUTION_INFO CGraphicContext::GetResInfo(RESOLUTION res) const -+const RESOLUTION_INFO CGraphicContext::GetResInfo(RESOLUTION res, bool use_current_3d /*= true*/) const - { - RESOLUTION_INFO info = CDisplaySettings::Get().GetResolutionInfo(res); - -- if(m_stereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) -+ if(use_current_3d ? m_stereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL : (info.dwFlags & D3DPRESENTFLAG_MODE3DTB)) - { -- if((info.dwFlags & D3DPRESENTFLAG_MODE3DTB) == 0) -- { -- info.fPixelRatio /= 2; -- info.iBlanking = 0; -- info.dwFlags |= D3DPRESENTFLAG_MODE3DTB; -- } -+ info.fPixelRatio /= 2; -+ info.iBlanking = 0; -+ info.dwFlags |= D3DPRESENTFLAG_MODE3DTB; - info.iHeight = (info.iHeight - info.iBlanking) / 2; - info.Overscan.top /= 2; - info.Overscan.bottom = (info.Overscan.bottom - info.iBlanking) / 2; - info.iSubtitles = (info.iSubtitles - info.iBlanking) / 2; - } - -- if(m_stereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL) -+ if(use_current_3d ? m_stereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL : (info.dwFlags & D3DPRESENTFLAG_MODE3DSBS)) - { -- if((info.dwFlags & D3DPRESENTFLAG_MODE3DSBS) == 0) -- { -- info.fPixelRatio *= 2; -- info.iBlanking = 0; -- info.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; -- } -+ info.fPixelRatio *= 2; -+ info.iBlanking = 0; -+ info.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; - info.iWidth = (info.iWidth - info.iBlanking) / 2; - info.Overscan.left /= 2; - info.Overscan.right = (info.Overscan.right - info.iBlanking) / 2; -@@ -740,7 +734,7 @@ const RESOLUTION_INFO CGraphicContext::GetResInfo(RESOLUTION res) const - return info; - } - --void CGraphicContext::SetResInfo(RESOLUTION res, const RESOLUTION_INFO& info) -+void CGraphicContext::SetResInfo(RESOLUTION res, const RESOLUTION_INFO& info, bool use_current_3d /*= true*/) - { - RESOLUTION_INFO& curr = CDisplaySettings::Get().GetResolutionInfo(res); - curr.Overscan = info.Overscan; -@@ -750,16 +744,14 @@ void CGraphicContext::SetResInfo(RESOLUTION res, const RESOLUTION_INFO& info) - if(info.dwFlags & D3DPRESENTFLAG_MODE3DSBS) - { - curr.Overscan.right = info.Overscan.right * 2 + info.iBlanking; -- if((curr.dwFlags & D3DPRESENTFLAG_MODE3DSBS) == 0) -- curr.fPixelRatio /= 2.0; -+ curr.fPixelRatio /= 2.0; - } - - if(info.dwFlags & D3DPRESENTFLAG_MODE3DTB) - { - curr.Overscan.bottom = info.Overscan.bottom * 2 + info.iBlanking; - curr.iSubtitles = info.iSubtitles * 2 + info.iBlanking; -- if((curr.dwFlags & D3DPRESENTFLAG_MODE3DTB) == 0) -- curr.fPixelRatio *= 2.0; -+ curr.fPixelRatio *= 2.0; - } - } - -diff --git a/xbmc/guilib/GraphicContext.h b/xbmc/guilib/GraphicContext.h -index df55e92..c77f2ff 100644 ---- a/xbmc/guilib/GraphicContext.h -+++ b/xbmc/guilib/GraphicContext.h -@@ -124,8 +124,8 @@ class CGraphicContext : public CCriticalSection, - { - return GetResInfo(m_Resolution); - } -- const RESOLUTION_INFO GetResInfo(RESOLUTION res) const; -- void SetResInfo(RESOLUTION res, const RESOLUTION_INFO& info); -+ const RESOLUTION_INFO GetResInfo(RESOLUTION res, bool use_current_3d = true) const; -+ void SetResInfo(RESOLUTION res, const RESOLUTION_INFO& info, bool use_current_3d = true); - - /* \brief Get UI scaling information from a given resolution to the screen resolution. - Takes account of overscan and UI zooming. -diff --git a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -index 21b8cc4..f57b22b 100644 ---- a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -+++ b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -@@ -446,15 +446,9 @@ bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &r - m_desktopRes.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv_state.display.hdmi.display_options.aspect) / ((float)m_desktopRes.iScreenWidth / (float)m_desktopRes.iScreenHeight); - // Also add 3D flags - if (tv_state.display.hdmi.format_3d == HDMI_3D_FORMAT_SBS_HALF) -- { - m_desktopRes.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; -- m_desktopRes.fPixelRatio *= 2.0; -- } - else if (tv_state.display.hdmi.format_3d == HDMI_3D_FORMAT_TB_HALF) -- { - m_desktopRes.dwFlags |= D3DPRESENTFLAG_MODE3DTB; -- m_desktopRes.fPixelRatio *= 0.5; -- } - HDMI_PROPERTY_PARAM_T property; - property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE; - vc_tv_hdmi_get_property(&property); -@@ -605,7 +599,6 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- res2.fPixelRatio *= 2.0f; - SetResolutionString(res2); - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - -@@ -623,7 +616,6 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DTB; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- res2.fPixelRatio *= 0.5f; - SetResolutionString(res2); - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - --- -1.9.3 - - -From 7464b116a5db0be0c2b50314fcf703529d6f646e Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 23 Apr 2014 21:07:51 +0100 -Subject: [PATCH 77/94] [PiSink] More attempts to reduce underrun audio - glitches with multichannl and high samplerate - ---- - xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp | 79 +++++++++++-------------------- - 1 file changed, 27 insertions(+), 52 deletions(-) - -diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -index 070e6eb..133b9f6 100644 ---- a/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -+++ b/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp -@@ -186,7 +186,7 @@ bool CAESinkPi::Initialize(AEAudioFormat &format, std::string &device) - unsigned int sample_size = CAEUtil::DataFormatToBits(format.m_dataFormat) >> 3; - format.m_frameSize = sample_size * channels; - format.m_sampleRate = std::max(8000U, std::min(192000U, format.m_sampleRate)); -- format.m_frames = format.m_sampleRate * AUDIO_PLAYBUFFER; -+ format.m_frames = format.m_sampleRate * AUDIO_PLAYBUFFER / NUM_OMX_BUFFERS; - format.m_frameSamples = format.m_frames * channels; - - SetAudioProps(m_passthrough, GetChannelMap(format.m_channelLayout, m_passthrough)); -@@ -232,7 +232,7 @@ bool CAESinkPi::Initialize(AEAudioFormat &format, std::string &device) - CLog::Log(LOGERROR, "%s:%s - error get OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err); - - port_param.nBufferCountActual = std::max((unsigned int)port_param.nBufferCountMin, (unsigned int)NUM_OMX_BUFFERS); -- port_param.nBufferSize = m_format.m_frameSize * m_format.m_frames / port_param.nBufferCountActual; -+ port_param.nBufferSize = m_format.m_frameSize * m_format.m_frames; - - omx_err = m_omx_render.SetParameter(OMX_IndexParamPortDefinition, &port_param); - if (omx_err != OMX_ErrorNone) -@@ -308,63 +308,38 @@ double CAESinkPi::GetCacheTotal() - - unsigned int CAESinkPi::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio, bool blocking) - { -- unsigned int sent = 0; -- -- if (!m_Initialized) -+ if (!m_Initialized || !frames) - return frames; - - OMX_ERRORTYPE omx_err = OMX_ErrorNone; - OMX_BUFFERHEADERTYPE *omx_buffer = NULL; -- while (sent < frames) -+ -+ double delay = GetDelay(); -+ if (delay <= 0.0 && m_submitted) -+ CLog::Log(LOGNOTICE, "%s:%s Underrun (delay:%.2f frames:%d)", CLASSNAME, __func__, delay, frames); -+ -+ omx_buffer = m_omx_render.GetInputBuffer(1000); -+ if (omx_buffer == NULL) - { -- double delay = GetDelay(); -- double ideal_submission_time = AUDIO_PLAYBUFFER - delay; -- // ideal amount of audio we'd like submit (to make delay match AUDIO_PLAYBUFFER) -- int timeout = blocking ? 1000 : 0; -- int ideal_submission_samples = ideal_submission_time / (m_sinkbuffer_sec_per_byte * m_format.m_frameSize); -- // if we are almost full then sleep (to avoid repeatedly sending a few samples) -- bool too_laggy = ideal_submission_time < 0.25 * AUDIO_PLAYBUFFER; -- int sleeptime = (int)(AUDIO_PLAYBUFFER * 0.25 * 1000.0); -- if (too_laggy) -- { -- if (blocking) -- { -- Sleep(sleeptime); -- continue; -- } -- break; -- } -- omx_buffer = m_omx_render.GetInputBuffer(timeout); -- if (omx_buffer == NULL) -- { -- if (blocking) -- CLog::Log(LOGERROR, "COMXAudio::Decode timeout"); -- break; -- } -- -- unsigned int space = omx_buffer->nAllocLen / m_format.m_frameSize; -- unsigned int samples = std::min(std::min(space, (unsigned int)ideal_submission_samples), frames - sent); -- -- omx_buffer->nFilledLen = samples * m_format.m_frameSize; -- omx_buffer->nTimeStamp = ToOMXTime(0); -- omx_buffer->nFlags = 0; -- memcpy(omx_buffer->pBuffer, (uint8_t *)data + sent * m_format.m_frameSize, omx_buffer->nFilledLen); -- -- sent += samples; -- -- if (sent == frames) -- omx_buffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; -- -- if (delay <= 0.0 && m_submitted) -- CLog::Log(LOGNOTICE, "%s:%s Underrun (delay:%.2f frames:%d)", CLASSNAME, __func__, delay, frames); -- -- omx_err = m_omx_render.EmptyThisBuffer(omx_buffer); -- if (omx_err != OMX_ErrorNone) -- CLog::Log(LOGERROR, "%s:%s frames=%d err=%x", CLASSNAME, __func__, frames, omx_err); -- m_submitted++; -+ CLog::Log(LOGERROR, "CAESinkPi::AddPackets timeout"); -+ return 0; - } - -- return sent; -+ omx_buffer->nFilledLen = frames * m_format.m_frameSize; -+ // must be true -+ assert(omx_buffer->nFilledLen <= omx_buffer->nAllocLen); -+ omx_buffer->nTimeStamp = ToOMXTime(0); -+ omx_buffer->nFlags = OMX_BUFFERFLAG_ENDOFFRAME; -+ memcpy(omx_buffer->pBuffer, data, omx_buffer->nFilledLen); -+ -+ omx_err = m_omx_render.EmptyThisBuffer(omx_buffer); -+ if (omx_err != OMX_ErrorNone) -+ CLog::Log(LOGERROR, "%s:%s frames=%d err=%x", CLASSNAME, __func__, frames, omx_err); -+ m_submitted++; -+ delay = GetDelay(); -+ if (delay > AUDIO_PLAYBUFFER) -+ Sleep((int)(1000.0f * (delay - AUDIO_PLAYBUFFER))); -+ return frames; - } - - void CAESinkPi::Drain() --- -1.9.3 - - -From 508c32de290d09c429d73b2497408b930550f1a3 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 23 Apr 2014 22:36:01 +0100 -Subject: [PATCH 78/94] [omxplayer] Fix for aspect ratio of portrait videos - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index e9f86f3..7e2c644 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -651,6 +651,16 @@ void OMXPlayerVideo::SetVideoRect(const CRect &InSrcRect, const CRect &InDestRec - bool stereo_invert = (flags & CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT) ? true : false; - RENDER_STEREO_MODE display_stereo_mode = g_graphicsContext.GetStereoMode(); - -+ // fix up transposed video -+ if (m_hints.orientation == 90 || m_hints.orientation == 270) -+ { -+ float diff = (DestRect.Height() - DestRect.Width()) * 0.5f; -+ DestRect.x1 -= diff; -+ DestRect.x2 += diff; -+ DestRect.y1 += diff; -+ DestRect.y2 -= diff; -+ } -+ - // check if destination rect or video view mode has changed - if (!(m_dst_rect != DestRect) && !(m_src_rect != SrcRect) && m_video_stereo_mode == video_stereo_mode && m_display_stereo_mode == display_stereo_mode && m_StereoInvert == stereo_invert) - return; --- -1.9.3 - - -From fe9fea7a1aac545aa601b71aae01651bc42a5376 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Tue, 22 Apr 2014 12:23:23 +0100 -Subject: [PATCH 79/94] [omxplayer] Make dvdplayer the default for dvd images - ---- - xbmc/cores/omxplayer/omxplayer_advancedsettings.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/xbmc/cores/omxplayer/omxplayer_advancedsettings.xml b/xbmc/cores/omxplayer/omxplayer_advancedsettings.xml -index 77c6a15..51c0daf 100644 ---- a/xbmc/cores/omxplayer/omxplayer_advancedsettings.xml -+++ b/xbmc/cores/omxplayer/omxplayer_advancedsettings.xml -@@ -2,6 +2,6 @@ - <advancedsettings> - <video> - <defaultplayer>omxplayer</defaultplayer> -- <defaultdvdplayer>omxplayer</defaultdvdplayer> -+ <defaultdvdplayer>dvdplayer</defaultdvdplayer> - </video> - </advancedsettings> --- -1.9.3 - - -From f417d7d303eaa5113edba8ba562cb61ed8a6c59a Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 26 Apr 2014 17:27:52 +0100 -Subject: [PATCH 80/94] [cec] Don't suspend pi on tv switch off - it can't wake - up - ---- - system/peripherals.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/system/peripherals.xml b/system/peripherals.xml -index a906628..9b5271a 100644 ---- a/system/peripherals.xml -+++ b/system/peripherals.xml -@@ -16,7 +16,7 @@ - <setting key="send_inactive_source" type="bool" value="1" label="36025" order="5" /> - <setting key="cec_standby_screensaver" type="bool" value="0" label="36009" order="6" /> - <setting key="cec_wake_screensaver" type="bool" value="1" label="36010" order="7" /> -- <setting key="standby_pc_on_tv_standby" type="enum" value="13011" label="36029" order="8" lvalues="36028|13005|13011" /> -+ <setting key="standby_pc_on_tv_standby" type="enum" value="36028" label="36029" order="8" lvalues="36028|13005|13011" /> - <setting key="standby_tv_on_pc_standby" type="bool" value="1" label="36026" order="9" /> - <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="10" /> - <setting key="pause_playback_on_deactivate" type="bool" value="1" label="36033" order="11" /> --- -1.9.3 - - -From 0563f1df1295ac5600fd330fb201e854ad900e02 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 12 Apr 2014 17:57:19 +0100 -Subject: [PATCH 81/94] [omxplayer] Ignore occasionally valid pts values, they - cause live tv stutter - ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index 7e2c644..b3786f6 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -490,7 +490,7 @@ void OMXPlayerVideo::Process() - // if a stream has had more than 4 valid pts values in the last 16, the use UNKNOWN, otherwise use dts - m_history_valid_pts = (m_history_valid_pts << 1) | (pPacket->pts != DVD_NOPTS_VALUE); - double pts = pPacket->pts; -- if(pPacket->pts == DVD_NOPTS_VALUE && count_bits(m_history_valid_pts & 0xffff) < 4) -+ if(count_bits(m_history_valid_pts & 0xffff) < 4) - pts = pPacket->dts; - - if (pts != DVD_NOPTS_VALUE) --- -1.9.3 - - -From cddc5f27f9aa11dfb65e16ec1f84a809cf79c68b Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 7 May 2014 14:54:41 +0100 -Subject: [PATCH 82/94] [Pi] Fix naming of refresh rates to avoid lost - calibration settings - ---- - xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp | 13 ++++--------- - xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h | 2 +- - 2 files changed, 5 insertions(+), 10 deletions(-) - -diff --git a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -index f57b22b..5b26b20 100644 ---- a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -+++ b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -@@ -58,6 +58,7 @@ - # define DLOG(fmt, args...) - #endif - -+static void SetResolutionString(RESOLUTION_INFO &res); - - CEGLNativeTypeRaspberryPI::CEGLNativeTypeRaspberryPI() - { -@@ -194,8 +195,9 @@ int CEGLNativeTypeRaspberryPI::FindMatchingResolution(const RESOLUTION_INFO &res - #endif - - #if defined(TARGET_RASPBERRY_PI) --int CEGLNativeTypeRaspberryPI::AddUniqueResolution(const RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions) -+int CEGLNativeTypeRaspberryPI::AddUniqueResolution(RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions) - { -+ SetResolutionString(res); - int i = FindMatchingResolution(res, resolutions); - if (i>=0) - { // don't replace a progressive resolution with an interlaced one of same resolution -@@ -467,10 +469,7 @@ bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &r - m_desktopRes.fPixelRatio = get_display_aspect_ratio((SDTV_ASPECT_T)tv_state.display.sdtv.display_options.aspect) / ((float)m_desktopRes.iScreenWidth / (float)m_desktopRes.iScreenHeight); - } - -- m_desktopRes.strMode = StringUtils::Format("%dx%d", m_desktopRes.iScreenWidth, m_desktopRes.iScreenHeight); -- -- if((int)m_desktopRes.fRefreshRate > 1) -- SetResolutionString(m_desktopRes); -+ SetResolutionString(m_desktopRes); - - m_initDesktopRes = false; - -@@ -578,8 +577,6 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - res.iScreenHeight = tv->height; - res.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res.iScreenWidth / (float)res.iScreenHeight); - -- SetResolutionString(res); -- - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f) %s%s:%x\n", i, res.strMode.c_str(), res.fPixelRatio, - tv->native ? "N" : "", tv->scan_mode ? "I" : "", tv->code); - -@@ -599,7 +596,6 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- SetResolutionString(res2); - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - - res2.iSubtitles = (int)(0.965 * res2.iHeight); -@@ -616,7 +612,6 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DTB; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- SetResolutionString(res2); - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - - res2.iSubtitles = (int)(0.965 * res2.iHeight); -diff --git a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h -index d1ebb81..59401f5 100644 ---- a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h -+++ b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h -@@ -71,6 +71,6 @@ class CEGLNativeTypeRaspberryPI : public CEGLNativeType - - void DestroyDispmaxWindow(); - int FindMatchingResolution(const RESOLUTION_INFO &res, const std::vector<RESOLUTION_INFO> &resolutions); -- int AddUniqueResolution(const RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions); -+ int AddUniqueResolution(RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions); - #endif - }; --- -1.9.3 - - -From a4c36a4925e780b63d9821fb04504453ac982205 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 10 May 2014 11:40:41 +0100 -Subject: [PATCH 83/94] [omxplayer] Skip out of submit loop when closing. - -Avoids a permanent hang at EOF when using IPTV streams ---- - xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 7 +++++-- - xbmc/cores/omxplayer/OMXPlayerAudio.h | 1 + - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 7 +++++-- - xbmc/cores/omxplayer/OMXPlayerVideo.h | 1 + - 4 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -index d3348ec..4435d22 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -@@ -89,6 +89,7 @@ OMXPlayerAudio::OMXPlayerAudio(OMXClock *av_clock, CDVDMessageQueue& parent) - m_hw_decode = false; - m_silence = false; - m_flush = false; -+ m_bClose = false; - } - - -@@ -145,11 +146,13 @@ void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *codec) - m_format.m_dataFormat = GetDataFormat(m_hints); - m_format.m_sampleRate = 0; - m_format.m_channelLayout = 0; -+ m_bClose = false; - } - - bool OMXPlayerAudio::CloseStream(bool bWaitForBuffers) - { - // wait until buffers are empty -+ m_bClose = true; - if (bWaitForBuffers && m_speed > 0) m_messageQueue.WaitUntilEmpty(); - - m_messageQueue.Abort(); -@@ -259,8 +262,8 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - - while(!m_bStop) - { -- // discard if flushing as clocks may be stopped and we'll never submit it -- if(m_flush) -+ // discard if flushing or closing as clocks may be stopped and we'll never submit it -+ if(m_flush || m_bClose) - break; - - if(m_omxAudio.GetSpace() < (unsigned int)decoded_size) -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.h b/xbmc/cores/omxplayer/OMXPlayerAudio.h -index 685a686..7b55e48 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.h -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.h -@@ -70,6 +70,7 @@ class OMXPlayerAudio : public CThread - bool m_DecoderOpen; - - bool m_bad_state; -+ bool m_bClose; - - virtual void OnStartup(); - virtual void OnExit(); -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index b3786f6..61b884e 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -104,6 +104,7 @@ OMXPlayerVideo::OMXPlayerVideo(OMXClock *av_clock, - m_iCurrentPts = DVD_NOPTS_VALUE; - m_nextOverlay = DVD_NOPTS_VALUE; - m_flush = false; -+ m_bClose = false; - m_history_valid_pts = 0; - } - -@@ -118,6 +119,7 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints) - m_hdmi_clock_sync = (CSettings::Get().GetInt("videoplayer.adjustrefreshrate") != ADJUST_REFRESHRATE_OFF); - m_started = false; - m_flush = false; -+ m_bClose = false; - m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0; - m_nextOverlay = DVD_NOPTS_VALUE; - // force SetVideoRect to be called initially -@@ -161,6 +163,7 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints, COMXVideo *codec) - bool OMXPlayerVideo::CloseStream(bool bWaitForBuffers) - { - // wait until buffers are empty -+ m_bClose = true; - if (bWaitForBuffers && m_speed > 0) m_messageQueue.WaitUntilEmpty(); - - m_messageQueue.Abort(); -@@ -469,8 +472,8 @@ void OMXPlayerVideo::Process() - - while (!m_bStop) - { -- // discard if flushing as clocks may be stopped and we'll never submit it -- if (m_flush) -+ // discard if flushing or closing as clocks may be stopped and we'll never submit it -+ if (m_flush || m_bClose) - break; - - if((int)m_omxVideo.GetFreeSpace() < pPacket->iSize) -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.h b/xbmc/cores/omxplayer/OMXPlayerVideo.h -index 6f19395..8eff32f 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.h -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.h -@@ -66,6 +66,7 @@ class OMXPlayerVideo : public CThread - - float m_fForcedAspectRatio; - unsigned m_flags; -+ bool m_bClose; - - CRect m_src_rect; - CRect m_dst_rect; --- -1.9.3 - - -From b90562b8ffc29c1d9e037e94b0c92b3b0b67413b Mon Sep 17 00:00:00 2001 -From: xbmc <fernetmenta@online.de> -Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 84/94] videoplayer: adapt lateness detection and dropping to - buffering - ---- - xbmc/cores/VideoRenderers/RenderManager.cpp | 16 +- - xbmc/cores/VideoRenderers/RenderManager.h | 12 +- - .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 38 +++- - .../DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 41 +++++ - .../DVDCodecs/Video/DVDVideoCodecFFmpeg.h | 7 + - xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 197 +++++++++++++++++---- - xbmc/cores/dvdplayer/DVDPlayerVideo.h | 23 +++ - 7 files changed, 296 insertions(+), 38 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp -index 3503988..4ca74f8 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.cpp -+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp -@@ -286,6 +286,8 @@ bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsi - m_bIsStarted = true; - m_bReconfigured = true; - m_presentstep = PRESENT_IDLE; -+ m_presentpts = DVD_NOPTS_VALUE; -+ m_sleeptime = 1.0; - m_presentevent.notifyAll(); - - m_firstFlipPage = false; // tempfix -@@ -629,7 +631,7 @@ void CXBMCRenderManager::SetViewMode(int iViewMode) - m_pRenderer->SetViewMode(iViewMode); - } - --void CXBMCRenderManager::FlipPage(volatile bool& bStop, double timestamp /* = 0LL*/, int source /*= -1*/, EFIELDSYNC sync /*= FS_NONE*/) -+void CXBMCRenderManager::FlipPage(volatile bool& bStop, double timestamp /* = 0LL*/, double pts /* = 0 */, int source /*= -1*/, EFIELDSYNC sync /*= FS_NONE*/) - { - { CSharedLock lock(m_sharedSection); - -@@ -697,6 +699,7 @@ void CXBMCRenderManager::FlipPage(volatile bool& bStop, double timestamp /* = 0L - m.timestamp = timestamp; - m.presentfield = sync; - m.presentmethod = presentmethod; -+ m.pts = pts; - requeue(m_queued, m_free); - - /* signal to any waiters to check state */ -@@ -1065,6 +1068,8 @@ void CXBMCRenderManager::PrepareNextRender() - m_discard.push_back(m_presentsource); - m_presentsource = idx; - m_queued.pop_front(); -+ m_sleeptime = m_Queue[idx].timestamp - clocktime; -+ m_presentpts = m_Queue[idx].pts; - m_presentevent.notifyAll(); - } - } -@@ -1081,3 +1086,12 @@ void CXBMCRenderManager::DiscardBuffer() - m_presentstep = PRESENT_IDLE; - m_presentevent.notifyAll(); - } -+ -+bool CXBMCRenderManager::GetStats(double &sleeptime, double &pts, int &bufferLevel) -+{ -+ CSingleLock lock(m_presentlock); -+ sleeptime = m_sleeptime; -+ pts = m_presentpts; -+ bufferLevel = m_queued.size() + m_discard.size(); -+ return true; -+} -diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h -index c469795..949c652b 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.h -+++ b/xbmc/cores/VideoRenderers/RenderManager.h -@@ -98,10 +98,11 @@ class CXBMCRenderManager - * - * @param bStop reference to stop flag of calling thread - * @param timestamp of frame delivered with AddVideoPicture -+ * @param pts used for lateness detection - * @param source depreciated - * @param sync signals frame, top, or bottom field - */ -- void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE); -+ void FlipPage(volatile bool& bStop, double timestamp = 0.0, double pts = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE); - unsigned int PreInit(); - void UnInit(); - bool Flush(); -@@ -176,6 +177,12 @@ class CXBMCRenderManager - int WaitForBuffer(volatile bool& bStop, int timeout = 100); - - /** -+ * Can be called by player for lateness detection. This is done best by -+ * looking at the end of the queue. -+ */ -+ bool GetStats(double &sleeptime, double &pts, int &bufferLevel); -+ -+ /** - * Video player call this on flush in oder to discard any queued frames - */ - void DiscardBuffer(); -@@ -222,6 +229,7 @@ class CXBMCRenderManager - - struct SPresent - { -+ double pts; - double timestamp; - EFIELDSYNC presentfield; - EPRESENTMETHOD presentmethod; -@@ -233,6 +241,8 @@ class CXBMCRenderManager - - ERenderFormat m_format; - -+ double m_sleeptime; -+ double m_presentpts; - double m_presentcorr; - double m_presenterr; - double m_errorbuff[ERRORBUFFSIZE]; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -index dc047d7..c09939c 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h -@@ -129,6 +129,10 @@ struct DVDVideoUserData - #define DVP_FLAG_NOSKIP 0x00000010 // indicate this picture should never be dropped - #define DVP_FLAG_DROPPED 0x00000020 // indicate that this picture has been dropped in decoder stage, will have no data - -+#define DVP_FLAG_DROPDEINT 0x00000040 // indicate that this picture was requested to have been dropped in deint stage -+#define DVP_FLAG_NO_POSTPROC 0x00000100 // see GetCodecStats -+#define DVP_FLAG_DRAIN 0x00000200 // see GetCodecStats -+ - // DVP_FLAG 0x00000100 - 0x00000f00 is in use by libmpeg2! - - #define DVP_QSCALE_UNKNOWN 0 -@@ -146,6 +150,8 @@ class CDVDCodecOptions; - #define VC_PICTURE 0x00000004 // the decoder got a picture, call Decode(NULL, 0) again to parse the rest of the data - #define VC_USERDATA 0x00000008 // the decoder found some userdata, call Decode(NULL, 0) again to parse the rest of the data - #define VC_FLUSHED 0x00000010 // the decoder lost it's state, we need to restart decoding again -+#define VC_DROPPED 0x00000020 // needed to identify if a picture was dropped -+ - class CDVDVideoCodec - { - public: -@@ -263,7 +269,6 @@ class CDVDVideoCodec - return 0; - } - -- - /** - * Number of references to old pictures that are allowed to - * be retained when calling decode on the next demux packet -@@ -280,4 +285,35 @@ class CDVDVideoCodec - * Interact with user settings so that user disabled codecs are disabled - */ - static bool IsCodecDisabled(DVDCodecAvailableType* map, unsigned int size, AVCodecID id); -+ -+ /* For calculation of dropping requirements player asks for some information. -+ * -+ * - pts : right after decoder, used to detect gaps (dropped frames in decoder) -+ * - droppedPics : indicates if decoder has dropped a picture -+ * -1 means that decoder has no info on this. -+ * -+ * If codec does not implement this method, pts of decoded frame at input -+ * video player is used. In case decoder does post-proc and de-interlacing there -+ * may be quite some frames queued up between exit decoder and entry player. -+ */ -+ virtual bool GetCodecStats(double &pts, int &droppedPics) -+ { -+ droppedPics= -1; -+ return false; -+ } -+ -+ /** -+ * Codec can be informed by player with the following flags: -+ * -+ * DVP_FLAG_NO_POSTPROC : if speed is not normal the codec can switch off -+ * postprocessing and de-interlacing -+ * -+ * DVP_FLAG_DRAIN : codecs may do postprocessing and de-interlacing. -+ * If video buffers in RenderManager are about to run dry, -+ * this is signaled to codec. Codec can wait for post-proc -+ * to be finished instead of returning empty and getting another -+ * packet. -+ * -+ */ -+ virtual void SetCodecControl(int flags) {} - }; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -index 9b6a34d..81fe0cf 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -@@ -164,6 +164,7 @@ CDVDVideoCodecFFmpeg::CDVDVideoCodecFFmpeg() : CDVDVideoCodec() - m_iLastKeyframe = 0; - m_dts = DVD_NOPTS_VALUE; - m_started = false; -+ m_decoderPts = DVD_NOPTS_VALUE; - } - - CDVDVideoCodecFFmpeg::~CDVDVideoCodecFFmpeg() -@@ -355,6 +356,14 @@ void CDVDVideoCodecFFmpeg::SetDropState(bool bDrop) - { - if( m_pCodecContext ) - { -+ if (bDrop && m_pHardware && m_pHardware->CanSkipDeint()) -+ { -+ m_requestSkipDeint = true; -+ bDrop = false; -+ } -+ else -+ m_requestSkipDeint = false; -+ - // i don't know exactly how high this should be set - // couldn't find any good docs on it. think it varies - // from codec to codec on what it does -@@ -556,6 +565,7 @@ int CDVDVideoCodecFFmpeg::Decode(uint8_t* pData, int iSize, double dts, double p - void CDVDVideoCodecFFmpeg::Reset() - { - m_started = false; -+ m_decoderPts = DVD_NOPTS_VALUE; - m_iLastKeyframe = m_pCodecContext->has_b_frames; - m_dllAvCodec.avcodec_flush_buffers(m_pCodecContext); - -@@ -665,6 +675,22 @@ bool CDVDVideoCodecFFmpeg::GetPictureCommon(DVDVideoPicture* pDvdVideoPicture) - else - pDvdVideoPicture->pts = DVD_NOPTS_VALUE; - -+ if (pDvdVideoPicture->pts != DVD_NOPTS_VALUE) -+ m_decoderPts = pDvdVideoPicture->pts; -+ else -+ m_decoderPts = m_dts; -+ -+ if (m_requestSkipDeint) -+ { -+ pDvdVideoPicture->iFlags |= DVP_FLAG_DROPDEINT; -+ m_skippedDeint = 1; -+ } -+ else -+ m_skippedDeint = 0; -+ -+ m_requestSkipDeint = false; -+ pDvdVideoPicture->iFlags |= m_codecControlFlags; -+ - if(!m_started) - pDvdVideoPicture->iFlags |= DVP_FLAG_DROPPED; - -@@ -924,3 +950,18 @@ unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences() - else - return 0; - } -+ -+bool CDVDVideoCodecFFmpeg::GetCodecStats(double &pts, int &droppedPics) -+{ -+ pts = m_decoderPts; -+ if (m_skippedDeint) -+ droppedPics = m_skippedDeint; -+ else -+ droppedPics = -1; -+ return true; -+} -+ -+void CDVDVideoCodecFFmpeg::SetCodecControl(int flags) -+{ -+ m_codecControlFlags = flags; -+} -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h -index 2287031..827c9507 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h -@@ -45,6 +45,7 @@ class CDVDVideoCodecFFmpeg : public CDVDVideoCodec - virtual int Check (AVCodecContext* avctx) = 0; - virtual void Reset () {} - virtual unsigned GetAllowedReferences() { return 0; } -+ virtual bool CanSkipDeint() {return false; } - virtual const std::string Name() = 0; - virtual CCriticalSection* Section() { return NULL; } - }; -@@ -62,6 +63,8 @@ class CDVDVideoCodecFFmpeg : public CDVDVideoCodec - virtual const char* GetName() { return m_name.c_str(); }; // m_name is never changed after open - virtual unsigned GetConvergeCount(); - virtual unsigned GetAllowedReferences(); -+ virtual bool GetCodecStats(double &pts, int &droppedPics); -+ virtual void SetCodecControl(int flags); - - bool IsHardwareAllowed() { return !m_bSoftware; } - IHardwareDecoder * GetHardware() { return m_pHardware; }; -@@ -127,4 +130,8 @@ class CDVDVideoCodecFFmpeg : public CDVDVideoCodec - double m_dts; - bool m_started; - std::vector<PixelFormat> m_formats; -+ double m_decoderPts, m_decoderInterval; -+ int m_skippedDeint; -+ bool m_requestSkipDeint; -+ int m_codecControlFlags; - }; -diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -index fddb7f7..181ff74 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -@@ -38,6 +38,7 @@ - #include "DVDCodecs/DVDCodecs.h" - #include "DVDCodecs/Overlay/DVDOverlayCodecCC.h" - #include "DVDCodecs/Overlay/DVDOverlaySSA.h" -+#include "guilib/GraphicContext.h" - #include <sstream> - #include <iomanip> - #include <numeric> -@@ -320,8 +321,10 @@ void CDVDPlayerVideo::Process() - - int iDropped = 0; //frames dropped in a row - bool bRequestDrop = false; -+ int iDropDirective; - - m_videoStats.Start(); -+ m_droppingStats.Reset(); - - while (!m_bStop) - { -@@ -436,6 +439,7 @@ void CDVDPlayerVideo::Process() - picture.iFlags &= ~DVP_FLAG_ALLOCATED; - m_packets.clear(); - m_started = false; -+ m_droppingStats.Reset(); - } - else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (CDVDPlayerVideo::Flush()) - { -@@ -448,6 +452,7 @@ void CDVDPlayerVideo::Process() - //we need to recalculate the framerate - //TODO: this needs to be set on a streamchange instead - ResetFrameRateCalc(); -+ m_droppingStats.Reset(); - - m_stalled = true; - m_started = false; -@@ -467,6 +472,7 @@ void CDVDPlayerVideo::Process() - m_iNrOfPicturesNotToSkip = 0; - if (m_pVideoCodec) - m_pVideoCodec->SetSpeed(m_speed); -+ m_droppingStats.Reset(); - } - else if (pMsg->IsType(CDVDMsg::PLAYER_STARTED)) - { -@@ -515,6 +521,28 @@ void CDVDPlayerVideo::Process() - m_iNrOfPicturesNotToSkip = 1; - } - -+ bRequestDrop = false; -+ iDropDirective = CalcDropRequirement(pts); -+ if (iDropDirective & EOS_VERYLATE) -+ { -+ if (m_bAllowDrop) -+ { -+ m_pullupCorrection.Flush(); -+ bRequestDrop = true; -+ } -+ } -+ int codecControl = 0; -+ if (iDropDirective & EOS_BUFFER_LEVEL) -+ codecControl |= DVP_FLAG_DRAIN; -+ if (m_speed > DVD_PLAYSPEED_NORMAL) -+ codecControl |= DVP_FLAG_NO_POSTPROC; -+ m_pVideoCodec->SetCodecControl(codecControl); -+ if (iDropDirective & EOS_DROPPED) -+ { -+ m_iDroppedFrames++; -+ iDropped++; -+ } -+ - if (m_messageQueue.GetDataSize() == 0 - || m_speed < 0) - { -@@ -567,15 +595,7 @@ void CDVDPlayerVideo::Process() - } - - m_videoStats.AddSampleBytes(pPacket->iSize); -- // assume decoder dropped a picture if it didn't give us any -- // picture from a demux packet, this should be reasonable -- // for libavformat as a demuxer as it normally packetizes -- // pictures when they come from demuxer -- if(bRequestDrop && !bPacketDrop && (iDecoderState & VC_BUFFER) && !(iDecoderState & VC_PICTURE)) -- { -- m_iDroppedFrames++; -- iDropped++; -- } -+ - // reset the request, the following while loop may break before - // setting the flag to a new value - bRequestDrop = false; -@@ -1185,33 +1205,12 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) - m_FlipTimeStamp += max(0.0, iSleepTime); - m_FlipTimeStamp += iFrameDuration; - -- if (iSleepTime <= 0 && m_speed) -- m_iLateFrames++; -- else -- m_iLateFrames = 0; -- -- // ask decoder to drop frames next round, as we are very late -- if(m_iLateFrames > 10) -+ if ((pPicture->iFlags & DVP_FLAG_DROPPED)) - { -- if (!(pPicture->iFlags & DVP_FLAG_NOSKIP)) -- { -- //if we're calculating the framerate, -- //don't drop frames until we've calculated a stable framerate -- if (m_bAllowDrop || m_speed != DVD_PLAYSPEED_NORMAL) -- { -- result |= EOS_VERYLATE; -- m_pullupCorrection.Flush(); //dropped frames mess up the pattern, so just flush it -- } -- m_iDroppedRequest++; -- } -- } -- else -- { -- m_iDroppedRequest = 0; -- } -- -- if( (pPicture->iFlags & DVP_FLAG_DROPPED) ) -+ m_droppingStats.AddOutputDropGain(pts, 1/m_fFrameRate); -+ CLog::Log(LOGDEBUG,"%s - dropped in output", __FUNCTION__); - return result | EOS_DROPPED; -+ } - - // set fieldsync if picture is interlaced - EFIELDSYNC mDisplayField = FS_NONE; -@@ -1244,7 +1243,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) - if (index < 0) - return EOS_DROPPED; - -- g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, mDisplayField); -+ g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, pts, -1, mDisplayField); - - return result; - #else -@@ -1544,3 +1543,131 @@ void CDVDPlayerVideo::CalcFrameRate() - m_iFrameRateCount = 0; - } - } -+ -+int CDVDPlayerVideo::CalcDropRequirement(double pts) -+{ -+ int result = 0; -+ double iSleepTime; -+ double iDecoderPts, iRenderPts; -+ double iInterval; -+ double iGain; -+ double iLateness; -+ bool bNewFrame; -+ int iDroppedPics = -1; -+ int iBufferLevel; -+ -+ // get decoder stats -+ if (!m_pVideoCodec->GetCodecStats(iDecoderPts, iDroppedPics)) -+ iDecoderPts = pts; -+ if (iDecoderPts == DVD_NOPTS_VALUE) -+ iDecoderPts = pts; -+ -+ // get render stats -+ g_renderManager.GetStats(iSleepTime, iRenderPts, iBufferLevel); -+ -+ if (iBufferLevel < 0) -+ result |= EOS_BUFFER_LEVEL; -+ else if (iBufferLevel < 2) -+ { -+ result |= EOS_BUFFER_LEVEL; -+ CLog::Log(LOGDEBUG,"CDVDPlayerVideo::CalcDropRequirement - hurry: %d", iBufferLevel); -+ } -+ -+ bNewFrame = iDecoderPts != m_droppingStats.m_lastDecoderPts; -+ -+ iInterval = 1/m_fFrameRate*(double)DVD_TIME_BASE; -+ -+ m_FlipTimeStamp = m_pClock->GetAbsoluteClock() + max(0.0, iSleepTime) + iInterval; -+ -+ if (m_stalled) -+ m_iCurrentPts = DVD_NOPTS_VALUE; -+ else -+ m_iCurrentPts = iRenderPts - max(0.0, iSleepTime); -+ -+ if (m_droppingStats.m_lastDecoderPts > 0 -+ && bNewFrame -+ && m_bAllowDrop) -+ { -+ iGain = (iDecoderPts - m_droppingStats.m_lastDecoderPts - iInterval)/(double)DVD_TIME_BASE; -+ if (iDroppedPics > 0) -+ { -+ CDroppingStats::CGain gain; -+ gain.gain = iDroppedPics * 1/m_fFrameRate; -+ gain.pts = iDecoderPts; -+ m_droppingStats.m_gain.push_back(gain); -+ m_droppingStats.m_totalGain += gain.gain; -+ result |= EOS_DROPPED; -+ m_droppingStats.m_dropRequests = 0; -+ CLog::Log(LOGDEBUG,"CDVDPlayerVideo::CalcDropRequirement - dropped pictures, Sleeptime: %f, Bufferlevel: %d, Gain: %f", iSleepTime, iBufferLevel, iGain); -+ } -+ else if (iDroppedPics < 0 && iGain > 1/m_fFrameRate) -+ { -+ CDroppingStats::CGain gain; -+ gain.gain = iGain; -+ gain.pts = iDecoderPts; -+ m_droppingStats.m_gain.push_back(gain); -+ m_droppingStats.m_totalGain += iGain; -+ result |= EOS_DROPPED; -+ m_droppingStats.m_dropRequests = 0; -+ CLog::Log(LOGDEBUG,"CDVDPlayerVideo::CalcDropRequirement - dropped in decoder, Sleeptime: %f, Bufferlevel: %d, Gain: %f", iSleepTime, iBufferLevel, iGain); -+ } -+ } -+ m_droppingStats.m_lastDecoderPts = iDecoderPts; -+ -+ // subtract gains -+ while (!m_droppingStats.m_gain.empty() && -+ iRenderPts >= m_droppingStats.m_gain.front().pts) -+ { -+ m_droppingStats.m_totalGain -= m_droppingStats.m_gain.front().gain; -+ m_droppingStats.m_gain.pop_front(); -+ } -+ -+ // calculate lateness -+ iLateness = iSleepTime + m_droppingStats.m_totalGain; -+ if (iLateness < 0 && m_speed) -+ { -+ if (bNewFrame) -+ m_droppingStats.m_lateFrames++; -+ -+ // if lateness is smaller than frametime, we observe this state -+ // for 10 cycles -+ if (m_droppingStats.m_lateFrames > 10 || iLateness < -2/m_fFrameRate) -+ { -+ // is frame allowed to skip -+ if (m_iNrOfPicturesNotToSkip <= 0) -+ { -+ if (bNewFrame || m_droppingStats.m_dropRequests < 5) -+ { -+ result |= EOS_VERYLATE; -+ } -+ m_droppingStats.m_dropRequests++; -+ } -+ } -+ } -+ else -+ { -+ m_droppingStats.m_dropRequests = 0; -+ m_droppingStats.m_lateFrames = 0; -+ } -+ m_droppingStats.m_lastRenderPts = iRenderPts; -+ return result; -+} -+ -+void CDroppingStats::Reset() -+{ -+ m_gain.clear(); -+ m_totalGain = 0; -+ m_lastDecoderPts = 0; -+ m_lastRenderPts = 0; -+ m_lateFrames = 0; -+ m_dropRequests = 0; -+} -+ -+void CDroppingStats::AddOutputDropGain(double pts, double frametime) -+{ -+ CDroppingStats::CGain gain; -+ gain.gain = frametime; -+ gain.pts = pts; -+ m_gain.push_back(gain); -+ m_totalGain += frametime; -+} -diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.h b/xbmc/cores/dvdplayer/DVDPlayerVideo.h -index f8ad541..186e271 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.h -+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.h -@@ -36,6 +36,25 @@ class CDVDOverlayCodecCC; - - #define VIDEO_PICTURE_QUEUE_SIZE 1 - -+class CDroppingStats -+{ -+public: -+ void Reset(); -+ void AddOutputDropGain(double pts, double frametime); -+ struct CGain -+ { -+ double gain; -+ double pts; -+ }; -+ std::deque<CGain> m_gain; -+ double m_totalGain; -+ double m_lastDecoderPts; -+ double m_lastRenderPts; -+ unsigned int m_lateFrames; -+ unsigned int m_dropRequests; -+}; -+ -+ - class CDVDPlayerVideo : public CThread - { - public: -@@ -104,6 +123,7 @@ class CDVDPlayerVideo : public CThread - #define EOS_ABORT 1 - #define EOS_DROPPED 2 - #define EOS_VERYLATE 4 -+#define EOS_BUFFER_LEVEL 8 - - void AutoCrop(DVDVideoPicture* pPicture); - void AutoCrop(DVDVideoPicture *pPicture, RECT &crop); -@@ -129,6 +149,7 @@ class CDVDPlayerVideo : public CThread - - void ResetFrameRateCalc(); - void CalcFrameRate(); -+ int CalcDropRequirement(double pts); - - double m_fFrameRate; //framerate of the video currently playing - bool m_bCalcFrameRate; //if we should calculate the framerate from the timestamps -@@ -182,5 +203,7 @@ class CDVDPlayerVideo : public CThread - CPullupCorrection m_pullupCorrection; - - std::list<DVDMessageListItem> m_packets; -+ -+ CDroppingStats m_droppingStats; - }; - --- -1.9.3 - - -From 16d2c2ee305eb2cd3ec42fd0aad474dbf356d75d Mon Sep 17 00:00:00 2001 -From: xbmc <fernetmenta@online.de> -Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 85/94] video player: present correct pts to user for a/v sync - (after buffering in renderer) - ---- - xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 16 ++++++++++++++++ - xbmc/cores/dvdplayer/DVDPlayerVideo.h | 2 +- - 2 files changed, 17 insertions(+), 1 deletion(-) - -diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -index 181ff74..01757cc 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp -@@ -1463,6 +1463,22 @@ void CDVDPlayerVideo::ResetFrameRateCalc() - g_advancedSettings.m_videoFpsDetect == 0; - } - -+double CDVDPlayerVideo::GetCurrentPts() -+{ -+ double iSleepTime, iRenderPts; -+ int iBufferLevel; -+ -+ // get render stats -+ g_renderManager.GetStats(iSleepTime, iRenderPts, iBufferLevel); -+ -+ if( m_stalled ) -+ iRenderPts = DVD_NOPTS_VALUE; -+ else -+ iRenderPts = iRenderPts - max(0.0, iSleepTime); -+ -+ return iRenderPts; -+} -+ - #define MAXFRAMERATEDIFF 0.01 - #define MAXFRAMESERR 1000 - -diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.h b/xbmc/cores/dvdplayer/DVDPlayerVideo.h -index 186e271..59c7f09 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.h -+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.h -@@ -100,7 +100,7 @@ class CDVDPlayerVideo : public CThread - - bool InitializedOutputDevice(); - -- double GetCurrentPts() { return m_iCurrentPts; } -+ double GetCurrentPts(); - int GetPullupCorrection() { return m_pullupCorrection.GetPatternLength(); } - - double GetOutputDelay(); /* returns the expected delay, from that a packet is put in queue */ --- -1.9.3 - - -From afa38b57afee02720263e2db79d20e1411461433 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Mon, 12 May 2014 23:06:43 +0100 -Subject: [PATCH 86/94] [omxcodec] Updates to work better with dropping and - lateness detection - ---- - .../DVDCodecs/Video/DVDVideoCodecOpenMax.cpp | 5 ++ - .../DVDCodecs/Video/DVDVideoCodecOpenMax.h | 1 + - .../dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 95 ++++++++++++++++------ - .../cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h | 9 +- - 4 files changed, 84 insertions(+), 26 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -index ef10555..8323497 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp -@@ -91,4 +91,9 @@ bool CDVDVideoCodecOpenMax::ClearPicture(DVDVideoPicture* pDvdVideoPicture) - return m_omx_decoder->ClearPicture(pDvdVideoPicture); - } - -+bool CDVDVideoCodecOpenMax::GetCodecStats(double &pts, int &droppedPics) -+{ -+ return m_omx_decoder->GetCodecStats(pts, droppedPics); -+} -+ - #endif -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -index b7c0c1b..4f243df 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h -@@ -41,6 +41,7 @@ class CDVDVideoCodecOpenMax : public CDVDVideoCodec - virtual unsigned GetAllowedReferences(); - virtual void SetDropState(bool bDrop); - virtual const char* GetName(void); -+ virtual bool GetCodecStats(double &pts, int &droppedPics); - - protected: - OpenMaxVideoPtr m_omx_decoder; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index 71d19af..93cf521 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -37,6 +37,7 @@ - #include "ApplicationMessenger.h" - #include "Application.h" - #include "threads/Atomics.h" -+#include "guilib/GUIWindowManager.h" - - #include <IL/OMX_Core.h> - #include <IL/OMX_Component.h> -@@ -57,6 +58,7 @@ - - #define OMX_BUFFERFLAG_PTS_INVALID (1<<28) - #define OMX_BUFFERFLAG_DROPPED (1<<29) -+#define OMX_BUFFERFLAG_FIRST_FIELD (1<<30) - - COpenMaxVideoBuffer::COpenMaxVideoBuffer(COpenMaxVideo *omv) - : m_omv(omv), m_refs(0) -@@ -139,8 +141,11 @@ COpenMaxVideo::COpenMaxVideo() - - m_deinterlace = false; - m_deinterlace_request = VS_DEINTERLACEMODE_OFF; -- m_deinterlace_second_field = false; - m_startframe = false; -+ m_decoderPts = DVD_NOPTS_VALUE; -+ m_droppedPics = 0; -+ m_decode_frame_number = 1; -+ m_skipDeinterlaceFields = false; - } - - COpenMaxVideo::~COpenMaxVideo() -@@ -369,7 +374,10 @@ void COpenMaxVideo::Dispose() - m_finished = true; - pthread_mutex_unlock(&m_omx_output_mutex); - if (done) -+ { -+ assert(m_dts_queue.empty()); - m_myself.reset(); -+ } - } - - void COpenMaxVideo::SetDropState(bool bDrop) -@@ -730,6 +738,7 @@ int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) - omx_buffer->nFilledLen = (demuxer_bytes > omx_buffer->nAllocLen) ? omx_buffer->nAllocLen : demuxer_bytes; - omx_buffer->nTimeStamp = ToOMXTime((uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts); - omx_buffer->pAppPrivate = omx_buffer; -+ omx_buffer->pMarkData = (OMX_PTR)m_decode_frame_number; - memcpy(omx_buffer->pBuffer, demuxer_content, omx_buffer->nFilledLen); - - demuxer_bytes -= omx_buffer->nFilledLen; -@@ -742,12 +751,18 @@ int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) - omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN; - if (pts == DVD_NOPTS_VALUE) // hijack an omx flag to indicate there wasn't a real timestamp - it will be returned with the picture (but otherwise ignored) - omx_buffer->nFlags |= OMX_BUFFERFLAG_PTS_INVALID; -- if (m_drop_state) // hijack an omx flag to signal this frame to be dropped - it will be returned with the picture (but otherwise ignored) -+ if (m_drop_state) -+ { -+ // hijack an omx flag to signal this frame to be dropped - it will be returned with the picture (but otherwise ignored) - omx_buffer->nFlags |= OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED; -+ m_droppedPics += m_deinterlace ? 2:1; -+ } -+ // always set this flag on input. It won't be set on second field of interlaced video. -+ omx_buffer->nFlags |= OMX_BUFFERFLAG_FIRST_FIELD; - - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - %-6d dts:%.3f pts:%.3f flags:%x", -- CLASSNAME, __func__, omx_buffer->nFilledLen, dts == DVD_NOPTS_VALUE ? 0.0 : dts*1e-6, pts == DVD_NOPTS_VALUE ? 0.0 : pts*1e-6, omx_buffer->nFlags); -+ CLog::Log(LOGDEBUG, "%s::%s - %-6d dts:%.3f pts:%.3f flags:%x frame:%d", -+ CLASSNAME, __func__, omx_buffer->nFilledLen, dts == DVD_NOPTS_VALUE ? 0.0 : dts*1e-6, pts == DVD_NOPTS_VALUE ? 0.0 : pts*1e-6, omx_buffer->nFlags, (int)omx_buffer->pMarkData); - #endif - - omx_err = m_omx_decoder.EmptyThisBuffer(omx_buffer); -@@ -758,13 +773,16 @@ int COpenMaxVideo::Decode(uint8_t* pData, int iSize, double dts, double pts) - } - if (demuxer_bytes == 0) - { -+ m_decode_frame_number++; - m_startframe = true; - #ifdef DTS_QUEUE - if (!m_drop_state) - { - // only push if we are successful with feeding OMX_EmptyThisBuffer -+ pthread_mutex_lock(&m_omx_output_mutex); - m_dts_queue.push(dts); - assert(m_dts_queue.size() < 32); -+ pthread_mutex_unlock(&m_omx_output_mutex); - } - #endif - if (buffer_to_free) -@@ -840,13 +858,18 @@ void COpenMaxVideo::Reset(void) - SetDropState(true); - SetDropState(false); - #ifdef DTS_QUEUE -+ pthread_mutex_lock(&m_omx_output_mutex); - while (!m_dts_queue.empty()) - m_dts_queue.pop(); -+ pthread_mutex_unlock(&m_omx_output_mutex); - #endif - - while (!m_demux_queue.empty()) - m_demux_queue.pop(); - m_startframe = false; -+ m_decoderPts = DVD_NOPTS_VALUE; -+ m_droppedPics = 0; -+ m_decode_frame_number = 1; - } - - -@@ -928,26 +951,17 @@ bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) - } - } - --#ifdef DTS_QUEUE -- if (!m_deinterlace_second_field) -- { -- assert(!m_dts_queue.empty()); -- pDvdVideoPicture->dts = m_dts_queue.front(); -- m_dts_queue.pop(); -- } -- if (m_deinterlace) -- m_deinterlace_second_field = !m_deinterlace_second_field; --#endif - // nTimeStamp is in microseconds -+ pDvdVideoPicture->dts = buffer->dts; - pDvdVideoPicture->pts = FromOMXTime(buffer->omx_buffer->nTimeStamp); - pDvdVideoPicture->openMaxBuffer->Acquire(); - pDvdVideoPicture->iFlags = DVP_FLAG_ALLOCATED; - if (buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_PTS_INVALID) - pDvdVideoPicture->pts = DVD_NOPTS_VALUE; - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGINFO, "%s::%s dts:%.3f pts:%.3f flags:%x:%x openMaxBuffer:%p omx_buffer:%p egl_image:%p texture_id:%x", CLASSNAME, __func__, -+ CLog::Log(LOGINFO, "%s::%s dts:%.3f pts:%.3f flags:%x:%x frame:%d openMaxBuffer:%p omx_buffer:%p egl_image:%p texture_id:%x", CLASSNAME, __func__, - pDvdVideoPicture->dts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->dts*1e-6, pDvdVideoPicture->pts == DVD_NOPTS_VALUE ? 0.0 : pDvdVideoPicture->pts*1e-6, -- pDvdVideoPicture->iFlags, buffer->omx_buffer->nFlags, pDvdVideoPicture->openMaxBuffer, pDvdVideoPicture->openMaxBuffer->omx_buffer, pDvdVideoPicture->openMaxBuffer->egl_image, pDvdVideoPicture->openMaxBuffer->texture_id); -+ pDvdVideoPicture->iFlags, buffer->omx_buffer->nFlags, (int)buffer->omx_buffer->pMarkData, pDvdVideoPicture->openMaxBuffer, pDvdVideoPicture->openMaxBuffer->omx_buffer, pDvdVideoPicture->openMaxBuffer->egl_image, pDvdVideoPicture->openMaxBuffer->texture_id); - #endif - assert(!(buffer->omx_buffer->nFlags & (OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED))); - } -@@ -956,6 +970,12 @@ bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture) - CLog::Log(LOGERROR, "%s::%s - called but m_omx_output_ready is empty", CLASSNAME, __func__); - return false; - } -+ -+ if (pDvdVideoPicture->pts != DVD_NOPTS_VALUE) -+ m_decoderPts = pDvdVideoPicture->pts; -+ else -+ m_decoderPts = pDvdVideoPicture->dts; // xxx is DVD_NOPTS_VALUE better? -+ - return true; - } - -@@ -970,25 +990,54 @@ bool COpenMaxVideo::ClearPicture(DVDVideoPicture* pDvdVideoPicture) - return true; - } - -+bool COpenMaxVideo::GetCodecStats(double &pts, int &droppedPics) -+{ -+ pts = m_decoderPts; -+ droppedPics = m_droppedPics; -+ m_droppedPics = 0; -+ CLog::Log(LOGDEBUG, "%s::%s - pts:%.0f droppedPics:%d", CLASSNAME, __func__, pts, droppedPics); -+ return true; -+} -+ - // DecoderFillBufferDone -- OpenMax output buffer has been filled - OMX_ERRORTYPE COpenMaxVideo::DecoderFillBufferDone( - OMX_HANDLETYPE hComponent, - OMX_BUFFERHEADERTYPE* pBuffer) - { - COpenMaxVideoBuffer *buffer = (COpenMaxVideoBuffer*)pBuffer->pAppPrivate; -+ bool skipDeinterlaceFields = m_skipDeinterlaceFields || g_windowManager.HasDialogOnScreen(); - - #if defined(OMX_DEBUG_VERBOSE) -- CLog::Log(LOGDEBUG, "%s::%s - %p (%p,%p) buffer_size(%u), pts:%.3f flags:%x", -- CLASSNAME, __func__, buffer, pBuffer, buffer->omx_buffer, pBuffer->nFilledLen, (double)FromOMXTime(buffer->omx_buffer->nTimeStamp)*1e-6, buffer->omx_buffer->nFlags); -+ CLog::Log(LOGDEBUG, "%s::%s - %p (%p,%p) buffer_size(%u), pts:%.3f flags:%x frame:%d win:%x", -+ CLASSNAME, __func__, buffer, pBuffer, buffer->omx_buffer, pBuffer->nFilledLen, (double)FromOMXTime(buffer->omx_buffer->nTimeStamp)*1e-6, buffer->omx_buffer->nFlags, (int)buffer->omx_buffer->pMarkData, skipDeinterlaceFields); - #endif - - assert(!(buffer->omx_buffer->nFlags & (OMX_BUFFERFLAG_DECODEONLY | OMX_BUFFERFLAG_DROPPED))); -- // queue output omx buffer to ready list. -- pthread_mutex_lock(&m_omx_output_mutex); -- buffer->m_aspect_ratio = m_aspect_ratio; -- m_omx_output_ready.push(buffer); -- pthread_mutex_unlock(&m_omx_output_mutex); - -+ -+ // flags have OMX_BUFFERFLAG_FIRST_FIELD set if this is a direct result of a submitted frame, -+ // clear for second field of deinterlaced frame. They are zero when frame is returned due to a flush. -+#ifdef DTS_QUEUE -+ if ((!m_deinterlace || (buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_FIRST_FIELD)) && buffer->omx_buffer->nFlags) -+ { -+ pthread_mutex_lock(&m_omx_output_mutex); -+ assert(!m_dts_queue.empty()); -+ buffer->dts = m_dts_queue.front(); -+ m_dts_queue.pop(); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ } -+#endif -+ if (m_drop_state || (m_deinterlace && skipDeinterlaceFields && !(buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_FIRST_FIELD))) -+ { -+ ReturnOpenMaxBuffer(buffer); -+ } -+ else -+ { -+ buffer->m_aspect_ratio = m_aspect_ratio; -+ pthread_mutex_lock(&m_omx_output_mutex); -+ m_omx_output_ready.push(buffer); -+ pthread_mutex_unlock(&m_omx_output_mutex); -+ } - return OMX_ErrorNone; - } - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -index f234f6d..adf53b5 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.h -@@ -57,6 +57,7 @@ class COpenMaxVideoBuffer - int height; - float m_aspect_ratio; - int index; -+ double dts; - - // used for egl based rendering if active - EGLImageKHR egl_image; -@@ -87,6 +88,7 @@ class COpenMaxVideo - virtual unsigned GetAllowedReferences() { return 2; } - virtual void SetDropState(bool bDrop); - virtual const char* GetName(void) { return (const char*)m_pFormatName; } -+ virtual bool GetCodecStats(double &pts, int &droppedPics); - - // OpenMax decoder callback routines. - OMX_ERRORTYPE DecoderFillBufferDone(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE* pBuffer); -@@ -142,10 +144,11 @@ class COpenMaxVideo - - bool m_deinterlace; - EDEINTERLACEMODE m_deinterlace_request; -- bool m_deinterlace_second_field; -- - bool m_startframe; -- -+ unsigned int m_decode_frame_number; -+ double m_decoderPts; -+ unsigned int m_droppedPics; -+ bool m_skipDeinterlaceFields; - bool PortSettingsChanged(); - bool SendDecoderConfig(uint8_t *extradata, int extrasize); - bool NaluFormatStartCodes(enum AVCodecID codec, uint8_t *extradata, int extrasize); --- -1.9.3 - - -From 4dd2fcf0f479b6b18dac9a496ddf1788b82388f2 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sun, 11 May 2014 16:13:45 +0100 -Subject: [PATCH 87/94] [rbp] Add config.txt settings to log file - ---- - xbmc/linux/RBP.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/xbmc/linux/RBP.cpp b/xbmc/linux/RBP.cpp -index 49dcbb8..9a5e9cb 100644 ---- a/xbmc/linux/RBP.cpp -+++ b/xbmc/linux/RBP.cpp -@@ -79,11 +79,17 @@ bool CRBP::Initialize() - - void CRBP::LogFirmwareVerison() - { -- char response[160]; -+ char response[1024]; - m_DllBcmHost->vc_gencmd(response, sizeof response, "version"); - response[sizeof(response) - 1] = '\0'; - CLog::Log(LOGNOTICE, "Raspberry PI firmware version: %s", response); - CLog::Log(LOGNOTICE, "ARM mem: %dMB GPU mem: %dMB MPG2:%d WVC1:%d", m_arm_mem, m_gpu_mem, m_codec_mpg2_enabled, m_codec_wvc1_enabled); -+ m_DllBcmHost->vc_gencmd(response, sizeof response, "get_config int"); -+ response[sizeof(response) - 1] = '\0'; -+ CLog::Log(LOGNOTICE, "Config:\n%s", response); -+ m_DllBcmHost->vc_gencmd(response, sizeof response, "get_config str"); -+ response[sizeof(response) - 1] = '\0'; -+ CLog::Log(LOGNOTICE, "Config:\n%s", response); - } - - void CRBP::GetDisplaySize(int &width, int &height) --- -1.9.3 - - -From eb2cba833f1399befcbd60901f3d97a08e3a2781 Mon Sep 17 00:00:00 2001 -From: Alex Deryskyba <alex@codesnake.com> -Date: Thu, 8 May 2014 18:54:54 +0300 -Subject: [PATCH 88/94] Reset display region when video stream properties - change - -Currently when video stream properties change, e.g. when user switches to next or previous Live TV channel, and has the same frame width and height, the COMXVideo::SetVideoRect() method is not called, causing the video to play back with default source and destination rectangles, not respecting the user-defined zoom settings. - -This commit fixes the issue. ---- - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index 61b884e..eaa1e34 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -781,6 +781,9 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, f - return; - } - -+ m_src_rect.SetRect(0, 0, 0, 0); -+ m_dst_rect.SetRect(0, 0, 0, 0); -+ - g_renderManager.RegisterRenderUpdateCallBack((const void*)this, RenderUpdateCallBack); - } - --- -1.9.3 - - -From 7c369ba5ec4e700f5c06e1caa20095bc26e61195 Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 28 May 2014 23:44:11 +0100 -Subject: [PATCH 89/94] [omxplayer] Fix for mapping of multichannel PCM audio - ---- - xbmc/cores/omxplayer/OMXAudio.cpp | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp -index d9beb68..75eff26 100644 ---- a/xbmc/cores/omxplayer/OMXAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXAudio.cpp -@@ -606,13 +606,18 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo - if (m_InputChannels <= 2) - stdLayout = AE_CH_LAYOUT_2_0; - -- uint64_t m_dst_chan_layout = GetAVChannelLayout(stdLayout); -+ -+ CAEChannelInfo resolvedMap = channelMap; -+ resolvedMap.ResolveChannels(stdLayout); -+ uint64_t m_dst_chan_layout = GetAVChannelLayout(resolvedMap); - uint64_t m_src_chan_layout = GetAVChannelLayout(channelMap); -- m_OutputChannels = stdLayout.Count(); -+ -+ m_InputChannels = channelMap.Count(); -+ m_OutputChannels = resolvedMap.Count(); - - int m_dst_channels = m_OutputChannels; - int m_src_channels = m_InputChannels; -- SetAudioProps(m_Passthrough, GetChannelMap(stdLayout, m_Passthrough)); -+ SetAudioProps(m_Passthrough, GetChannelMap(resolvedMap, m_Passthrough)); - - CLog::Log(LOGINFO, "%s::%s remap:%p chan:%d->%d norm:%d upmix:%d %llx:%llx", CLASSNAME, __func__, remapLayout, m_src_channels, m_dst_channels, normalize, upmix, m_src_chan_layout, m_dst_chan_layout); - --- -1.9.3 - - -From 458ec80741e4aa1ae95fe616f5953e1268a4802e Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Fri, 30 May 2014 14:15:10 +0100 -Subject: [PATCH 90/94] [pi] Fix for logged resolutions - ---- - xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp | 15 +++++---------- - 1 file changed, 5 insertions(+), 10 deletions(-) - -diff --git a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -index 5b26b20..a3edf0e 100644 ---- a/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -+++ b/xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp -@@ -483,10 +483,8 @@ bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &r - - if(resolutions.size() == 0) - { -- RESOLUTION_INFO res; -- CLog::Log(LOGDEBUG, "EGL probe resolution %s:%x\n", m_desktopRes.strMode.c_str(), m_desktopRes.dwFlags); -- - AddUniqueResolution(m_desktopRes, resolutions); -+ CLog::Log(LOGDEBUG, "EGL probe resolution %s:%x\n", m_desktopRes.strMode.c_str(), m_desktopRes.dwFlags); - } - - if(resolutions.size() < 2) -@@ -576,13 +574,12 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - res.iScreenWidth = tv->width; - res.iScreenHeight = tv->height; - res.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res.iScreenWidth / (float)res.iScreenHeight); -+ res.iSubtitles = (int)(0.965 * res.iHeight); - -+ AddUniqueResolution(res, resolutions); - CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f) %s%s:%x\n", i, res.strMode.c_str(), res.fPixelRatio, - tv->native ? "N" : "", tv->scan_mode ? "I" : "", tv->code); - -- res.iSubtitles = (int)(0.965 * res.iHeight); -- -- AddUniqueResolution(res, resolutions); - if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) - { - RESOLUTION_INFO res2 = res; -@@ -596,11 +593,10 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DSBS; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); -- - res2.iSubtitles = (int)(0.965 * res2.iHeight); - - AddUniqueResolution(res2, resolutions); -+ CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) - { - res2.fRefreshRate = (float)tv->frame_rate * (1000.0f/1001.0f); -@@ -612,11 +608,10 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v - RESOLUTION_INFO res2 = res; - res2.dwFlags |= D3DPRESENTFLAG_MODE3DTB; - res2.fPixelRatio = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight); -- CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); -- - res2.iSubtitles = (int)(0.965 * res2.iHeight); - - AddUniqueResolution(res2, resolutions); -+ CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio); - if (tv->frame_rate == 24 || tv->frame_rate == 30 || tv->frame_rate == 60) - { - res2.fRefreshRate = (float)tv->frame_rate * (1000.0f/1001.0f); --- -1.9.3 - - -From 9eb0d69eb1f319421780025cefe6df3ade40c4dc Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sat, 7 Jun 2014 16:55:41 +0100 -Subject: [PATCH 91/94] [omx] Remove logging for texture jobs - -This causes a lot of log spam which hasn't proved useful so far. ---- - xbmc/cores/omxplayer/OMXImage.cpp | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXImage.cpp b/xbmc/cores/omxplayer/OMXImage.cpp -index 262a004..d529b20 100644 ---- a/xbmc/cores/omxplayer/OMXImage.cpp -+++ b/xbmc/cores/omxplayer/OMXImage.cpp -@@ -210,13 +210,11 @@ bool COMXImage::SendMessage(bool (*callback)(EGLDisplay egl_display, EGLContext - mess.sync.Reset(); - { - CSingleLock lock(m_texqueue_lock); -- CLog::Log(LOGDEBUG, "%s: texture job: %p:%p", __func__, &mess, mess.callback); - m_texqueue.push(&mess); - m_texqueue_cond.notifyAll(); - } - // wait for function to have finished (in texture thread) - mess.sync.Wait(); -- CLog::Log(LOGDEBUG, "%s: texture job done: %p:%p = %d", __func__, &mess, mess.callback, mess.result); - // need to ensure texture thread has returned from mess.sync.Set() before we exit and free tex - CSingleLock lock(m_texqueue_lock); - return mess.result; -@@ -429,15 +427,12 @@ void COMXImage::Process() - struct callbackinfo *mess = m_texqueue.front(); - m_texqueue.pop(); - lock.Leave(); -- CLog::Log(LOGDEBUG, "%s: texture job: %p:%p:%p", __func__, mess, mess->callback, mess->cookie); - - mess->result = mess->callback(g_Windowing.GetEGLDisplay(), GetEGLContext(), mess->cookie); -- CLog::Log(LOGDEBUG, "%s: texture job about to Set: %p:%p:%p", __func__, mess, mess->callback, mess->cookie); - { - CSingleLock lock(m_texqueue_lock); - mess->sync.Set(); - } -- CLog::Log(LOGDEBUG, "%s: texture job: %p done", __func__, mess); - } - } - } --- -1.9.3 - - -From 4c7a42273416f4053a5bb90755ea45cc0a5f7a0b Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Sun, 15 Jun 2014 13:20:53 +0100 -Subject: [PATCH 92/94] gles: Avoid crash when capturing snapshot when using - dvdplayer - -Note: snapshot will be blank, but that's better than crashing ---- - xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -index e22a153..0cff2c5 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp -@@ -1600,7 +1600,9 @@ bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture) - return false; - - // If rendered directly by the hardware -+#ifndef TARGET_RASPBERRY_PI - if (m_renderMethod & RENDER_BYPASS) -+#endif - { - capture->BeginRender(); - capture->EndRender(); --- -1.9.3 - - -From 9805b1c9b218f8ba15c41752cc88f6e8bc3223ad Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 28 May 2014 18:30:51 +0100 -Subject: [PATCH 93/94] [omxcodec] Reduce GPU memory use by 2 video frames - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -index 93cf521..cc45570 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp -@@ -308,6 +308,20 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, OpenM - return false; - } - -+ { -+ // as we aren't tunnelled to display, we can save memory by setting extrabuffers to 0 -+ OMX_PARAM_U32TYPE extra_buffers; -+ OMX_INIT_STRUCTURE(extra_buffers); -+ extra_buffers.nU32 = 0; -+ -+ omx_err = m_omx_decoder.SetParameter(OMX_IndexParamBrcmExtraBuffers, &extra_buffers); -+ if(omx_err != OMX_ErrorNone) -+ { -+ CLog::Log(LOGERROR, "COMXVideo::Open error OMX_IndexParamBrcmExtraBuffers omx_err(0x%08x)\n", omx_err); -+ return false; -+ } -+ } -+ - // request portsettingschanged on aspect ratio change - OMX_CONFIG_REQUESTCALLBACKTYPE notifications; - OMX_INIT_STRUCTURE(notifications); --- -1.9.3 - - -From 1b49a6f5b1655918e26d84ca4260fc249c00022f Mon Sep 17 00:00:00 2001 -From: popcornmix <popcornmix@gmail.com> -Date: Wed, 18 Jun 2014 23:11:28 +0100 -Subject: [PATCH 94/94] [rbp] Reduce GPU memory use when limited - -Switching from default triple buffered output to double buffered saves 8M with 1080p GUI. -This may slightly reduce framerate, but is likely to be minimal. - -Assume if gpu_mem is set below the default 128M that this memory reduction is wanted ---- - xbmc/linux/RBP.cpp | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/xbmc/linux/RBP.cpp b/xbmc/linux/RBP.cpp -index 9a5e9cb..50d5186 100644 ---- a/xbmc/linux/RBP.cpp -+++ b/xbmc/linux/RBP.cpp -@@ -72,6 +72,9 @@ bool CRBP::Initialize() - if (vc_gencmd(response, sizeof response, "codec_enabled WVC1") == 0) - m_codec_wvc1_enabled = strcmp("WVC1=enabled", response) == 0; - -+ if (m_gpu_mem < 128) -+ setenv("V3D_DOUBLE_BUFFER", "1", 1); -+ - g_OMXImage.Initialize(); - m_omx_image_init = true; - return true; --- -1.9.3 - diff --git a/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp b/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp deleted file mode 100644 index 4b8b25efb..000000000 --- a/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) - -#include <stdlib.h> -#include "LinuxPowerSyscall.h" -#include "utils/log.h" - -CLinuxPowerSyscall::CLinuxPowerSyscall() -{ - CLog::Log(LOGINFO, "Selected LinuxPower as PowerSyscall"); -} - -CLinuxPowerSyscall::~CLinuxPowerSyscall() -{ } - -bool CLinuxPowerSyscall::Powerdown() -{ - system("/sbin/poweroff -F"); - return 0; -} - -bool CLinuxPowerSyscall::Reboot() -{ - system("/sbin/reboot -F"); - return 0; -} - -int CLinuxPowerSyscall::BatteryLevel(void) -{ } - -bool CLinuxPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback) -{ - return true; -} - -#endif - diff --git a/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h b/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h deleted file mode 100644 index 959a8119b..000000000 --- a/package/xbmc/src/xbmc/powermanagement/linux/LinuxPowerSyscall.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once -/* - * Copyright (C) 2014 Team XBMC - * http://www.xbmc.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with XBMC; see the file COPYING. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#if defined (_LINUX) -#include "powermanagement/IPowerSyscall.h" - -class CLinuxPowerSyscall : public CPowerSyscallWithoutEvents -{ -public: - CLinuxPowerSyscall(); - ~CLinuxPowerSyscall(); - - virtual bool Powerdown(); - virtual bool Suspend(void) { return false; } - virtual bool Hibernate(void) { return false; } - virtual bool Reboot(); - - virtual bool CanPowerdown(void) { return true; } - virtual bool CanSuspend(void) { return false; } - virtual bool CanHibernate(void) { return false; } - virtual bool CanReboot(void) { return true; } - virtual int BatteryLevel(void); - - virtual bool PumpPowerEvents(IPowerEventsCallback *callback); -}; -#endif - diff --git a/target/arm/solidrun-imx6/patches/3.14.17/solidrun.patch b/target/arm/solidrun-imx6/patches/3.14.17/solidrun.patch index 509e58943..d2eac10fb 100644 --- a/target/arm/solidrun-imx6/patches/3.14.17/solidrun.patch +++ b/target/arm/solidrun-imx6/patches/3.14.17/solidrun.patch @@ -1,6 +1,6 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/clcd-panels.dtsi linux-imx6-3.14/arch/arm/boot/dts/clcd-panels.dtsi --- linux-3.14.17/arch/arm/boot/dts/clcd-panels.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/clcd-panels.dtsi 2014-09-09 10:13:47.196940658 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/clcd-panels.dtsi 2014-09-11 18:05:52.586000344 +0200 @@ -0,0 +1,52 @@ +/* + * ARM Ltd. Versatile Express @@ -56,7 +56,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/clcd-panels.dtsi linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/dra7-evm.dts linux-imx6-3.14/arch/arm/boot/dts/dra7-evm.dts --- linux-3.14.17/arch/arm/boot/dts/dra7-evm.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/dra7-evm.dts 2014-09-09 10:13:47.196940658 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/dra7-evm.dts 2014-09-11 18:05:52.590000359 +0200 @@ -182,7 +182,6 @@ regulator-name = "ldo3"; regulator-min-microvolt = <1800000>; @@ -67,7 +67,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/dra7-evm.dts linux-imx6-3.14/arch/arm/ diff -Nur linux-3.14.17/arch/arm/boot/dts/efm32gg-dk3750.dts linux-imx6-3.14/arch/arm/boot/dts/efm32gg-dk3750.dts --- linux-3.14.17/arch/arm/boot/dts/efm32gg-dk3750.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/efm32gg-dk3750.dts 2014-09-09 10:13:47.208940757 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/efm32gg-dk3750.dts 2014-09-11 18:05:52.590000359 +0200 @@ -26,7 +26,7 @@ }; @@ -79,7 +79,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/efm32gg-dk3750.dts linux-imx6-3.14/arc temp@48 { diff -Nur linux-3.14.17/arch/arm/boot/dts/hi3620.dtsi linux-imx6-3.14/arch/arm/boot/dts/hi3620.dtsi --- linux-3.14.17/arch/arm/boot/dts/hi3620.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/hi3620.dtsi 2014-09-09 10:13:47.216940821 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/hi3620.dtsi 2014-09-11 18:05:52.590000359 +0200 @@ -73,7 +73,7 @@ L2: l2-cache { @@ -91,7 +91,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/hi3620.dtsi linux-imx6-3.14/arch/arm/b cache-level = <2>; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx23.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx23.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx23.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx23.dtsi 2014-09-09 10:13:47.216940821 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx23.dtsi 2014-09-11 18:05:52.594000374 +0200 @@ -363,7 +363,8 @@ compatible = "fsl,imx23-lcdif"; reg = <0x80030000 2000>; @@ -104,7 +104,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx23.dtsi linux-imx6-3.14/arch/arm/bo diff -Nur linux-3.14.17/arch/arm/boot/dts/imx25.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx25.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx25.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx25.dtsi 2014-09-09 10:13:47.220940854 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx25.dtsi 2014-09-11 18:05:52.594000374 +0200 @@ -13,6 +13,7 @@ / { @@ -123,7 +123,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx25.dtsi linux-imx6-3.14/arch/arm/bo }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx25-karo-tx25.dts linux-imx6-3.14/arch/arm/boot/dts/imx25-karo-tx25.dts --- linux-3.14.17/arch/arm/boot/dts/imx25-karo-tx25.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx25-karo-tx25.dts 2014-09-09 10:13:47.220940854 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx25-karo-tx25.dts 2014-09-11 18:05:52.594000374 +0200 @@ -16,6 +16,10 @@ model = "Ka-Ro TX25"; compatible = "karo,imx25-tx25", "fsl,imx25"; @@ -137,7 +137,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx25-karo-tx25.dts linux-imx6-3.14/ar }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27-apf27.dts linux-imx6-3.14/arch/arm/boot/dts/imx27-apf27.dts --- linux-3.14.17/arch/arm/boot/dts/imx27-apf27.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx27-apf27.dts 2014-09-09 10:13:47.220940854 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx27-apf27.dts 2014-09-11 18:05:52.594000374 +0200 @@ -29,6 +29,7 @@ osc26m { @@ -148,7 +148,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27-apf27.dts linux-imx6-3.14/arch/a }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx27.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx27.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx27.dtsi 2014-09-09 10:13:47.220940854 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx27.dtsi 2014-09-11 18:05:52.594000374 +0200 @@ -13,6 +13,7 @@ / { @@ -167,7 +167,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27.dtsi linux-imx6-3.14/arch/arm/bo }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts linux-imx6-3.14/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts --- linux-3.14.17/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts 2014-09-09 10:13:47.220940854 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts 2014-09-11 18:05:52.594000374 +0200 @@ -15,6 +15,10 @@ model = "Phytec pca100 rapid development kit"; compatible = "phytec,imx27-pca100-rdk", "phytec,imx27-pca100", "fsl,imx27"; @@ -181,7 +181,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts linux-i native-mode = <&timing0>; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx28.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx28.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx28.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx28.dtsi 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx28.dtsi 2014-09-11 18:05:52.614000456 +0200 @@ -840,7 +840,8 @@ compatible = "fsl,imx28-lcdif"; reg = <0x80030000 0x2000>; @@ -194,7 +194,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx28.dtsi linux-imx6-3.14/arch/arm/bo status = "disabled"; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx51-babbage.dts linux-imx6-3.14/arch/arm/boot/dts/imx51-babbage.dts --- linux-3.14.17/arch/arm/boot/dts/imx51-babbage.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx51-babbage.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx51-babbage.dts 2014-09-11 18:05:52.614000456 +0200 @@ -17,6 +17,10 @@ model = "Freescale i.MX51 Babbage Board"; compatible = "fsl,imx51-babbage", "fsl,imx51"; @@ -208,7 +208,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx51-babbage.dts linux-imx6-3.14/arch }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx51.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx51.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx51.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx51.dtsi 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx51.dtsi 2014-09-11 18:05:52.614000456 +0200 @@ -15,6 +15,7 @@ / { @@ -245,7 +245,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx51.dtsi linux-imx6-3.14/arch/arm/bo }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx53.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx53.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx53.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx53.dtsi 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx53.dtsi 2014-09-11 18:05:52.634000535 +0200 @@ -15,6 +15,7 @@ / { @@ -282,7 +282,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx53.dtsi linux-imx6-3.14/arch/arm/bo }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx53-mba53.dts linux-imx6-3.14/arch/arm/boot/dts/imx53-mba53.dts --- linux-3.14.17/arch/arm/boot/dts/imx53-mba53.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx53-mba53.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx53-mba53.dts 2014-09-11 18:05:52.614000456 +0200 @@ -25,6 +25,10 @@ enable-active-low; }; @@ -296,7 +296,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx53-mba53.dts linux-imx6-3.14/arch/a pwms = <&pwm2 0 50000>; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2013 Sascha Hauer <s.hauer@pengutronix.de> @@ -323,7 +323,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-dfi-fs700-m60.dts linux-imx6-3. +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6dl.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6dl.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl.dtsi 2014-09-11 18:05:52.634000535 +0200 @@ -8,6 +8,7 @@ * */ @@ -491,7 +491,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl.dtsi linux-imx6-3.14/arch/arm/b }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw51xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw51xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-gw51xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw51xx.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw51xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -514,7 +514,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw51xx.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw52xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw52xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-gw52xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw52xx.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw52xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -537,7 +537,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw52xx.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw53xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw53xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-gw53xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw53xx.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw53xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -560,7 +560,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw53xx.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw54xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw54xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-gw54xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw54xx.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-gw54xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -583,7 +583,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-gw54xx.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-hummingboard.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-hummingboard.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-hummingboard.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-hummingboard.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-hummingboard.dts 2014-09-11 18:05:52.634000535 +0200 @@ -1,163 +1,13 @@ /* - * Copyright (C) 2013,2014 Russell King @@ -755,7 +755,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-hummingboard.dts linux-imx6-3.1 }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-nitrogen6x.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-nitrogen6x.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-nitrogen6x.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-nitrogen6x.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-nitrogen6x.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,21 @@ +/* + * Copyright 2013 Boundary Devices, Inc. @@ -780,7 +780,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-nitrogen6x.dts linux-imx6-3.14/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH @@ -803,7 +803,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pbab01.dts linux-imx6-3. +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,22 @@ +/* + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH @@ -829,7 +829,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-phytec-pfla02.dtsi linux-imx6-3 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-pinfunc.h linux-imx6-3.14/arch/arm/boot/dts/imx6dl-pinfunc.h --- linux-3.14.17/arch/arm/boot/dts/imx6dl-pinfunc.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-pinfunc.h 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-pinfunc.h 2014-09-11 18:05:52.634000535 +0200 @@ -755,6 +755,7 @@ #define MX6QDL_PAD_GPIO_5__I2C3_SCL 0x230 0x600 0x878 0x6 0x2 #define MX6QDL_PAD_GPIO_5__ARM_EVENTI 0x230 0x600 0x000 0x7 0x0 @@ -848,7 +848,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-pinfunc.h linux-imx6-3.14/arch/ #define MX6QDL_PAD_SD1_CMD__SD1_CMD 0x2e0 0x6c8 0x000 0x0 0x0 diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabreauto.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabreauto.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-sabreauto.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabreauto.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabreauto.dts 2014-09-11 18:05:52.634000535 +0200 @@ -15,3 +15,16 @@ model = "Freescale i.MX6 DualLite/Solo SABRE Automotive Board"; compatible = "fsl,imx6dl-sabreauto", "fsl,imx6dl"; @@ -868,7 +868,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabreauto.dts linux-imx6-3.14/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabrelite.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabrelite.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-sabrelite.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabrelite.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabrelite.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,20 @@ +/* + * Copyright 2011 Freescale Semiconductor, Inc. @@ -892,7 +892,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabrelite.dts linux-imx6-3.14/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd.dts 2014-09-11 18:05:52.634000535 +0200 @@ -15,3 +15,20 @@ model = "Freescale i.MX6 DualLite SABRE Smart Device Board"; compatible = "fsl,imx6dl-sabresd", "fsl,imx6dl"; @@ -916,7 +916,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd.dts linux-imx6-3.14/arc +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts --- linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts 2014-09-09 10:13:47.224940887 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -939,7 +939,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts linux-imx6-3.1 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-arm2.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-arm2.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2.dts 2014-09-11 18:05:52.634000535 +0200 @@ -23,14 +23,27 @@ regulators { @@ -1152,7 +1152,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-arm2.dts linux-imx6-3.14/arch/ar }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-arm2-hsic.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2-hsic.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-arm2-hsic.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2-hsic.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-arm2-hsic.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,32 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. @@ -1188,7 +1188,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-arm2-hsic.dts linux-imx6-3.14/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-cm-fx6.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-cm-fx6.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-cm-fx6.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-cm-fx6.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-cm-fx6.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,107 @@ +/* + * Copyright 2013 CompuLab Ltd. @@ -1299,7 +1299,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-cm-fx6.dts linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-cubox-i.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-cubox-i.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-cubox-i.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-cubox-i.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-cubox-i.dts 2014-09-11 18:05:52.634000535 +0200 @@ -13,4 +13,8 @@ &sata { @@ -1311,7 +1311,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-cubox-i.dts linux-imx6-3.14/arch }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2013 Sascha Hauer <s.hauer@pengutronix.de> @@ -1338,7 +1338,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-dfi-fs700-m60.dts linux-imx6-3.1 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -5,11 +5,33 @@ #include "imx6qdl-microsom-ar8035.dtsi" @@ -1575,7 +1575,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi linux-imx6-3.14/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,199 @@ +/ { + regulators { @@ -1778,7 +1778,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi linux-imx6- +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl.dtsi 2014-09-11 18:05:52.646000583 +0200 @@ -10,10 +10,16 @@ * http://www.gnu.org/copyleft/gpl.html */ @@ -3472,7 +3472,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl.dtsi linux-imx6-3.14/arch/arm/ }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,374 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -3850,7 +3850,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi linux-imx6-3.14/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,527 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -4381,7 +4381,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi linux-imx6-3.14/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,572 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -4957,7 +4957,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi linux-imx6-3.14/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,599 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -5560,7 +5560,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi linux-imx6-3.14/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2013,2014 Russell King @@ -5903,7 +5903,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi linux-imx6-3 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -17,7 +17,7 @@ enet { pinctrl_microsom_enet_ar8035: microsom-enet-ar8035 { @@ -5952,7 +5952,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi linux-imx * As the RMII pins are also connected to RGMII diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-microsom.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -1,9 +1,69 @@ /* * Copyright (C) 2013,2014 Russell King @@ -6082,7 +6082,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-microsom.dtsi linux-imx6-3.14/ + diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,426 @@ +/* + * Copyright 2013 Boundary Devices, Inc. @@ -6512,7 +6512,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi linux-imx6-3.1 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,98 @@ +/* + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH @@ -6614,7 +6614,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pbab01.dtsi linux-imx6- +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,356 @@ +/* + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH @@ -6974,7 +6974,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi linux-imx6- +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -10,17 +10,146 @@ * http://www.gnu.org/copyleft/gpl.html */ @@ -7675,7 +7675,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi linux-imx6-3.14 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,427 @@ +/* + * Copyright 2011 Freescale Semiconductor, Inc. @@ -8106,7 +8106,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi linux-imx6-3.14 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabresd.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabresd.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabresd.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabresd.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-sabresd.dtsi 2014-09-11 18:05:52.646000583 +0200 @@ -10,16 +10,33 @@ * http://www.gnu.org/copyleft/gpl.html */ @@ -8801,7 +8801,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-sabresd.dtsi linux-imx6-3.14/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-wandboard.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-wandboard.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6qdl-wandboard.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-wandboard.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6qdl-wandboard.dtsi 2014-09-11 18:05:52.646000583 +0200 @@ -12,17 +12,21 @@ / { regulators { @@ -9028,7 +9028,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6qdl-wandboard.dtsi linux-imx6-3.14 }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,432 @@ +/* + * Copyright 2013 Data Modul AG @@ -9464,7 +9464,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts linux-imx6-3.14/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6q.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6q.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -8,10 +8,16 @@ * */ @@ -9663,7 +9663,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q.dtsi linux-imx6-3.14/arch/arm/bo -}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gk802.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gk802.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gk802.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gk802.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gk802.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,229 @@ +/* + * Copyright (C) 2013 Philipp Zabel @@ -9896,7 +9896,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gk802.dts linux-imx6-3.14/arch/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw51xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw51xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gw51xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw51xx.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw51xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,19 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -9919,7 +9919,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw51xx.dts linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw52xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw52xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gw52xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw52xx.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw52xx.dts 2014-09-11 18:05:52.634000535 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -9946,7 +9946,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw52xx.dts linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw53xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw53xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gw53xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw53xx.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw53xx.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -9973,7 +9973,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw53xx.dts linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw5400-a.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw5400-a.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gw5400-a.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw5400-a.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw5400-a.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,543 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -10520,7 +10520,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw5400-a.dts linux-imx6-3.14/arc +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw54xx.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw54xx.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-gw54xx.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw54xx.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-gw54xx.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2013 Gateworks Corporation @@ -10547,7 +10547,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-gw54xx.dts linux-imx6-3.14/arch/ +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-hummingboard.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-hummingboard.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-hummingboard.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-hummingboard.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-hummingboard.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) @@ -10572,7 +10572,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-hummingboard.dts linux-imx6-3.14 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-nitrogen6x.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-nitrogen6x.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-nitrogen6x.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-nitrogen6x.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-nitrogen6x.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,25 @@ +/* + * Copyright 2013 Boundary Devices, Inc. @@ -10601,7 +10601,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-nitrogen6x.dts linux-imx6-3.14/a +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pbab01.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pbab01.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pbab01.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pbab01.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pbab01.dts 2014-09-11 18:05:52.642000568 +0200 @@ -11,24 +11,17 @@ /dts-v1/; @@ -10635,7 +10635,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pbab01.dts linux-imx6-3.1 }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi 2014-09-11 18:05:52.642000568 +0200 @@ -10,171 +10,13 @@ */ @@ -10812,7 +10812,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-phytec-pfla02.dtsi linux-imx6-3. -}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-pinfunc.h linux-imx6-3.14/arch/arm/boot/dts/imx6q-pinfunc.h --- linux-3.14.17/arch/arm/boot/dts/imx6q-pinfunc.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-pinfunc.h 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-pinfunc.h 2014-09-11 18:05:52.642000568 +0200 @@ -673,6 +673,7 @@ #define MX6QDL_PAD_GPIO_3__USB_H1_OC 0x22c 0x5fc 0x948 0x6 0x1 #define MX6QDL_PAD_GPIO_3__MLB_CLK 0x22c 0x5fc 0x900 0x7 0x1 @@ -10831,7 +10831,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-pinfunc.h linux-imx6-3.14/arch/a #define MX6QDL_PAD_SD2_CLK__SD2_CLK 0x354 0x73c 0x000 0x0 0x0 diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabreauto.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabreauto.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-sabreauto.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabreauto.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabreauto.dts 2014-09-11 18:05:52.642000568 +0200 @@ -20,6 +20,22 @@ compatible = "fsl,imx6q-sabreauto", "fsl,imx6q"; }; @@ -10857,7 +10857,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabreauto.dts linux-imx6-3.14/ar }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabrelite.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabrelite.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-sabrelite.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabrelite.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabrelite.dts 2014-09-11 18:05:52.642000568 +0200 @@ -12,189 +12,13 @@ /dts-v1/; @@ -11051,7 +11051,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabrelite.dts linux-imx6-3.14/ar -}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd.dts 2014-09-11 18:05:52.642000568 +0200 @@ -23,3 +23,19 @@ &sata { status = "okay"; @@ -11074,7 +11074,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts 2014-09-11 18:05:52.642000568 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2012-2013 Freescale Semiconductor, Inc. @@ -11101,7 +11101,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sabresd-hdcp.dts linux-imx6-3.14 +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sbc6x.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-sbc6x.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-sbc6x.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sbc6x.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-sbc6x.dts 2014-09-11 18:05:52.642000568 +0200 @@ -17,28 +17,78 @@ }; }; @@ -11187,7 +11187,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-sbc6x.dts linux-imx6-3.14/arch/a }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-udoo.dts linux-imx6-3.14/arch/arm/boot/dts/imx6q-udoo.dts --- linux-3.14.17/arch/arm/boot/dts/imx6q-udoo.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-udoo.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6q-udoo.dts 2014-09-11 18:05:52.642000568 +0200 @@ -16,24 +16,78 @@ model = "Udoo i.MX6 Quad Board"; compatible = "udoo,imx6q-udoo", "fsl,imx6q"; @@ -11271,7 +11271,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6q-udoo.dts linux-imx6-3.14/arch/ar }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl.dtsi linux-imx6-3.14/arch/arm/boot/dts/imx6sl.dtsi --- linux-3.14.17/arch/arm/boot/dts/imx6sl.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl.dtsi 2014-09-09 10:13:47.232940953 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl.dtsi 2014-09-11 18:05:52.646000583 +0200 @@ -7,12 +7,14 @@ * */ @@ -12310,7 +12310,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl.dtsi linux-imx6-3.14/arch/arm/b }; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl-evk-csi.dts linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk-csi.dts --- linux-3.14.17/arch/arm/boot/dts/imx6sl-evk-csi.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk-csi.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk-csi.dts 2014-09-11 18:05:52.646000583 +0200 @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -12341,7 +12341,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl-evk-csi.dts linux-imx6-3.14/arc +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl-evk.dts linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk.dts --- linux-3.14.17/arch/arm/boot/dts/imx6sl-evk.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk.dts 2014-09-09 10:13:47.228940921 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/imx6sl-evk.dts 2014-09-11 18:05:52.646000583 +0200 @@ -8,6 +8,8 @@ /dts-v1/; @@ -13105,7 +13105,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/imx6sl-evk.dts linux-imx6-3.14/arch/ar +}; diff -Nur linux-3.14.17/arch/arm/boot/dts/Makefile linux-imx6-3.14/arch/arm/boot/dts/Makefile --- linux-3.14.17/arch/arm/boot/dts/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/Makefile 2014-09-09 10:13:47.192940626 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/Makefile 2014-09-11 18:05:52.582000327 +0200 @@ -154,16 +154,37 @@ imx53-qsb.dtb \ imx53-smd.dtb \ @@ -13162,7 +13162,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/Makefile linux-imx6-3.14/arch/arm/boot wm8505-ref.dtb \ diff -Nur linux-3.14.17/arch/arm/boot/dts/marco.dtsi linux-imx6-3.14/arch/arm/boot/dts/marco.dtsi --- linux-3.14.17/arch/arm/boot/dts/marco.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/marco.dtsi 2014-09-09 10:13:47.232940953 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/marco.dtsi 2014-09-11 18:05:52.662000648 +0200 @@ -36,7 +36,7 @@ ranges = <0x40000000 0x40000000 0xa0000000>; @@ -13174,7 +13174,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/marco.dtsi linux-imx6-3.14/arch/arm/bo arm,tag-latency = <1 1 1>; diff -Nur linux-3.14.17/arch/arm/boot/dts/prima2.dtsi linux-imx6-3.14/arch/arm/boot/dts/prima2.dtsi --- linux-3.14.17/arch/arm/boot/dts/prima2.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/prima2.dtsi 2014-09-09 10:13:47.240941017 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/prima2.dtsi 2014-09-11 18:05:52.686000742 +0200 @@ -48,7 +48,7 @@ ranges = <0x40000000 0x40000000 0x80000000>; @@ -13186,7 +13186,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/prima2.dtsi linux-imx6-3.14/arch/arm/b arm,tag-latency = <1 1 1>; diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,159 @@ +/* + * ARM Ltd. Fast Models @@ -13349,7 +13349,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x1.dts linux-imx6-3. +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,165 @@ +/* + * ARM Ltd. Fast Models @@ -13518,7 +13518,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x2.dts linux-imx6-3. +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,177 @@ +/* + * ARM Ltd. Fast Models @@ -13699,7 +13699,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a15x4.dts linux-imx6-3. +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,171 @@ +/* + * ARM Ltd. Fast Models @@ -13874,7 +13874,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x2.dts linux-imx6-3.1 +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,183 @@ +/* + * ARM Ltd. Fast Models @@ -14061,7 +14061,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-cortex_a9x4.dts linux-imx6-3.1 +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,231 @@ +/* + * ARM Ltd. Fast Models @@ -14296,7 +14296,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-motherboard.dtsi linux-imx6-3. + }; diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,233 @@ +/* + * ARM Ltd. Fast Models @@ -14533,7 +14533,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x1-ca7x1.dts linux-imx +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts --- linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts 2014-09-09 10:13:47.244941050 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts 2014-09-11 18:05:52.686000742 +0200 @@ -0,0 +1,317 @@ +/* + * ARM Ltd. Fast Models @@ -14854,7 +14854,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/rtsm_ve-v2p-ca15x4-ca7x4.dts linux-imx +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2m.dtsi linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m.dtsi --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2m.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m.dtsi 2014-09-09 10:13:47.264941214 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m.dtsi 2014-09-11 18:05:52.742000967 +0200 @@ -227,6 +227,7 @@ }; @@ -14865,7 +14865,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2m.dtsi linux-imx6-3.14/arch interrupts = <14>; diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi 2014-09-09 10:13:47.264941214 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi 2014-09-11 18:05:52.742000967 +0200 @@ -228,6 +228,7 @@ }; @@ -14876,7 +14876,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi linux-imx6-3.14/ interrupts = <14>; diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts 2014-09-11 18:05:52.742000967 +0200 @@ -9,6 +9,8 @@ /dts-v1/; @@ -15074,7 +15074,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts linux-imx6-3. arm,vexpress,config-bridge = <&v2m_sysreg>; diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts 2014-09-09 10:13:47.264941214 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts 2014-09-11 18:05:52.742000967 +0200 @@ -9,6 +9,8 @@ /dts-v1/; @@ -15095,7 +15095,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts linux-imx6-3 memory-controller@2b0a0000 { diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca5s.dts linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca5s.dts --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca5s.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca5s.dts 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca5s.dts 2014-09-11 18:05:52.742000967 +0200 @@ -9,6 +9,8 @@ /dts-v1/; @@ -15116,7 +15116,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca5s.dts linux-imx6-3.14/ memory-controller@2a150000 { diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca9.dts linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca9.dts --- linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca9.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca9.dts 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vexpress-v2p-ca9.dts 2014-09-11 18:05:52.746000984 +0200 @@ -9,6 +9,8 @@ /dts-v1/; @@ -15137,7 +15137,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vexpress-v2p-ca9.dts linux-imx6-3.14/a memory-controller@100e0000 { diff -Nur linux-3.14.17/arch/arm/boot/dts/vf610.dtsi linux-imx6-3.14/arch/arm/boot/dts/vf610.dtsi --- linux-3.14.17/arch/arm/boot/dts/vf610.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vf610.dtsi 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vf610.dtsi 2014-09-11 18:05:52.746000984 +0200 @@ -44,11 +44,13 @@ sxosc { @@ -15154,7 +15154,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vf610.dtsi linux-imx6-3.14/arch/arm/bo }; diff -Nur linux-3.14.17/arch/arm/boot/dts/vf610-twr.dts linux-imx6-3.14/arch/arm/boot/dts/vf610-twr.dts --- linux-3.14.17/arch/arm/boot/dts/vf610-twr.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/boot/dts/vf610-twr.dts 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/boot/dts/vf610-twr.dts 2014-09-11 18:05:52.746000984 +0200 @@ -25,11 +25,13 @@ clocks { audio_ext { @@ -15171,7 +15171,7 @@ diff -Nur linux-3.14.17/arch/arm/boot/dts/vf610-twr.dts linux-imx6-3.14/arch/arm }; diff -Nur linux-3.14.17/arch/arm/common/Makefile linux-imx6-3.14/arch/arm/common/Makefile --- linux-3.14.17/arch/arm/common/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/common/Makefile 2014-09-09 10:13:47.268941247 +0200 ++++ linux-imx6-3.14/arch/arm/common/Makefile 2014-09-11 18:05:52.754001015 +0200 @@ -13,6 +13,7 @@ obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o @@ -15182,7 +15182,7 @@ diff -Nur linux-3.14.17/arch/arm/common/Makefile linux-imx6-3.14/arch/arm/common obj-$(CONFIG_TI_PRIV_EDMA) += edma.o diff -Nur linux-3.14.17/arch/arm/configs/imx_v6_v7_defconfig linux-imx6-3.14/arch/arm/configs/imx_v6_v7_defconfig --- linux-3.14.17/arch/arm/configs/imx_v6_v7_defconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/configs/imx_v6_v7_defconfig 2014-09-09 10:13:47.280941344 +0200 ++++ linux-imx6-3.14/arch/arm/configs/imx_v6_v7_defconfig 2014-09-11 18:05:52.798001191 +0200 @@ -45,6 +45,9 @@ CONFIG_AEABI=y CONFIG_HIGHMEM=y @@ -15299,7 +15299,7 @@ diff -Nur linux-3.14.17/arch/arm/configs/imx_v6_v7_defconfig linux-imx6-3.14/arc CONFIG_PWM=y diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_base_defconfig linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_base_defconfig --- linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_base_defconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_base_defconfig 2014-09-09 10:13:47.280941344 +0200 ++++ linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_base_defconfig 2014-09-11 18:05:52.798001191 +0200 @@ -0,0 +1,367 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_LZO=y @@ -15670,7 +15670,7 @@ diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_base_defconfig linux-imx6 +CONFIG_IR_GPIO_CIR=m diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_defconfig linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_defconfig --- linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_defconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_defconfig 2014-09-09 10:13:47.280941344 +0200 ++++ linux-imx6-3.14/arch/arm/configs/imx_v7_cbi_hb_defconfig 2014-09-11 18:05:52.798001191 +0200 @@ -0,0 +1,5138 @@ +# +# Automatically generated make config: don't edit @@ -20812,7 +20812,7 @@ diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_cbi_hb_defconfig linux-imx6-3.14 + diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_defconfig linux-imx6-3.14/arch/arm/configs/imx_v7_defconfig --- linux-3.14.17/arch/arm/configs/imx_v7_defconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/configs/imx_v7_defconfig 2014-09-09 10:13:47.280941344 +0200 ++++ linux-imx6-3.14/arch/arm/configs/imx_v7_defconfig 2014-09-11 18:05:52.798001191 +0200 @@ -0,0 +1,343 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_KERNEL_LZO=y @@ -21159,7 +21159,7 @@ diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_defconfig linux-imx6-3.14/arch/a +CONFIG_LIBCRC32C=m diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_mfg_defconfig linux-imx6-3.14/arch/arm/configs/imx_v7_mfg_defconfig --- linux-3.14.17/arch/arm/configs/imx_v7_mfg_defconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/configs/imx_v7_mfg_defconfig 2014-09-09 10:13:47.280941344 +0200 ++++ linux-imx6-3.14/arch/arm/configs/imx_v7_mfg_defconfig 2014-09-11 18:05:52.798001191 +0200 @@ -0,0 +1,341 @@ +CONFIG_KERNEL_LZO=y +CONFIG_SYSVIPC=y @@ -21504,7 +21504,7 @@ diff -Nur linux-3.14.17/arch/arm/configs/imx_v7_mfg_defconfig linux-imx6-3.14/ar +CONFIG_LIBCRC32C=m diff -Nur linux-3.14.17/arch/arm/crypto/aesbs-glue.c linux-imx6-3.14/arch/arm/crypto/aesbs-glue.c --- linux-3.14.17/arch/arm/crypto/aesbs-glue.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/crypto/aesbs-glue.c 2014-09-09 10:13:47.292941443 +0200 ++++ linux-imx6-3.14/arch/arm/crypto/aesbs-glue.c 2014-09-11 18:05:52.806001223 +0200 @@ -137,7 +137,7 @@ dst += AES_BLOCK_SIZE; } while (--blocks); @@ -21552,7 +21552,7 @@ diff -Nur linux-3.14.17/arch/arm/crypto/aesbs-glue.c linux-imx6-3.14/arch/arm/cr } diff -Nur linux-3.14.17/arch/arm/include/asm/arch_timer.h linux-imx6-3.14/arch/arm/include/asm/arch_timer.h --- linux-3.14.17/arch/arm/include/asm/arch_timer.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/arch_timer.h 2014-09-09 10:13:47.292941443 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/arch_timer.h 2014-09-11 18:05:52.810001239 +0200 @@ -107,7 +107,6 @@ /* Also disable virtual event stream */ cntkctl &= ~(ARCH_TIMER_USR_PT_ACCESS_EN @@ -21563,7 +21563,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/arch_timer.h linux-imx6-3.14/arch/a arch_timer_set_cntkctl(cntkctl); diff -Nur linux-3.14.17/arch/arm/include/asm/atomic.h linux-imx6-3.14/arch/arm/include/asm/atomic.h --- linux-3.14.17/arch/arm/include/asm/atomic.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/atomic.h 2014-09-09 10:13:47.292941443 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/atomic.h 2014-09-11 18:05:52.810001239 +0200 @@ -60,6 +60,7 @@ int result; @@ -21694,7 +21694,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/atomic.h linux-imx6-3.14/arch/arm/i "1: ldrexd %0, %H0, [%4]\n" diff -Nur linux-3.14.17/arch/arm/include/asm/cmpxchg.h linux-imx6-3.14/arch/arm/include/asm/cmpxchg.h --- linux-3.14.17/arch/arm/include/asm/cmpxchg.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/cmpxchg.h 2014-09-09 10:13:47.292941443 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/cmpxchg.h 2014-09-11 18:05:52.810001239 +0200 @@ -2,6 +2,7 @@ #define __ASM_ARM_CMPXCHG_H @@ -21731,7 +21731,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/cmpxchg.h linux-imx6-3.14/arch/arm/ " teq %1, %4\n" diff -Nur linux-3.14.17/arch/arm/include/asm/ftrace.h linux-imx6-3.14/arch/arm/include/asm/ftrace.h --- linux-3.14.17/arch/arm/include/asm/ftrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/ftrace.h 2014-09-09 10:13:47.296941475 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/ftrace.h 2014-09-11 18:05:52.810001239 +0200 @@ -52,15 +52,7 @@ #endif @@ -21751,7 +21751,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/ftrace.h linux-imx6-3.14/arch/arm/i diff -Nur linux-3.14.17/arch/arm/include/asm/futex.h linux-imx6-3.14/arch/arm/include/asm/futex.h --- linux-3.14.17/arch/arm/include/asm/futex.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/futex.h 2014-09-09 10:13:47.296941475 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/futex.h 2014-09-11 18:05:52.810001239 +0200 @@ -23,6 +23,7 @@ #define __futex_atomic_op(insn, ret, oldval, tmp, uaddr, oparg) \ @@ -21771,7 +21771,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/futex.h linux-imx6-3.14/arch/arm/in " teq %1, %2\n" diff -Nur linux-3.14.17/arch/arm/include/asm/glue-cache.h linux-imx6-3.14/arch/arm/include/asm/glue-cache.h --- linux-3.14.17/arch/arm/include/asm/glue-cache.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/glue-cache.h 2014-09-09 10:13:47.296941475 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/glue-cache.h 2014-09-11 18:05:52.810001239 +0200 @@ -102,19 +102,19 @@ #endif @@ -21802,7 +21802,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/glue-cache.h linux-imx6-3.14/arch/a #if defined(CONFIG_CPU_V7M) diff -Nur linux-3.14.17/arch/arm/include/asm/hardware/cache-l2x0.h linux-imx6-3.14/arch/arm/include/asm/hardware/cache-l2x0.h --- linux-3.14.17/arch/arm/include/asm/hardware/cache-l2x0.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/hardware/cache-l2x0.h 2014-09-09 10:13:47.296941475 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/hardware/cache-l2x0.h 2014-09-11 18:05:52.814001255 +0200 @@ -26,8 +26,8 @@ #define L2X0_CACHE_TYPE 0x004 #define L2X0_CTRL 0x100 @@ -21943,7 +21943,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/hardware/cache-l2x0.h linux-imx6-3. diff -Nur linux-3.14.17/arch/arm/include/asm/outercache.h linux-imx6-3.14/arch/arm/include/asm/outercache.h --- linux-3.14.17/arch/arm/include/asm/outercache.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/outercache.h 2014-09-09 10:13:47.300941507 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/outercache.h 2014-09-11 18:05:52.898001590 +0200 @@ -21,6 +21,7 @@ #ifndef __ASM_OUTERCACHE_H #define __ASM_OUTERCACHE_H @@ -22074,7 +22074,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/outercache.h linux-imx6-3.14/arch/a if (outer_cache.sync) diff -Nur linux-3.14.17/arch/arm/include/asm/pmu.h linux-imx6-3.14/arch/arm/include/asm/pmu.h --- linux-3.14.17/arch/arm/include/asm/pmu.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/pmu.h 2014-09-09 10:13:47.300941507 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/pmu.h 2014-09-11 18:05:52.902001607 +0200 @@ -62,9 +62,19 @@ raw_spinlock_t pmu_lock; }; @@ -22106,7 +22106,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/pmu.h linux-imx6-3.14/arch/arm/incl struct mutex reserve_mutex; diff -Nur linux-3.14.17/arch/arm/include/asm/psci.h linux-imx6-3.14/arch/arm/include/asm/psci.h --- linux-3.14.17/arch/arm/include/asm/psci.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/psci.h 2014-09-09 10:13:47.300941507 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/psci.h 2014-09-11 18:05:52.902001607 +0200 @@ -16,6 +16,10 @@ #define PSCI_POWER_STATE_TYPE_STANDBY 0 @@ -22133,7 +22133,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/psci.h linux-imx6-3.14/arch/arm/inc #endif /* __ASM_ARM_PSCI_H */ diff -Nur linux-3.14.17/arch/arm/include/asm/topology.h linux-imx6-3.14/arch/arm/include/asm/topology.h --- linux-3.14.17/arch/arm/include/asm/topology.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/include/asm/topology.h 2014-09-09 10:13:47.304941540 +0200 ++++ linux-imx6-3.14/arch/arm/include/asm/topology.h 2014-09-11 18:05:52.906001623 +0200 @@ -26,11 +26,14 @@ void init_cpu_topology(void); void store_cpu_topology(unsigned int cpuid); @@ -22151,7 +22151,7 @@ diff -Nur linux-3.14.17/arch/arm/include/asm/topology.h linux-imx6-3.14/arch/arm diff -Nur linux-3.14.17/arch/arm/Kconfig linux-imx6-3.14/arch/arm/Kconfig --- linux-3.14.17/arch/arm/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/Kconfig 2014-09-09 10:13:47.188940594 +0200 ++++ linux-imx6-3.14/arch/arm/Kconfig 2014-09-11 18:05:52.578000311 +0200 @@ -1216,19 +1216,6 @@ register of the Cortex-A9 which reduces the linefill issuing capabilities of the processor. @@ -22271,7 +22271,7 @@ diff -Nur linux-3.14.17/arch/arm/Kconfig linux-imx6-3.14/arch/arm/Kconfig The kernel memory allocator divides physically contiguous memory diff -Nur linux-3.14.17/arch/arm/kernel/perf_event.c linux-imx6-3.14/arch/arm/kernel/perf_event.c --- linux-3.14.17/arch/arm/kernel/perf_event.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/perf_event.c 2014-09-09 10:13:47.312941606 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/perf_event.c 2014-09-11 18:05:52.950001797 +0200 @@ -12,6 +12,7 @@ */ #define pr_fmt(fmt) "hw perfevents: " fmt @@ -22342,7 +22342,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/perf_event.c linux-imx6-3.14/arch/arm/ke return -EOPNOTSUPP; diff -Nur linux-3.14.17/arch/arm/kernel/perf_event_cpu.c linux-imx6-3.14/arch/arm/kernel/perf_event_cpu.c --- linux-3.14.17/arch/arm/kernel/perf_event_cpu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/perf_event_cpu.c 2014-09-09 10:13:47.312941606 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/perf_event_cpu.c 2014-09-11 18:05:52.950001797 +0200 @@ -19,6 +19,7 @@ #define pr_fmt(fmt) "CPU PMU: " fmt @@ -22608,7 +22608,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/perf_event_cpu.c linux-imx6-3.14/arch/ar } diff -Nur linux-3.14.17/arch/arm/kernel/perf_event_v7.c linux-imx6-3.14/arch/arm/kernel/perf_event_v7.c --- linux-3.14.17/arch/arm/kernel/perf_event_v7.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/perf_event_v7.c 2014-09-09 10:13:47.312941606 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/perf_event_v7.c 2014-09-11 18:05:52.950001797 +0200 @@ -950,6 +950,51 @@ } #endif @@ -22717,7 +22717,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/perf_event_v7.c linux-imx6-3.14/arch/arm cpu_pmu->set_event_filter = armv7pmu_set_event_filter; diff -Nur linux-3.14.17/arch/arm/kernel/process.c linux-imx6-3.14/arch/arm/kernel/process.c --- linux-3.14.17/arch/arm/kernel/process.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/process.c 2014-09-09 10:13:47.312941606 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/process.c 2014-09-11 18:05:52.950001797 +0200 @@ -172,8 +172,10 @@ */ void arch_cpu_idle(void) @@ -22731,7 +22731,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/process.c linux-imx6-3.14/arch/arm/kerne /* diff -Nur linux-3.14.17/arch/arm/kernel/psci.c linux-imx6-3.14/arch/arm/kernel/psci.c --- linux-3.14.17/arch/arm/kernel/psci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/psci.c 2014-09-09 10:13:47.312941606 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/psci.c 2014-09-11 18:05:52.950001797 +0200 @@ -42,6 +42,7 @@ #define PSCI_RET_EOPNOTSUPP -1 #define PSCI_RET_EINVAL -2 @@ -22777,7 +22777,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/psci.c linux-imx6-3.14/arch/arm/kernel/p +} diff -Nur linux-3.14.17/arch/arm/kernel/setup.c linux-imx6-3.14/arch/arm/kernel/setup.c --- linux-3.14.17/arch/arm/kernel/setup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/setup.c 2014-09-09 10:13:47.316941638 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/setup.c 2014-09-11 18:05:52.950001797 +0200 @@ -273,6 +273,19 @@ int aliasing_icache; unsigned int id_reg, num_sets, line_size; @@ -22800,7 +22800,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/setup.c linux-imx6-3.14/arch/arm/kernel/ return 0; diff -Nur linux-3.14.17/arch/arm/kernel/topology.c linux-imx6-3.14/arch/arm/kernel/topology.c --- linux-3.14.17/arch/arm/kernel/topology.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/kernel/topology.c 2014-09-09 10:13:47.316941638 +0200 ++++ linux-imx6-3.14/arch/arm/kernel/topology.c 2014-09-11 18:05:52.970001878 +0200 @@ -267,6 +267,33 @@ } @@ -22837,7 +22837,7 @@ diff -Nur linux-3.14.17/arch/arm/kernel/topology.c linux-imx6-3.14/arch/arm/kern */ diff -Nur linux-3.14.17/arch/arm/lib/bitops.h linux-imx6-3.14/arch/arm/lib/bitops.h --- linux-3.14.17/arch/arm/lib/bitops.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/lib/bitops.h 2014-09-09 10:13:47.320941670 +0200 ++++ linux-imx6-3.14/arch/arm/lib/bitops.h 2014-09-11 18:05:52.978001911 +0200 @@ -37,6 +37,11 @@ add r1, r1, r0, lsl #2 @ Get word offset mov r3, r2, lsl r3 @ create mask @@ -22852,7 +22852,7 @@ diff -Nur linux-3.14.17/arch/arm/lib/bitops.h linux-imx6-3.14/arch/arm/lib/bitop \instr r2, r2, r3 @ toggle bit diff -Nur linux-3.14.17/arch/arm/mach-berlin/berlin.c linux-imx6-3.14/arch/arm/mach-berlin/berlin.c --- linux-3.14.17/arch/arm/mach-berlin/berlin.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-berlin/berlin.c 2014-09-09 10:13:47.332941769 +0200 ++++ linux-imx6-3.14/arch/arm/mach-berlin/berlin.c 2014-09-11 18:05:53.170002677 +0200 @@ -24,7 +24,7 @@ * with DT probing for L2CCs, berlin_init_machine can be removed. * Note: 88DE3005 (Armada 1500-mini) uses pl310 l2cc @@ -22864,7 +22864,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-berlin/berlin.c linux-imx6-3.14/arch/arm/m diff -Nur linux-3.14.17/arch/arm/mach-cns3xxx/core.c linux-imx6-3.14/arch/arm/mach-cns3xxx/core.c --- linux-3.14.17/arch/arm/mach-cns3xxx/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-cns3xxx/core.c 2014-09-09 10:13:47.336941802 +0200 ++++ linux-imx6-3.14/arch/arm/mach-cns3xxx/core.c 2014-09-11 18:05:53.178002711 +0200 @@ -240,9 +240,9 @@ * * 1 cycle of latency for setup, read and write accesses @@ -22895,7 +22895,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-cns3xxx/core.c linux-imx6-3.14/arch/arm/ma #endif /* CONFIG_CACHE_L2X0 */ diff -Nur linux-3.14.17/arch/arm/mach-exynos/common.c linux-imx6-3.14/arch/arm/mach-exynos/common.c --- linux-3.14.17/arch/arm/mach-exynos/common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-exynos/common.c 2014-09-09 10:13:47.344941866 +0200 ++++ linux-imx6-3.14/arch/arm/mach-exynos/common.c 2014-09-11 18:05:53.238002950 +0200 @@ -45,9 +45,6 @@ #include "common.h" #include "regs-pmu.h" @@ -22917,7 +22917,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-exynos/common.c linux-imx6-3.14/arch/arm/m diff -Nur linux-3.14.17/arch/arm/mach-highbank/highbank.c linux-imx6-3.14/arch/arm/mach-highbank/highbank.c --- linux-3.14.17/arch/arm/mach-highbank/highbank.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-highbank/highbank.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-highbank/highbank.c 2014-09-11 18:05:53.274003094 +0200 @@ -20,7 +20,7 @@ #include <linux/input.h> #include <linux/io.h> @@ -22962,7 +22962,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-highbank/highbank.c linux-imx6-3.14/arch/a diff -Nur linux-3.14.17/arch/arm/mach-imx/anatop.c linux-imx6-3.14/arch/arm/mach-imx/anatop.c --- linux-3.14.17/arch/arm/mach-imx/anatop.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/anatop.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/anatop.c 2014-09-11 18:05:53.278003110 +0200 @@ -9,6 +9,7 @@ * http://www.gnu.org/copyleft/gpl.html */ @@ -23029,7 +23029,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/anatop.c linux-imx6-3.14/arch/arm/mach } diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq_ddr3.c linux-imx6-3.14/arch/arm/mach-imx/busfreq_ddr3.c --- linux-3.14.17/arch/arm/mach-imx/busfreq_ddr3.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/busfreq_ddr3.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/busfreq_ddr3.c 2014-09-11 18:05:53.278003110 +0200 @@ -0,0 +1,471 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -23504,7 +23504,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq_ddr3.c linux-imx6-3.14/arch/ar +} diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq-imx6.c linux-imx6-3.14/arch/arm/mach-imx/busfreq-imx6.c --- linux-3.14.17/arch/arm/mach-imx/busfreq-imx6.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/busfreq-imx6.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/busfreq-imx6.c 2014-09-11 18:05:53.278003110 +0200 @@ -0,0 +1,952 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -24460,7 +24460,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq-imx6.c linux-imx6-3.14/arch/ar +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq_lpddr2.c linux-imx6-3.14/arch/arm/mach-imx/busfreq_lpddr2.c --- linux-3.14.17/arch/arm/mach-imx/busfreq_lpddr2.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/busfreq_lpddr2.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/busfreq_lpddr2.c 2014-09-11 18:05:53.278003110 +0200 @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -24647,7 +24647,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/busfreq_lpddr2.c linux-imx6-3.14/arch/ +} diff -Nur linux-3.14.17/arch/arm/mach-imx/clk.h linux-imx6-3.14/arch/arm/mach-imx/clk.h --- linux-3.14.17/arch/arm/mach-imx/clk.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/clk.h 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/clk.h 2014-09-11 18:05:53.302003205 +0200 @@ -23,7 +23,8 @@ }; @@ -24660,7 +24660,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/clk.h linux-imx6-3.14/arch/arm/mach-im const char *parent_name, unsigned long flags, diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-imx6q.c linux-imx6-3.14/arch/arm/mach-imx/clk-imx6q.c --- linux-3.14.17/arch/arm/mach-imx/clk-imx6q.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/clk-imx6q.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/clk-imx6q.c 2014-09-11 18:05:53.278003110 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 Freescale Semiconductor, Inc. @@ -25172,7 +25172,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-imx6q.c linux-imx6-3.14/arch/arm/m diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-imx6sl.c linux-imx6-3.14/arch/arm/mach-imx/clk-imx6sl.c --- linux-3.14.17/arch/arm/mach-imx/clk-imx6sl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/clk-imx6sl.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/clk-imx6sl.c 2014-09-11 18:05:53.278003110 +0200 @@ -7,9 +7,29 @@ * */ @@ -25496,7 +25496,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-imx6sl.c linux-imx6-3.14/arch/arm/ WARN_ON(!base); diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-pfd.c linux-imx6-3.14/arch/arm/mach-imx/clk-pfd.c --- linux-3.14.17/arch/arm/mach-imx/clk-pfd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/clk-pfd.c 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/clk-pfd.c 2014-09-11 18:05:53.282003126 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012 Freescale Semiconductor, Inc. @@ -25577,7 +25577,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-pfd.c linux-imx6-3.14/arch/arm/mac frac = tmp; diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-pllv3.c linux-imx6-3.14/arch/arm/mach-imx/clk-pllv3.c --- linux-3.14.17/arch/arm/mach-imx/clk-pllv3.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/clk-pllv3.c 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/clk-pllv3.c 2014-09-11 18:05:53.302003205 +0200 @@ -26,12 +26,15 @@ #define BM_PLL_ENABLE (0x1 << 13) #define BM_PLL_BYPASS (0x1 << 16) @@ -25948,7 +25948,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/clk-pllv3.c linux-imx6-3.14/arch/arm/m init.ops = ops; diff -Nur linux-3.14.17/arch/arm/mach-imx/common.h linux-imx6-3.14/arch/arm/mach-imx/common.h --- linux-3.14.17/arch/arm/mach-imx/common.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/common.h 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/common.h 2014-09-11 18:05:53.302003205 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -26005,7 +26005,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/common.h linux-imx6-3.14/arch/arm/mach #else diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle.h linux-imx6-3.14/arch/arm/mach-imx/cpuidle.h --- linux-3.14.17/arch/arm/mach-imx/cpuidle.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle.h 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle.h 2014-09-11 18:05:53.306003222 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012 Freescale Semiconductor, Inc. @@ -26032,7 +26032,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle.h linux-imx6-3.14/arch/arm/mac #endif diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6q.c linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6q.c --- linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6q.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6q.c 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6q.c 2014-09-11 18:05:53.302003205 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Freescale Semiconductor, Inc. @@ -26053,7 +26053,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6q.c linux-imx6-3.14/arch/a } diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6sl.c linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6sl.c --- linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6sl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6sl.c 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/cpuidle-imx6sl.c 2014-09-11 18:05:53.306003222 +0200 @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. @@ -26206,7 +26206,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/cpuidle-imx6sl.c linux-imx6-3.14/arch/ +} diff -Nur linux-3.14.17/arch/arm/mach-imx/ddr3_freq_imx6.S linux-imx6-3.14/arch/arm/mach-imx/ddr3_freq_imx6.S --- linux-3.14.17/arch/arm/mach-imx/ddr3_freq_imx6.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/ddr3_freq_imx6.S 2014-09-09 10:13:47.356941965 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/ddr3_freq_imx6.S 2014-09-11 18:05:53.306003222 +0200 @@ -0,0 +1,893 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -27103,7 +27103,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/ddr3_freq_imx6.S linux-imx6-3.14/arch/ + .size mx6_ddr3_freq_change, . - mx6_ddr3_freq_change diff -Nur linux-3.14.17/arch/arm/mach-imx/gpc.c linux-imx6-3.14/arch/arm/mach-imx/gpc.c --- linux-3.14.17/arch/arm/mach-imx/gpc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/gpc.c 2014-09-09 10:13:47.360941996 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/gpc.c 2014-09-11 18:05:53.346003382 +0200 @@ -10,30 +10,69 @@ * http://www.gnu.org/copyleft/gpl.html */ @@ -27490,7 +27490,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/gpc.c linux-imx6-3.14/arch/arm/mach-im +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/arch/arm/mach-imx/hardware.h linux-imx6-3.14/arch/arm/mach-imx/hardware.h --- linux-3.14.17/arch/arm/mach-imx/hardware.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/hardware.h 2014-09-09 10:13:47.360941996 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/hardware.h 2014-09-11 18:05:53.346003382 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. @@ -27510,7 +27510,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/hardware.h linux-imx6-3.14/arch/arm/ma #define addr_in_module(addr, mod) \ diff -Nur linux-3.14.17/arch/arm/mach-imx/headsmp.S linux-imx6-3.14/arch/arm/mach-imx/headsmp.S --- linux-3.14.17/arch/arm/mach-imx/headsmp.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/headsmp.S 2014-09-09 10:13:47.360941996 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/headsmp.S 2014-09-11 18:05:53.346003382 +0200 @@ -12,8 +12,6 @@ #include <linux/linkage.h> @@ -27560,7 +27560,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/headsmp.S linux-imx6-3.14/arch/arm/mac -#endif diff -Nur linux-3.14.17/arch/arm/mach-imx/imx6sl_wfi.S linux-imx6-3.14/arch/arm/mach-imx/imx6sl_wfi.S --- linux-3.14.17/arch/arm/mach-imx/imx6sl_wfi.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/imx6sl_wfi.S 2014-09-09 10:13:47.360941996 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/imx6sl_wfi.S 2014-09-11 18:05:53.346003382 +0200 @@ -0,0 +1,639 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -28203,7 +28203,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/imx6sl_wfi.S linux-imx6-3.14/arch/arm/ + mov pc, lr diff -Nur linux-3.14.17/arch/arm/mach-imx/Kconfig linux-imx6-3.14/arch/arm/mach-imx/Kconfig --- linux-3.14.17/arch/arm/mach-imx/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/Kconfig 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/Kconfig 2014-09-11 18:05:53.278003110 +0200 @@ -1,5 +1,6 @@ config ARCH_MXC bool "Freescale i.MX family" if ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 @@ -28252,7 +28252,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/Kconfig linux-imx6-3.14/arch/arm/mach- This enables support for Freescale i.MX6 Quad processor. diff -Nur linux-3.14.17/arch/arm/mach-imx/lpddr2_freq_imx6.S linux-imx6-3.14/arch/arm/mach-imx/lpddr2_freq_imx6.S --- linux-3.14.17/arch/arm/mach-imx/lpddr2_freq_imx6.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/lpddr2_freq_imx6.S 2014-09-09 10:13:47.360941996 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/lpddr2_freq_imx6.S 2014-09-11 18:05:53.378003511 +0200 @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -28740,7 +28740,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/lpddr2_freq_imx6.S linux-imx6-3.14/arc + .size mx6_lpddr2_freq_change, . - mx6_lpddr2_freq_change diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-imx6q.c linux-imx6-3.14/arch/arm/mach-imx/mach-imx6q.c --- linux-3.14.17/arch/arm/mach-imx/mach-imx6q.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/mach-imx6q.c 2014-09-09 10:13:47.364942029 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/mach-imx6q.c 2014-09-11 18:05:53.382003527 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 Freescale Semiconductor, Inc. @@ -29030,7 +29030,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-imx6q.c linux-imx6-3.14/arch/arm/ .init_irq = imx6q_init_irq, diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-imx6sl.c linux-imx6-3.14/arch/arm/mach-imx/mach-imx6sl.c --- linux-3.14.17/arch/arm/mach-imx/mach-imx6sl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/mach-imx6sl.c 2014-09-09 10:13:47.364942029 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/mach-imx6sl.c 2014-09-11 18:05:53.382003527 +0200 @@ -17,8 +17,9 @@ #include <asm/mach/map.h> @@ -29072,7 +29072,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-imx6sl.c linux-imx6-3.14/arch/arm static void __init imx6sl_init_irq(void) diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-vf610.c linux-imx6-3.14/arch/arm/mach-imx/mach-vf610.c --- linux-3.14.17/arch/arm/mach-imx/mach-vf610.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/mach-vf610.c 2014-09-09 10:13:47.408942389 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/mach-vf610.c 2014-09-11 18:05:53.386003542 +0200 @@ -22,7 +22,7 @@ static void __init vf610_init_irq(void) @@ -29084,7 +29084,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/mach-vf610.c linux-imx6-3.14/arch/arm/ diff -Nur linux-3.14.17/arch/arm/mach-imx/Makefile linux-imx6-3.14/arch/arm/mach-imx/Makefile --- linux-3.14.17/arch/arm/mach-imx/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/Makefile 2014-09-09 10:13:47.352941932 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/Makefile 2014-09-11 18:05:53.278003110 +0200 @@ -30,6 +30,7 @@ ifeq ($(CONFIG_CPU_IDLE),y) obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o @@ -29117,7 +29117,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/Makefile linux-imx6-3.14/arch/arm/mach obj-$(CONFIG_MACH_MX51_BABBAGE) += mach-mx51_babbage.o diff -Nur linux-3.14.17/arch/arm/mach-imx/mx6.h linux-imx6-3.14/arch/arm/mach-imx/mx6.h --- linux-3.14.17/arch/arm/mach-imx/mx6.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/mx6.h 2014-09-09 10:13:47.412942422 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/mx6.h 2014-09-11 18:05:53.394003573 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -29156,7 +29156,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/mx6.h linux-imx6-3.14/arch/arm/mach-im +#endif diff -Nur linux-3.14.17/arch/arm/mach-imx/mxc.h linux-imx6-3.14/arch/arm/mach-imx/mxc.h --- linux-3.14.17/arch/arm/mach-imx/mxc.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/mxc.h 2014-09-09 10:13:47.412942422 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/mxc.h 2014-09-11 18:05:53.394003573 +0200 @@ -42,6 +42,8 @@ #define IMX_CHIP_REVISION_1_1 0x11 #define IMX_CHIP_REVISION_1_2 0x12 @@ -29176,7 +29176,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/mxc.h linux-imx6-3.14/arch/arm/mach-im diff -Nur linux-3.14.17/arch/arm/mach-imx/pm-imx6.c linux-imx6-3.14/arch/arm/mach-imx/pm-imx6.c --- linux-3.14.17/arch/arm/mach-imx/pm-imx6.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/pm-imx6.c 2014-09-09 10:13:47.416942453 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/pm-imx6.c 2014-09-11 18:05:53.394003573 +0200 @@ -0,0 +1,580 @@ +/* + * Copyright 2011-2014 Freescale Semiconductor, Inc. @@ -30005,7 +30005,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/pm-imx6q.c linux-imx6-3.14/arch/arm/ma -} diff -Nur linux-3.14.17/arch/arm/mach-imx/suspend-imx6.S linux-imx6-3.14/arch/arm/mach-imx/suspend-imx6.S --- linux-3.14.17/arch/arm/mach-imx/suspend-imx6.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-imx/suspend-imx6.S 2014-09-09 10:13:47.416942453 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/suspend-imx6.S 2014-09-11 18:05:53.394003573 +0200 @@ -0,0 +1,306 @@ +/* + * Copyright 2014 Freescale Semiconductor, Inc. @@ -30315,7 +30315,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/suspend-imx6.S linux-imx6-3.14/arch/ar +ENDPROC(v7_cpu_resume) diff -Nur linux-3.14.17/arch/arm/mach-imx/system.c linux-imx6-3.14/arch/arm/mach-imx/system.c --- linux-3.14.17/arch/arm/mach-imx/system.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/system.c 2014-09-09 10:13:47.416942453 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/system.c 2014-09-11 18:05:53.394003573 +0200 @@ -34,6 +34,7 @@ static void __iomem *wdog_base; @@ -30399,7 +30399,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/system.c linux-imx6-3.14/arch/arm/mach #endif diff -Nur linux-3.14.17/arch/arm/mach-imx/time.c linux-imx6-3.14/arch/arm/mach-imx/time.c --- linux-3.14.17/arch/arm/mach-imx/time.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-imx/time.c 2014-09-09 10:13:47.416942453 +0200 ++++ linux-imx6-3.14/arch/arm/mach-imx/time.c 2014-09-11 18:05:53.394003573 +0200 @@ -60,7 +60,11 @@ #define V2_TCTL_WAITEN (1 << 3) /* Wait enable mode */ #define V2_TCTL_CLK_IPG (1 << 6) @@ -30465,7 +30465,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-imx/time.c linux-imx6-3.14/arch/arm/mach-i diff -Nur linux-3.14.17/arch/arm/mach-nomadik/cpu-8815.c linux-imx6-3.14/arch/arm/mach-nomadik/cpu-8815.c --- linux-3.14.17/arch/arm/mach-nomadik/cpu-8815.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-nomadik/cpu-8815.c 2014-09-09 10:13:47.444942683 +0200 ++++ linux-imx6-3.14/arch/arm/mach-nomadik/cpu-8815.c 2014-09-11 18:05:53.698004788 +0200 @@ -147,7 +147,7 @@ { #ifdef CONFIG_CACHE_L2X0 @@ -30477,7 +30477,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-nomadik/cpu-8815.c linux-imx6-3.14/arch/ar } diff -Nur linux-3.14.17/arch/arm/mach-omap2/common.h linux-imx6-3.14/arch/arm/mach-omap2/common.h --- linux-3.14.17/arch/arm/mach-omap2/common.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-omap2/common.h 2014-09-09 10:13:47.464942847 +0200 ++++ linux-imx6-3.14/arch/arm/mach-omap2/common.h 2014-09-11 18:05:53.814005253 +0200 @@ -91,6 +91,7 @@ extern void omap3_secure_sync32k_timer_init(void); extern void omap3_gptimer_timer_init(void); @@ -30488,7 +30488,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-omap2/common.h linux-imx6-3.14/arch/arm/ma void omap2420_init_early(void); diff -Nur linux-3.14.17/arch/arm/mach-omap2/io.c linux-imx6-3.14/arch/arm/mach-omap2/io.c --- linux-3.14.17/arch/arm/mach-omap2/io.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-omap2/io.c 2014-09-09 10:13:47.468942879 +0200 ++++ linux-imx6-3.14/arch/arm/mach-omap2/io.c 2014-09-11 18:05:53.862005446 +0200 @@ -608,6 +608,7 @@ am43xx_clockdomains_init(); am43xx_hwmod_init(); @@ -30507,7 +30507,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-omap2/io.c linux-imx6-3.14/arch/arm/mach-o diff -Nur linux-3.14.17/arch/arm/mach-omap2/Kconfig linux-imx6-3.14/arch/arm/mach-omap2/Kconfig --- linux-3.14.17/arch/arm/mach-omap2/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-omap2/Kconfig 2014-09-09 10:13:47.452942747 +0200 ++++ linux-imx6-3.14/arch/arm/mach-omap2/Kconfig 2014-09-11 18:05:53.730004917 +0200 @@ -78,6 +78,7 @@ select MULTI_IRQ_HANDLER select ARM_GIC @@ -30518,7 +30518,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-omap2/Kconfig linux-imx6-3.14/arch/arm/mac bool "TI DRA7XX" diff -Nur linux-3.14.17/arch/arm/mach-omap2/omap4-common.c linux-imx6-3.14/arch/arm/mach-omap2/omap4-common.c --- linux-3.14.17/arch/arm/mach-omap2/omap4-common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-omap2/omap4-common.c 2014-09-09 10:13:47.468942879 +0200 ++++ linux-imx6-3.14/arch/arm/mach-omap2/omap4-common.c 2014-09-11 18:05:53.870005477 +0200 @@ -166,75 +166,57 @@ return l2cache_base; } @@ -30631,7 +30631,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-omap2/omap4-common.c linux-imx6-3.14/arch/ void __iomem *omap4_get_sar_ram_base(void) diff -Nur linux-3.14.17/arch/arm/mach-omap2/omap-mpuss-lowpower.c linux-imx6-3.14/arch/arm/mach-omap2/omap-mpuss-lowpower.c --- linux-3.14.17/arch/arm/mach-omap2/omap-mpuss-lowpower.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-omap2/omap-mpuss-lowpower.c 2014-09-09 10:13:47.468942879 +0200 ++++ linux-imx6-3.14/arch/arm/mach-omap2/omap-mpuss-lowpower.c 2014-09-11 18:05:53.866005462 +0200 @@ -187,19 +187,15 @@ * in every restore MPUSS OFF path. */ @@ -30660,7 +30660,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-omap2/omap-mpuss-lowpower.c linux-imx6-3.1 diff -Nur linux-3.14.17/arch/arm/mach-prima2/l2x0.c linux-imx6-3.14/arch/arm/mach-prima2/l2x0.c --- linux-3.14.17/arch/arm/mach-prima2/l2x0.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-prima2/l2x0.c 2014-09-09 10:13:47.488943042 +0200 ++++ linux-imx6-3.14/arch/arm/mach-prima2/l2x0.c 2014-09-11 18:05:53.898005589 +0200 @@ -8,43 +8,10 @@ #include <linux/init.h> @@ -30708,7 +30708,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-prima2/l2x0.c linux-imx6-3.14/arch/arm/mac early_initcall(sirfsoc_l2x0_init); diff -Nur linux-3.14.17/arch/arm/mach-prima2/pm.c linux-imx6-3.14/arch/arm/mach-prima2/pm.c --- linux-3.14.17/arch/arm/mach-prima2/pm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-prima2/pm.c 2014-09-09 10:13:47.488943042 +0200 ++++ linux-imx6-3.14/arch/arm/mach-prima2/pm.c 2014-09-11 18:05:53.898005589 +0200 @@ -71,7 +71,6 @@ case PM_SUSPEND_MEM: sirfsoc_pre_suspend_power_off(); @@ -30719,7 +30719,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-prima2/pm.c linux-imx6-3.14/arch/arm/mach- cpu_suspend(0, sirfsoc_finish_suspend); diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_eb.c linux-imx6-3.14/arch/arm/mach-realview/realview_eb.c --- linux-3.14.17/arch/arm/mach-realview/realview_eb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-realview/realview_eb.c 2014-09-09 10:13:47.508943205 +0200 ++++ linux-imx6-3.14/arch/arm/mach-realview/realview_eb.c 2014-09-11 18:05:53.954005813 +0200 @@ -442,8 +442,13 @@ realview_eb11mp_fixup(); @@ -30738,7 +30738,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_eb.c linux-imx6-3.14/arc platform_device_register(&pmu_device); diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pb1176.c linux-imx6-3.14/arch/arm/mach-realview/realview_pb1176.c --- linux-3.14.17/arch/arm/mach-realview/realview_pb1176.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-realview/realview_pb1176.c 2014-09-09 10:13:47.508943205 +0200 ++++ linux-imx6-3.14/arch/arm/mach-realview/realview_pb1176.c 2014-09-11 18:05:53.954005813 +0200 @@ -355,7 +355,13 @@ int i; @@ -30756,7 +30756,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pb1176.c linux-imx6-3.14 diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pb11mp.c linux-imx6-3.14/arch/arm/mach-realview/realview_pb11mp.c --- linux-3.14.17/arch/arm/mach-realview/realview_pb11mp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-realview/realview_pb11mp.c 2014-09-09 10:13:47.508943205 +0200 ++++ linux-imx6-3.14/arch/arm/mach-realview/realview_pb11mp.c 2014-09-11 18:05:53.954005813 +0200 @@ -337,8 +337,13 @@ int i; @@ -30775,7 +30775,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pb11mp.c linux-imx6-3.14 diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pbx.c linux-imx6-3.14/arch/arm/mach-realview/realview_pbx.c --- linux-3.14.17/arch/arm/mach-realview/realview_pbx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-realview/realview_pbx.c 2014-09-09 10:13:47.508943205 +0200 ++++ linux-imx6-3.14/arch/arm/mach-realview/realview_pbx.c 2014-09-11 18:05:53.958005828 +0200 @@ -370,8 +370,8 @@ __io_address(REALVIEW_PBX_TILE_L220_BASE); @@ -30789,7 +30789,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-realview/realview_pbx.c linux-imx6-3.14/ar * Bits: .. 0 0 0 0 1 00 1 0 1 001 0 000 0 .... .... .... */ diff -Nur linux-3.14.17/arch/arm/mach-rockchip/rockchip.c linux-imx6-3.14/arch/arm/mach-rockchip/rockchip.c --- linux-3.14.17/arch/arm/mach-rockchip/rockchip.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-rockchip/rockchip.c 2014-09-09 10:13:47.508943205 +0200 ++++ linux-imx6-3.14/arch/arm/mach-rockchip/rockchip.c 2014-09-11 18:05:53.962005845 +0200 @@ -25,7 +25,7 @@ static void __init rockchip_dt_init(void) @@ -30801,7 +30801,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-rockchip/rockchip.c linux-imx6-3.14/arch/a diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva.c linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva.c --- linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva.c 2014-09-09 10:13:47.532943401 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva.c 2014-09-11 18:05:54.134006532 +0200 @@ -1270,8 +1270,8 @@ @@ -30815,7 +30815,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva.c linux-imx i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices)); diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva-reference.c linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva-reference.c --- linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva-reference.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva-reference.c 2014-09-09 10:13:47.532943401 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/board-armadillo800eva-reference.c 2014-09-11 18:05:54.134006532 +0200 @@ -164,8 +164,8 @@ r8a7740_meram_workaround(); @@ -30829,7 +30829,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-armadillo800eva-reference.c r8a7740_add_standard_devices_dt(); diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g.c linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g.c --- linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g.c 2014-09-09 10:13:47.532943401 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g.c 2014-09-11 18:05:54.138006549 +0200 @@ -878,8 +878,8 @@ gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */ @@ -30843,7 +30843,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g.c linux-imx6-3.14/arc i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices)); diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g-reference.c linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g-reference.c --- linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g-reference.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g-reference.c 2014-09-09 10:13:47.532943401 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/board-kzm9g-reference.c 2014-09-11 18:05:54.138006549 +0200 @@ -36,8 +36,8 @@ sh73a0_add_standard_devices_dt(); @@ -30857,7 +30857,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/board-kzm9g-reference.c linux-imx diff -Nur linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7778.c linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7778.c --- linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7778.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7778.c 2014-09-09 10:13:47.540943466 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7778.c 2014-09-11 18:05:54.142006566 +0200 @@ -298,10 +298,10 @@ void __iomem *base = ioremap_nocache(0xf0100000, 0x1000); if (base) { @@ -30873,7 +30873,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7778.c linux-imx6-3.14/a diff -Nur linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7779.c linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7779.c --- linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7779.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7779.c 2014-09-09 10:13:47.540943466 +0200 ++++ linux-imx6-3.14/arch/arm/mach-shmobile/setup-r8a7779.c 2014-09-11 18:05:54.142006566 +0200 @@ -700,8 +700,8 @@ void __init r8a7779_add_standard_devices(void) { @@ -30887,7 +30887,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-shmobile/setup-r8a7779.c linux-imx6-3.14/a diff -Nur linux-3.14.17/arch/arm/mach-socfpga/socfpga.c linux-imx6-3.14/arch/arm/mach-socfpga/socfpga.c --- linux-3.14.17/arch/arm/mach-socfpga/socfpga.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-socfpga/socfpga.c 2014-09-09 10:13:47.540943466 +0200 ++++ linux-imx6-3.14/arch/arm/mach-socfpga/socfpga.c 2014-09-11 18:05:54.146006581 +0200 @@ -104,7 +104,7 @@ static void __init socfpga_cyclone5_init(void) @@ -30899,7 +30899,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-socfpga/socfpga.c linux-imx6-3.14/arch/arm } diff -Nur linux-3.14.17/arch/arm/mach-spear/platsmp.c linux-imx6-3.14/arch/arm/mach-spear/platsmp.c --- linux-3.14.17/arch/arm/mach-spear/platsmp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-spear/platsmp.c 2014-09-09 10:13:47.540943466 +0200 ++++ linux-imx6-3.14/arch/arm/mach-spear/platsmp.c 2014-09-11 18:05:54.150006596 +0200 @@ -20,6 +20,18 @@ #include <mach/spear.h> #include "generic.h" @@ -30942,7 +30942,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-spear/platsmp.c linux-imx6-3.14/arch/arm/m while (time_before(jiffies, timeout)) { diff -Nur linux-3.14.17/arch/arm/mach-spear/spear13xx.c linux-imx6-3.14/arch/arm/mach-spear/spear13xx.c --- linux-3.14.17/arch/arm/mach-spear/spear13xx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-spear/spear13xx.c 2014-09-09 10:13:47.540943466 +0200 ++++ linux-imx6-3.14/arch/arm/mach-spear/spear13xx.c 2014-09-11 18:05:54.150006596 +0200 @@ -38,15 +38,15 @@ if (!IS_ENABLED(CONFIG_CACHE_L2X0)) return; @@ -30965,7 +30965,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-spear/spear13xx.c linux-imx6-3.14/arch/arm /* diff -Nur linux-3.14.17/arch/arm/mach-sti/board-dt.c linux-imx6-3.14/arch/arm/mach-sti/board-dt.c --- linux-3.14.17/arch/arm/mach-sti/board-dt.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-sti/board-dt.c 2014-09-09 10:13:47.544943499 +0200 ++++ linux-imx6-3.14/arch/arm/mach-sti/board-dt.c 2014-09-11 18:05:54.178006708 +0200 @@ -16,15 +16,9 @@ void __init stih41x_l2x0_init(void) @@ -30987,7 +30987,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-sti/board-dt.c linux-imx6-3.14/arch/arm/ma static void __init stih41x_machine_init(void) diff -Nur linux-3.14.17/arch/arm/mach-tegra/pm.h linux-imx6-3.14/arch/arm/mach-tegra/pm.h --- linux-3.14.17/arch/arm/mach-tegra/pm.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-tegra/pm.h 2014-09-09 10:13:47.544943499 +0200 ++++ linux-imx6-3.14/arch/arm/mach-tegra/pm.h 2014-09-11 18:05:54.206006821 +0200 @@ -35,8 +35,6 @@ void tegra30_lp1_iram_hook(void); void tegra30_sleep_core_init(void); @@ -30999,7 +30999,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-tegra/pm.h linux-imx6-3.14/arch/arm/mach-t diff -Nur linux-3.14.17/arch/arm/mach-tegra/reset-handler.S linux-imx6-3.14/arch/arm/mach-tegra/reset-handler.S --- linux-3.14.17/arch/arm/mach-tegra/reset-handler.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-tegra/reset-handler.S 2014-09-09 10:13:47.544943499 +0200 ++++ linux-imx6-3.14/arch/arm/mach-tegra/reset-handler.S 2014-09-11 18:05:54.206006821 +0200 @@ -19,7 +19,6 @@ #include <asm/cache.h> @@ -31035,7 +31035,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-tegra/reset-handler.S linux-imx6-3.14/arch diff -Nur linux-3.14.17/arch/arm/mach-tegra/sleep.h linux-imx6-3.14/arch/arm/mach-tegra/sleep.h --- linux-3.14.17/arch/arm/mach-tegra/sleep.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-tegra/sleep.h 2014-09-09 10:13:47.548943532 +0200 ++++ linux-imx6-3.14/arch/arm/mach-tegra/sleep.h 2014-09-11 18:05:54.218006868 +0200 @@ -120,37 +120,6 @@ mov \tmp1, \tmp1, lsr #8 .endm @@ -31076,7 +31076,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-tegra/sleep.h linux-imx6-3.14/arch/arm/mac void tegra_pen_unlock(void); diff -Nur linux-3.14.17/arch/arm/mach-tegra/tegra.c linux-imx6-3.14/arch/arm/mach-tegra/tegra.c --- linux-3.14.17/arch/arm/mach-tegra/tegra.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-tegra/tegra.c 2014-09-09 10:13:47.548943532 +0200 ++++ linux-imx6-3.14/arch/arm/mach-tegra/tegra.c 2014-09-11 18:05:54.218006868 +0200 @@ -73,27 +73,7 @@ static void __init tegra_init_cache(void) { @@ -31108,7 +31108,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-tegra/tegra.c linux-imx6-3.14/arch/arm/mac diff -Nur linux-3.14.17/arch/arm/mach-ux500/board-mop500-audio.c linux-imx6-3.14/arch/arm/mach-ux500/board-mop500-audio.c --- linux-3.14.17/arch/arm/mach-ux500/board-mop500-audio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-ux500/board-mop500-audio.c 2014-09-09 10:13:47.548943532 +0200 ++++ linux-imx6-3.14/arch/arm/mach-ux500/board-mop500-audio.c 2014-09-11 18:05:54.230006916 +0200 @@ -9,7 +9,6 @@ #include <linux/gpio.h> #include <linux/platform_data/dma-ste-dma40.h> @@ -31119,7 +31119,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-ux500/board-mop500-audio.c linux-imx6-3.14 #include "ste-dma40-db8500.h" diff -Nur linux-3.14.17/arch/arm/mach-ux500/cache-l2x0.c linux-imx6-3.14/arch/arm/mach-ux500/cache-l2x0.c --- linux-3.14.17/arch/arm/mach-ux500/cache-l2x0.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-ux500/cache-l2x0.c 2014-09-09 10:13:47.548943532 +0200 ++++ linux-imx6-3.14/arch/arm/mach-ux500/cache-l2x0.c 2014-09-11 18:05:54.230006916 +0200 @@ -35,10 +35,16 @@ return 0; } @@ -31173,7 +31173,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-ux500/cache-l2x0.c linux-imx6-3.14/arch/ar } diff -Nur linux-3.14.17/arch/arm/mach-ux500/cpu-db8500.c linux-imx6-3.14/arch/arm/mach-ux500/cpu-db8500.c --- linux-3.14.17/arch/arm/mach-ux500/cpu-db8500.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-ux500/cpu-db8500.c 2014-09-09 10:13:47.548943532 +0200 ++++ linux-imx6-3.14/arch/arm/mach-ux500/cpu-db8500.c 2014-09-11 18:05:54.230006916 +0200 @@ -27,7 +27,6 @@ #include <asm/mach/map.h> @@ -31440,7 +31440,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-ux500/irqs.h linux-imx6-3.14/arch/arm/mach -#endif /* ASM_ARCH_IRQS_H */ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/ct-ca9x4.c linux-imx6-3.14/arch/arm/mach-vexpress/ct-ca9x4.c --- linux-3.14.17/arch/arm/mach-vexpress/ct-ca9x4.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/ct-ca9x4.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/ct-ca9x4.c 2014-09-11 18:05:54.266007061 +0200 @@ -45,6 +45,23 @@ iotable_init(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc)); } @@ -31492,7 +31492,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/ct-ca9x4.c linux-imx6-3.14/arch/a diff -Nur linux-3.14.17/arch/arm/mach-vexpress/dcscb.c linux-imx6-3.14/arch/arm/mach-vexpress/dcscb.c --- linux-3.14.17/arch/arm/mach-vexpress/dcscb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/dcscb.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/dcscb.c 2014-09-11 18:05:54.266007061 +0200 @@ -23,6 +23,7 @@ #include <asm/cacheflush.h> #include <asm/cputype.h> @@ -31516,7 +31516,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/dcscb.c linux-imx6-3.14/arch/arm/ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/Kconfig linux-imx6-3.14/arch/arm/mach-vexpress/Kconfig --- linux-3.14.17/arch/arm/mach-vexpress/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/Kconfig 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/Kconfig 2014-09-11 18:05:54.266007061 +0200 @@ -55,6 +55,7 @@ config ARCH_VEXPRESS_CA9X4 @@ -31527,7 +31527,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/Kconfig linux-imx6-3.14/arch/arm/ bool "Dual Cluster System Control Block (DCSCB) support" diff -Nur linux-3.14.17/arch/arm/mach-vexpress/Makefile linux-imx6-3.14/arch/arm/mach-vexpress/Makefile --- linux-3.14.17/arch/arm/mach-vexpress/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/Makefile 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/Makefile 2014-09-11 18:05:54.266007061 +0200 @@ -8,8 +8,15 @@ obj-$(CONFIG_ARCH_VEXPRESS_CA9X4) += ct-ca9x4.o obj-$(CONFIG_ARCH_VEXPRESS_DCSCB) += dcscb.o dcscb_setup.o @@ -31546,7 +31546,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/Makefile linux-imx6-3.14/arch/arm obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o diff -Nur linux-3.14.17/arch/arm/mach-vexpress/spc.c linux-imx6-3.14/arch/arm/mach-vexpress/spc.c --- linux-3.14.17/arch/arm/mach-vexpress/spc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/spc.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/spc.c 2014-09-11 18:05:54.270007076 +0200 @@ -392,7 +392,7 @@ * +--------------------------+ * | 31 20 | 19 0 | @@ -31567,7 +31567,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/spc.c linux-imx6-3.14/arch/arm/ma } diff -Nur linux-3.14.17/arch/arm/mach-vexpress/tc2_pm.c linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm.c --- linux-3.14.17/arch/arm/mach-vexpress/tc2_pm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm.c 2014-09-11 18:05:54.270007076 +0200 @@ -27,6 +27,7 @@ #include <asm/cacheflush.h> #include <asm/cputype.h> @@ -31591,7 +31591,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/tc2_pm.c linux-imx6-3.14/arch/arm * SCC registers. We need to extract runtime information like diff -Nur linux-3.14.17/arch/arm/mach-vexpress/tc2_pm_psci.c linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm_psci.c --- linux-3.14.17/arch/arm/mach-vexpress/tc2_pm_psci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm_psci.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/tc2_pm_psci.c 2014-09-11 18:05:54.270007076 +0200 @@ -0,0 +1,173 @@ +/* + * arch/arm/mach-vexpress/tc2_pm_psci.c - TC2 PSCI support @@ -31768,7 +31768,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/tc2_pm_psci.c linux-imx6-3.14/arc +early_initcall(tc2_pm_psci_init); diff -Nur linux-3.14.17/arch/arm/mach-vexpress/v2m.c linux-imx6-3.14/arch/arm/mach-vexpress/v2m.c --- linux-3.14.17/arch/arm/mach-vexpress/v2m.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-vexpress/v2m.c 2014-09-09 10:13:47.552943564 +0200 ++++ linux-imx6-3.14/arch/arm/mach-vexpress/v2m.c 2014-09-11 18:05:54.270007076 +0200 @@ -7,6 +7,7 @@ #include <linux/io.h> #include <linux/smp.h> @@ -31820,7 +31820,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-vexpress/v2m.c linux-imx6-3.14/arch/arm/ma static const struct of_device_id v2m_dt_bus_match[] __initconst = { diff -Nur linux-3.14.17/arch/arm/mach-zynq/common.c linux-imx6-3.14/arch/arm/mach-zynq/common.c --- linux-3.14.17/arch/arm/mach-zynq/common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mach-zynq/common.c 2014-09-09 10:13:47.556943596 +0200 ++++ linux-imx6-3.14/arch/arm/mach-zynq/common.c 2014-09-11 18:05:54.274007092 +0200 @@ -67,7 +67,7 @@ /* * 64KB way size, 8-way associativity, parity disabled @@ -31832,7 +31832,7 @@ diff -Nur linux-3.14.17/arch/arm/mach-zynq/common.c linux-imx6-3.14/arch/arm/mac diff -Nur linux-3.14.17/arch/arm/mm/cache-feroceon-l2.c linux-imx6-3.14/arch/arm/mm/cache-feroceon-l2.c --- linux-3.14.17/arch/arm/mm/cache-feroceon-l2.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/cache-feroceon-l2.c 2014-09-09 10:13:47.580943792 +0200 ++++ linux-imx6-3.14/arch/arm/mm/cache-feroceon-l2.c 2014-09-11 18:05:54.278007108 +0200 @@ -343,7 +343,6 @@ outer_cache.inv_range = feroceon_l2_inv_range; outer_cache.clean_range = feroceon_l2_clean_range; @@ -31843,7 +31843,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/cache-feroceon-l2.c linux-imx6-3.14/arch/arm diff -Nur linux-3.14.17/arch/arm/mm/cache-l2x0.c linux-imx6-3.14/arch/arm/mm/cache-l2x0.c --- linux-3.14.17/arch/arm/mm/cache-l2x0.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/cache-l2x0.c 2014-09-09 10:13:47.580943792 +0200 ++++ linux-imx6-3.14/arch/arm/mm/cache-l2x0.c 2014-09-11 18:05:54.278007108 +0200 @@ -16,18 +16,33 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -33662,7 +33662,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/cache-l2x0.c linux-imx6-3.14/arch/arm/mm/cac } diff -Nur linux-3.14.17/arch/arm/mm/dma-mapping.c linux-imx6-3.14/arch/arm/mm/dma-mapping.c --- linux-3.14.17/arch/arm/mm/dma-mapping.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/dma-mapping.c 2014-09-09 10:13:47.580943792 +0200 ++++ linux-imx6-3.14/arch/arm/mm/dma-mapping.c 2014-09-11 18:05:54.278007108 +0200 @@ -26,6 +26,7 @@ #include <linux/io.h> #include <linux/vmalloc.h> @@ -33673,7 +33673,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/dma-mapping.c linux-imx6-3.14/arch/arm/mm/dm #include <asm/highmem.h> diff -Nur linux-3.14.17/arch/arm/mm/fault.c linux-imx6-3.14/arch/arm/mm/fault.c --- linux-3.14.17/arch/arm/mm/fault.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/fault.c 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/fault.c 2014-09-11 18:05:54.278007108 +0200 @@ -449,8 +449,16 @@ if (pud_none(*pud_k)) @@ -33705,7 +33705,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/fault.c linux-imx6-3.14/arch/arm/mm/fault.c bad_area: diff -Nur linux-3.14.17/arch/arm/mm/idmap.c linux-imx6-3.14/arch/arm/mm/idmap.c --- linux-3.14.17/arch/arm/mm/idmap.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/idmap.c 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/idmap.c 2014-09-11 18:05:54.282007125 +0200 @@ -25,13 +25,6 @@ pr_warning("Failed to allocate identity pmd.\n"); return; @@ -33722,7 +33722,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/idmap.c linux-imx6-3.14/arch/arm/mm/idmap.c } else diff -Nur linux-3.14.17/arch/arm/mm/init.c linux-imx6-3.14/arch/arm/mm/init.c --- linux-3.14.17/arch/arm/mm/init.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/init.c 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/init.c 2014-09-11 18:05:54.282007125 +0200 @@ -327,7 +327,7 @@ * reserve memory for DMA contigouos allocations, * must come from DMA area inside low memory @@ -33734,7 +33734,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/init.c linux-imx6-3.14/arch/arm/mm/init.c memblock_dump_all(); diff -Nur linux-3.14.17/arch/arm/mm/Kconfig linux-imx6-3.14/arch/arm/mm/Kconfig --- linux-3.14.17/arch/arm/mm/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/Kconfig 2014-09-09 10:13:47.556943596 +0200 ++++ linux-imx6-3.14/arch/arm/mm/Kconfig 2014-09-11 18:05:54.274007092 +0200 @@ -897,6 +897,57 @@ This option enables optimisations for the PL310 cache controller. @@ -33795,7 +33795,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/Kconfig linux-imx6-3.14/arch/arm/mm/Kconfig depends on (ARCH_DOVE || ARCH_MMP || CPU_PJ4) diff -Nur linux-3.14.17/arch/arm/mm/l2c-common.c linux-imx6-3.14/arch/arm/mm/l2c-common.c --- linux-3.14.17/arch/arm/mm/l2c-common.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mm/l2c-common.c 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/l2c-common.c 2014-09-11 18:05:54.282007125 +0200 @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2010 ARM Ltd. @@ -33819,7 +33819,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/l2c-common.c linux-imx6-3.14/arch/arm/mm/l2c +} diff -Nur linux-3.14.17/arch/arm/mm/l2c-l2x0-resume.S linux-imx6-3.14/arch/arm/mm/l2c-l2x0-resume.S --- linux-3.14.17/arch/arm/mm/l2c-l2x0-resume.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm/mm/l2c-l2x0-resume.S 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/l2c-l2x0-resume.S 2014-09-11 18:05:54.282007125 +0200 @@ -0,0 +1,58 @@ +/* + * L2C-310 early resume code. This can be used by platforms to restore @@ -33881,7 +33881,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/l2c-l2x0-resume.S linux-imx6-3.14/arch/arm/m +1: .long l2x0_saved_regs - . diff -Nur linux-3.14.17/arch/arm/mm/Makefile linux-imx6-3.14/arch/arm/mm/Makefile --- linux-3.14.17/arch/arm/mm/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/Makefile 2014-09-09 10:13:47.556943596 +0200 ++++ linux-imx6-3.14/arch/arm/mm/Makefile 2014-09-11 18:05:54.274007092 +0200 @@ -95,7 +95,8 @@ AFLAGS_proc-v6.o :=-Wa,-march=armv6 AFLAGS_proc-v7.o :=-Wa,-march=armv7-a @@ -33894,7 +33894,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/Makefile linux-imx6-3.14/arch/arm/mm/Makefil obj-$(CONFIG_CACHE_TAUROS2) += cache-tauros2.o diff -Nur linux-3.14.17/arch/arm/mm/mmu.c linux-imx6-3.14/arch/arm/mm/mmu.c --- linux-3.14.17/arch/arm/mm/mmu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/mmu.c 2014-09-09 10:13:47.584943825 +0200 ++++ linux-imx6-3.14/arch/arm/mm/mmu.c 2014-09-11 18:05:54.282007125 +0200 @@ -1436,8 +1436,8 @@ return; @@ -33917,7 +33917,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/mmu.c linux-imx6-3.14/arch/arm/mm/mmu.c phys += PMD_SIZE; diff -Nur linux-3.14.17/arch/arm/mm/proc-v7.S linux-imx6-3.14/arch/arm/mm/proc-v7.S --- linux-3.14.17/arch/arm/mm/proc-v7.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm/mm/proc-v7.S 2014-09-09 10:13:47.588943859 +0200 ++++ linux-imx6-3.14/arch/arm/mm/proc-v7.S 2014-09-11 18:05:54.286007140 +0200 @@ -336,6 +336,17 @@ mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register 1: @@ -33938,7 +33938,7 @@ diff -Nur linux-3.14.17/arch/arm/mm/proc-v7.S linux-imx6-3.14/arch/arm/mm/proc-v 3: ldr r10, =0x00000c0f @ Cortex-A15 primary part number diff -Nur linux-3.14.17/arch/arm64/boot/dts/apm-mustang.dts linux-imx6-3.14/arch/arm64/boot/dts/apm-mustang.dts --- linux-3.14.17/arch/arm64/boot/dts/apm-mustang.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/boot/dts/apm-mustang.dts 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/apm-mustang.dts 2014-09-11 18:05:54.354007412 +0200 @@ -24,3 +24,7 @@ reg = < 0x1 0x00000000 0x0 0x80000000 >; /* Updated by bootloader */ }; @@ -33949,7 +33949,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/apm-mustang.dts linux-imx6-3.14/arch +}; diff -Nur linux-3.14.17/arch/arm64/boot/dts/apm-storm.dtsi linux-imx6-3.14/arch/arm64/boot/dts/apm-storm.dtsi --- linux-3.14.17/arch/arm64/boot/dts/apm-storm.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/boot/dts/apm-storm.dtsi 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/apm-storm.dtsi 2014-09-11 18:05:54.354007412 +0200 @@ -176,16 +176,226 @@ reg-names = "csr-reg"; clock-output-names = "eth8clk"; @@ -34180,7 +34180,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/apm-storm.dtsi linux-imx6-3.14/arch/ }; diff -Nur linux-3.14.17/arch/arm64/boot/dts/clcd-panels.dtsi linux-imx6-3.14/arch/arm64/boot/dts/clcd-panels.dtsi --- linux-3.14.17/arch/arm64/boot/dts/clcd-panels.dtsi 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/boot/dts/clcd-panels.dtsi 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/clcd-panels.dtsi 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,52 @@ +/* + * ARM Ltd. Versatile Express @@ -34236,7 +34236,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/clcd-panels.dtsi linux-imx6-3.14/arc +}; diff -Nur linux-3.14.17/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts linux-imx6-3.14/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts --- linux-3.14.17/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2013, ARM Limited. All rights reserved. @@ -34506,7 +34506,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/fvp-base-gicv2-psci.dts linux-imx6-3 +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm64/boot/dts/juno.dts linux-imx6-3.14/arch/arm64/boot/dts/juno.dts --- linux-3.14.17/arch/arm64/boot/dts/juno.dts 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/boot/dts/juno.dts 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/juno.dts 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,498 @@ +/* + * ARM Ltd. Juno Plaform @@ -35008,7 +35008,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/juno.dts linux-imx6-3.14/arch/arm64/ +}; diff -Nur linux-3.14.17/arch/arm64/boot/dts/Makefile linux-imx6-3.14/arch/arm64/boot/dts/Makefile --- linux-3.14.17/arch/arm64/boot/dts/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/boot/dts/Makefile 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/Makefile 2014-09-11 18:05:54.354007412 +0200 @@ -1,5 +1,7 @@ -dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb foundation-v8.dtb +dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb foundation-v8.dtb \ @@ -35020,7 +35020,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/Makefile linux-imx6-3.14/arch/arm64/ targets += $(dtb-y) diff -Nur linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts --- linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts 2014-09-11 18:05:54.354007412 +0200 @@ -157,3 +157,5 @@ /include/ "rtsm_ve-motherboard.dtsi" }; @@ -35029,7 +35029,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-aemv8a.dts linux-imx6-3.14/a +/include/ "clcd-panels.dtsi" diff -Nur linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi --- linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi 2014-09-11 18:05:54.354007412 +0200 @@ -182,6 +182,9 @@ interrupts = <14>; clocks = <&v2m_oscclk1>, <&v2m_clk24mhz>; @@ -35042,7 +35042,7 @@ diff -Nur linux-3.14.17/arch/arm64/boot/dts/rtsm_ve-motherboard.dtsi linux-imx6- virtio_block@0130000 { diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-core.S linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-core.S --- linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-core.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-core.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-core.S 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,222 @@ +/* + * aesce-ccm-core.S - AES-CCM transform for ARMv8 with Crypto Extensions @@ -35268,7 +35268,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-core.S linux-imx6-3.14/arch +ENDPROC(ce_aes_ccm_decrypt) diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-glue.c linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-glue.c --- linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-glue.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-glue.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-ccm-glue.c 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,297 @@ +/* + * aes-ccm-glue.c - AES-CCM transform for ARMv8 with Crypto Extensions @@ -35569,7 +35569,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-ccm-glue.c linux-imx6-3.14/arch +MODULE_ALIAS("ccm(aes)"); diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-cipher.c linux-imx6-3.14/arch/arm64/crypto/aes-ce-cipher.c --- linux-3.14.17/arch/arm64/crypto/aes-ce-cipher.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-cipher.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-ce-cipher.c 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,155 @@ +/* + * aes-ce-cipher.c - core AES cipher using ARMv8 Crypto Extensions @@ -35728,7 +35728,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce-cipher.c linux-imx6-3.14/arch/a +module_exit(aes_mod_exit); diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce.S linux-imx6-3.14/arch/arm64/crypto/aes-ce.S --- linux-3.14.17/arch/arm64/crypto/aes-ce.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-ce.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-ce.S 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,133 @@ +/* + * linux/arch/arm64/crypto/aes-ce.S - AES cipher for ARMv8 with @@ -35865,7 +35865,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-ce.S linux-imx6-3.14/arch/arm64/cr +#include "aes-modes.S" diff -Nur linux-3.14.17/arch/arm64/crypto/aes-glue.c linux-imx6-3.14/arch/arm64/crypto/aes-glue.c --- linux-3.14.17/arch/arm64/crypto/aes-glue.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-glue.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-glue.c 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,446 @@ +/* + * linux/arch/arm64/crypto/aes-glue.c - wrapper code for ARMv8 AES @@ -36315,7 +36315,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-glue.c linux-imx6-3.14/arch/arm64/ +module_exit(aes_exit); diff -Nur linux-3.14.17/arch/arm64/crypto/aes-modes.S linux-imx6-3.14/arch/arm64/crypto/aes-modes.S --- linux-3.14.17/arch/arm64/crypto/aes-modes.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-modes.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-modes.S 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,532 @@ +/* + * linux/arch/arm64/crypto/aes-modes.S - chaining mode wrappers for AES @@ -36851,7 +36851,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-modes.S linux-imx6-3.14/arch/arm64 +AES_ENDPROC(aes_xts_decrypt) diff -Nur linux-3.14.17/arch/arm64/crypto/aes-neon.S linux-imx6-3.14/arch/arm64/crypto/aes-neon.S --- linux-3.14.17/arch/arm64/crypto/aes-neon.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/aes-neon.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/aes-neon.S 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,382 @@ +/* + * linux/arch/arm64/crypto/aes-neon.S - AES cipher for ARMv8 NEON @@ -37237,7 +37237,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/aes-neon.S linux-imx6-3.14/arch/arm64/ + .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d diff -Nur linux-3.14.17/arch/arm64/crypto/ghash-ce-core.S linux-imx6-3.14/arch/arm64/crypto/ghash-ce-core.S --- linux-3.14.17/arch/arm64/crypto/ghash-ce-core.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/ghash-ce-core.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/ghash-ce-core.S 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,79 @@ +/* + * Accelerated GHASH implementation with ARMv8 PMULL instructions. @@ -37320,7 +37320,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/ghash-ce-core.S linux-imx6-3.14/arch/a +ENDPROC(pmull_ghash_update) diff -Nur linux-3.14.17/arch/arm64/crypto/ghash-ce-glue.c linux-imx6-3.14/arch/arm64/crypto/ghash-ce-glue.c --- linux-3.14.17/arch/arm64/crypto/ghash-ce-glue.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/ghash-ce-glue.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/ghash-ce-glue.c 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,156 @@ +/* + * Accelerated GHASH implementation with ARMv8 PMULL instructions. @@ -37480,7 +37480,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/ghash-ce-glue.c linux-imx6-3.14/arch/a +module_exit(ghash_ce_mod_exit); diff -Nur linux-3.14.17/arch/arm64/crypto/Kconfig linux-imx6-3.14/arch/arm64/crypto/Kconfig --- linux-3.14.17/arch/arm64/crypto/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/Kconfig 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/Kconfig 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,53 @@ + +menuconfig ARM64_CRYPTO @@ -37537,7 +37537,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/Kconfig linux-imx6-3.14/arch/arm64/cry +endif diff -Nur linux-3.14.17/arch/arm64/crypto/Makefile linux-imx6-3.14/arch/arm64/crypto/Makefile --- linux-3.14.17/arch/arm64/crypto/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/Makefile 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/Makefile 2014-09-11 18:05:54.354007412 +0200 @@ -0,0 +1,38 @@ +# +# linux/arch/arm64/crypto/Makefile @@ -37579,7 +37579,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/Makefile linux-imx6-3.14/arch/arm64/cr + $(call if_changed_dep,cc_o_c) diff -Nur linux-3.14.17/arch/arm64/crypto/sha1-ce-core.S linux-imx6-3.14/arch/arm64/crypto/sha1-ce-core.S --- linux-3.14.17/arch/arm64/crypto/sha1-ce-core.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/sha1-ce-core.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/sha1-ce-core.S 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,153 @@ +/* + * sha1-ce-core.S - SHA-1 secure hash using ARMv8 Crypto Extensions @@ -37736,7 +37736,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/sha1-ce-core.S linux-imx6-3.14/arch/ar +ENDPROC(sha1_ce_transform) diff -Nur linux-3.14.17/arch/arm64/crypto/sha1-ce-glue.c linux-imx6-3.14/arch/arm64/crypto/sha1-ce-glue.c --- linux-3.14.17/arch/arm64/crypto/sha1-ce-glue.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/sha1-ce-glue.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/sha1-ce-glue.c 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,174 @@ +/* + * sha1-ce-glue.c - SHA-1 secure hash using ARMv8 Crypto Extensions @@ -37914,7 +37914,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/sha1-ce-glue.c linux-imx6-3.14/arch/ar +module_exit(sha1_ce_mod_fini); diff -Nur linux-3.14.17/arch/arm64/crypto/sha2-ce-core.S linux-imx6-3.14/arch/arm64/crypto/sha2-ce-core.S --- linux-3.14.17/arch/arm64/crypto/sha2-ce-core.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/sha2-ce-core.S 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/sha2-ce-core.S 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,156 @@ +/* + * sha2-ce-core.S - core SHA-224/SHA-256 transform using v8 Crypto Extensions @@ -38074,7 +38074,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/sha2-ce-core.S linux-imx6-3.14/arch/ar +ENDPROC(sha2_ce_transform) diff -Nur linux-3.14.17/arch/arm64/crypto/sha2-ce-glue.c linux-imx6-3.14/arch/arm64/crypto/sha2-ce-glue.c --- linux-3.14.17/arch/arm64/crypto/sha2-ce-glue.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/crypto/sha2-ce-glue.c 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/crypto/sha2-ce-glue.c 2014-09-11 18:05:54.394007574 +0200 @@ -0,0 +1,255 @@ +/* + * sha2-ce-glue.c - SHA-224/SHA-256 using ARMv8 Crypto Extensions @@ -38333,7 +38333,7 @@ diff -Nur linux-3.14.17/arch/arm64/crypto/sha2-ce-glue.c linux-imx6-3.14/arch/ar +module_exit(sha2_ce_mod_fini); diff -Nur linux-3.14.17/arch/arm64/include/asm/bL_switcher.h linux-imx6-3.14/arch/arm64/include/asm/bL_switcher.h --- linux-3.14.17/arch/arm64/include/asm/bL_switcher.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/asm/bL_switcher.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/bL_switcher.h 2014-09-11 18:05:54.398007590 +0200 @@ -0,0 +1,54 @@ +/* + * Based on the stubs for the ARM implementation which is: @@ -38391,7 +38391,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/bL_switcher.h linux-imx6-3.14/arc +#endif diff -Nur linux-3.14.17/arch/arm64/include/asm/cacheflush.h linux-imx6-3.14/arch/arm64/include/asm/cacheflush.h --- linux-3.14.17/arch/arm64/include/asm/cacheflush.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/cacheflush.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/cacheflush.h 2014-09-11 18:05:54.398007590 +0200 @@ -85,6 +85,13 @@ } @@ -38408,7 +38408,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/cacheflush.h linux-imx6-3.14/arch * space" model to handle this. diff -Nur linux-3.14.17/arch/arm64/include/asm/compat.h linux-imx6-3.14/arch/arm64/include/asm/compat.h --- linux-3.14.17/arch/arm64/include/asm/compat.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/compat.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/compat.h 2014-09-11 18:05:54.398007590 +0200 @@ -228,7 +228,7 @@ return (u32)(unsigned long)uptr; } @@ -38432,7 +38432,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/compat.h linux-imx6-3.14/arch/arm return 0; diff -Nur linux-3.14.17/arch/arm64/include/asm/cpufeature.h linux-imx6-3.14/arch/arm64/include/asm/cpufeature.h --- linux-3.14.17/arch/arm64/include/asm/cpufeature.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/asm/cpufeature.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/cpufeature.h 2014-09-11 18:05:54.398007590 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org> @@ -38465,7 +38465,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/cpufeature.h linux-imx6-3.14/arch +#endif diff -Nur linux-3.14.17/arch/arm64/include/asm/debug-monitors.h linux-imx6-3.14/arch/arm64/include/asm/debug-monitors.h --- linux-3.14.17/arch/arm64/include/asm/debug-monitors.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/debug-monitors.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/debug-monitors.h 2014-09-11 18:05:54.398007590 +0200 @@ -26,6 +26,53 @@ #define DBG_ESR_EVT_HWWP 0x2 #define DBG_ESR_EVT_BRK 0x6 @@ -38546,7 +38546,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/debug-monitors.h linux-imx6-3.14/ #define DBG_HOOK_HANDLED 0 diff -Nur linux-3.14.17/arch/arm64/include/asm/dma-mapping.h linux-imx6-3.14/arch/arm64/include/asm/dma-mapping.h --- linux-3.14.17/arch/arm64/include/asm/dma-mapping.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/dma-mapping.h 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/dma-mapping.h 2014-09-11 18:05:54.398007590 +0200 @@ -28,6 +28,8 @@ #define DMA_ERROR_CODE (~(dma_addr_t)0) @@ -38570,7 +38570,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/dma-mapping.h linux-imx6-3.14/arc static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) diff -Nur linux-3.14.17/arch/arm64/include/asm/ftrace.h linux-imx6-3.14/arch/arm64/include/asm/ftrace.h --- linux-3.14.17/arch/arm64/include/asm/ftrace.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/asm/ftrace.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/ftrace.h 2014-09-11 18:05:54.402007605 +0200 @@ -0,0 +1,59 @@ +/* + * arch/arm64/include/asm/ftrace.h @@ -38633,7 +38633,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/ftrace.h linux-imx6-3.14/arch/arm +#endif /* __ASM_FTRACE_H */ diff -Nur linux-3.14.17/arch/arm64/include/asm/hwcap.h linux-imx6-3.14/arch/arm64/include/asm/hwcap.h --- linux-3.14.17/arch/arm64/include/asm/hwcap.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/hwcap.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/hwcap.h 2014-09-11 18:05:54.402007605 +0200 @@ -32,6 +32,12 @@ #define COMPAT_HWCAP_IDIV (COMPAT_HWCAP_IDIVA|COMPAT_HWCAP_IDIVT) #define COMPAT_HWCAP_EVTSTRM (1 << 21) @@ -38659,7 +38659,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/hwcap.h linux-imx6-3.14/arch/arm6 extern unsigned long elf_hwcap; diff -Nur linux-3.14.17/arch/arm64/include/asm/insn.h linux-imx6-3.14/arch/arm64/include/asm/insn.h --- linux-3.14.17/arch/arm64/include/asm/insn.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/insn.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/insn.h 2014-09-11 18:05:54.402007605 +0200 @@ -16,11 +16,14 @@ */ #ifndef __ASM_INSN_H @@ -38684,7 +38684,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/insn.h linux-imx6-3.14/arch/arm64 #endif /* __ASM_INSN_H */ diff -Nur linux-3.14.17/arch/arm64/include/asm/irqflags.h linux-imx6-3.14/arch/arm64/include/asm/irqflags.h --- linux-3.14.17/arch/arm64/include/asm/irqflags.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/irqflags.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/irqflags.h 2014-09-11 18:05:54.402007605 +0200 @@ -90,5 +90,28 @@ return flags & PSR_I_BIT; } @@ -38716,7 +38716,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/irqflags.h linux-imx6-3.14/arch/a #endif diff -Nur linux-3.14.17/arch/arm64/include/asm/Kbuild linux-imx6-3.14/arch/arm64/include/asm/Kbuild --- linux-3.14.17/arch/arm64/include/asm/Kbuild 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/Kbuild 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/Kbuild 2014-09-11 18:05:54.394007574 +0200 @@ -35,6 +35,7 @@ generic-y += sembuf.h generic-y += serial.h @@ -38727,7 +38727,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/Kbuild linux-imx6-3.14/arch/arm64 generic-y += sockios.h diff -Nur linux-3.14.17/arch/arm64/include/asm/kgdb.h linux-imx6-3.14/arch/arm64/include/asm/kgdb.h --- linux-3.14.17/arch/arm64/include/asm/kgdb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/asm/kgdb.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/kgdb.h 2014-09-11 18:05:54.402007605 +0200 @@ -0,0 +1,84 @@ +/* + * AArch64 KGDB support @@ -38815,7 +38815,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/kgdb.h linux-imx6-3.14/arch/arm64 +#endif /* __ASM_KGDB_H */ diff -Nur linux-3.14.17/arch/arm64/include/asm/page.h linux-imx6-3.14/arch/arm64/include/asm/page.h --- linux-3.14.17/arch/arm64/include/asm/page.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/page.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/page.h 2014-09-11 18:05:54.402007605 +0200 @@ -31,6 +31,15 @@ /* We do define AT_SYSINFO_EHDR but don't use the gate mechanism */ #define __HAVE_ARCH_GATE_AREA 1 @@ -38834,7 +38834,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/page.h linux-imx6-3.14/arch/arm64 #ifdef CONFIG_ARM64_64K_PAGES diff -Nur linux-3.14.17/arch/arm64/include/asm/pgtable.h linux-imx6-3.14/arch/arm64/include/asm/pgtable.h --- linux-3.14.17/arch/arm64/include/asm/pgtable.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/pgtable.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/pgtable.h 2014-09-11 18:05:54.446007779 +0200 @@ -227,36 +227,36 @@ #define __HAVE_ARCH_PTE_SPECIAL @@ -38929,7 +38929,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/pgtable.h linux-imx6-3.14/arch/ar * bits 0-1: present (must be zero) diff -Nur linux-3.14.17/arch/arm64/include/asm/ptrace.h linux-imx6-3.14/arch/arm64/include/asm/ptrace.h --- linux-3.14.17/arch/arm64/include/asm/ptrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/ptrace.h 2014-09-09 10:13:47.608944022 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/ptrace.h 2014-09-11 18:05:54.446007779 +0200 @@ -68,6 +68,7 @@ /* Architecturally defined mapping between AArch32 and AArch64 registers */ @@ -38963,7 +38963,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/ptrace.h linux-imx6-3.14/arch/arm extern unsigned long profile_pc(struct pt_regs *regs); diff -Nur linux-3.14.17/arch/arm64/include/asm/syscall.h linux-imx6-3.14/arch/arm64/include/asm/syscall.h --- linux-3.14.17/arch/arm64/include/asm/syscall.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/syscall.h 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/syscall.h 2014-09-11 18:05:54.450007796 +0200 @@ -18,6 +18,7 @@ #include <linux/err.h> @@ -38974,7 +38974,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/syscall.h linux-imx6-3.14/arch/ar struct pt_regs *regs) diff -Nur linux-3.14.17/arch/arm64/include/asm/thread_info.h linux-imx6-3.14/arch/arm64/include/asm/thread_info.h --- linux-3.14.17/arch/arm64/include/asm/thread_info.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/thread_info.h 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/thread_info.h 2014-09-11 18:05:54.450007796 +0200 @@ -91,6 +91,9 @@ /* * thread information flags: @@ -39015,7 +39015,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/thread_info.h linux-imx6-3.14/arc #endif /* __ASM_THREAD_INFO_H */ diff -Nur linux-3.14.17/arch/arm64/include/asm/topology.h linux-imx6-3.14/arch/arm64/include/asm/topology.h --- linux-3.14.17/arch/arm64/include/asm/topology.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/asm/topology.h 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/topology.h 2014-09-11 18:05:54.450007796 +0200 @@ -0,0 +1,70 @@ +#ifndef __ASM_TOPOLOGY_H +#define __ASM_TOPOLOGY_H @@ -39089,7 +39089,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/topology.h linux-imx6-3.14/arch/a +#endif /* _ASM_ARM_TOPOLOGY_H */ diff -Nur linux-3.14.17/arch/arm64/include/asm/unistd.h linux-imx6-3.14/arch/arm64/include/asm/unistd.h --- linux-3.14.17/arch/arm64/include/asm/unistd.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/asm/unistd.h 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/asm/unistd.h 2014-09-11 18:05:54.450007796 +0200 @@ -28,3 +28,5 @@ #endif #define __ARCH_WANT_SYS_CLONE @@ -39098,7 +39098,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/asm/unistd.h linux-imx6-3.14/arch/arm +#define NR_syscalls (__NR_syscalls) diff -Nur linux-3.14.17/arch/arm64/include/uapi/asm/Kbuild linux-imx6-3.14/arch/arm64/include/uapi/asm/Kbuild --- linux-3.14.17/arch/arm64/include/uapi/asm/Kbuild 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/include/uapi/asm/Kbuild 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/uapi/asm/Kbuild 2014-09-11 18:05:54.458007828 +0200 @@ -9,6 +9,7 @@ header-y += fcntl.h header-y += hwcap.h @@ -39109,7 +39109,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/uapi/asm/Kbuild linux-imx6-3.14/arch/ header-y += setup.h diff -Nur linux-3.14.17/arch/arm64/include/uapi/asm/perf_regs.h linux-imx6-3.14/arch/arm64/include/uapi/asm/perf_regs.h --- linux-3.14.17/arch/arm64/include/uapi/asm/perf_regs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/include/uapi/asm/perf_regs.h 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/include/uapi/asm/perf_regs.h 2014-09-11 18:05:54.458007828 +0200 @@ -0,0 +1,40 @@ +#ifndef _ASM_ARM64_PERF_REGS_H +#define _ASM_ARM64_PERF_REGS_H @@ -39153,7 +39153,7 @@ diff -Nur linux-3.14.17/arch/arm64/include/uapi/asm/perf_regs.h linux-imx6-3.14/ +#endif /* _ASM_ARM64_PERF_REGS_H */ diff -Nur linux-3.14.17/arch/arm64/Kconfig linux-imx6-3.14/arch/arm64/Kconfig --- linux-3.14.17/arch/arm64/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/Kconfig 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/Kconfig 2014-09-11 18:05:54.354007412 +0200 @@ -4,6 +4,7 @@ select ARCH_USE_CMPXCHG_LOCKREF select ARCH_SUPPORTS_ATOMIC_RMW @@ -39353,7 +39353,7 @@ diff -Nur linux-3.14.17/arch/arm64/Kconfig linux-imx6-3.14/arch/arm64/Kconfig source "lib/Kconfig" diff -Nur linux-3.14.17/arch/arm64/kernel/arm64ksyms.c linux-imx6-3.14/arch/arm64/kernel/arm64ksyms.c --- linux-3.14.17/arch/arm64/kernel/arm64ksyms.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/arm64ksyms.c 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/arm64ksyms.c 2014-09-11 18:05:54.458007828 +0200 @@ -56,3 +56,7 @@ EXPORT_SYMBOL(test_and_clear_bit); EXPORT_SYMBOL(change_bit); @@ -39364,7 +39364,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/arm64ksyms.c linux-imx6-3.14/arch/arm6 +#endif diff -Nur linux-3.14.17/arch/arm64/kernel/debug-monitors.c linux-imx6-3.14/arch/arm64/kernel/debug-monitors.c --- linux-3.14.17/arch/arm64/kernel/debug-monitors.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/debug-monitors.c 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/debug-monitors.c 2014-09-11 18:05:54.458007828 +0200 @@ -138,6 +138,7 @@ { asm volatile("msr oslar_el1, %0" : : "r" (0)); @@ -39385,7 +39385,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/debug-monitors.c linux-imx6-3.14/arch/ diff -Nur linux-3.14.17/arch/arm64/kernel/entry-ftrace.S linux-imx6-3.14/arch/arm64/kernel/entry-ftrace.S --- linux-3.14.17/arch/arm64/kernel/entry-ftrace.S 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/entry-ftrace.S 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/entry-ftrace.S 2014-09-11 18:05:54.462007844 +0200 @@ -0,0 +1,218 @@ +/* + * arch/arm64/kernel/entry-ftrace.S @@ -39607,7 +39607,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/entry-ftrace.S linux-imx6-3.14/arch/ar +#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ diff -Nur linux-3.14.17/arch/arm64/kernel/entry.S linux-imx6-3.14/arch/arm64/kernel/entry.S --- linux-3.14.17/arch/arm64/kernel/entry.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/entry.S 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/entry.S 2014-09-11 18:05:54.462007844 +0200 @@ -630,8 +630,9 @@ enable_irq @@ -39646,7 +39646,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/entry.S linux-imx6-3.14/arch/arm64/ker /* diff -Nur linux-3.14.17/arch/arm64/kernel/ftrace.c linux-imx6-3.14/arch/arm64/kernel/ftrace.c --- linux-3.14.17/arch/arm64/kernel/ftrace.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/ftrace.c 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/ftrace.c 2014-09-11 18:05:54.462007844 +0200 @@ -0,0 +1,177 @@ +/* + * arch/arm64/kernel/ftrace.c @@ -39827,7 +39827,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/ftrace.c linux-imx6-3.14/arch/arm64/ke +#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ diff -Nur linux-3.14.17/arch/arm64/kernel/head.S linux-imx6-3.14/arch/arm64/kernel/head.S --- linux-3.14.17/arch/arm64/kernel/head.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/head.S 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/head.S 2014-09-11 18:05:54.462007844 +0200 @@ -26,6 +26,7 @@ #include <asm/assembler.h> #include <asm/ptrace.h> @@ -40019,7 +40019,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/head.S linux-imx6-3.14/arch/arm64/kern .quad memstart_addr // x6 diff -Nur linux-3.14.17/arch/arm64/kernel/hw_breakpoint.c linux-imx6-3.14/arch/arm64/kernel/hw_breakpoint.c --- linux-3.14.17/arch/arm64/kernel/hw_breakpoint.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/hw_breakpoint.c 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/hw_breakpoint.c 2014-09-11 18:05:54.462007844 +0200 @@ -20,6 +20,7 @@ #define pr_fmt(fmt) "hw-breakpoint: " fmt @@ -40038,7 +40038,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/hw_breakpoint.c linux-imx6-3.14/arch/a #include <asm/hw_breakpoint.h> diff -Nur linux-3.14.17/arch/arm64/kernel/kgdb.c linux-imx6-3.14/arch/arm64/kernel/kgdb.c --- linux-3.14.17/arch/arm64/kernel/kgdb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/kgdb.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/kgdb.c 2014-09-11 18:05:54.470007876 +0200 @@ -0,0 +1,336 @@ +/* + * AArch64 KGDB support @@ -40378,7 +40378,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/kgdb.c linux-imx6-3.14/arch/arm64/kern +}; diff -Nur linux-3.14.17/arch/arm64/kernel/Makefile linux-imx6-3.14/arch/arm64/kernel/Makefile --- linux-3.14.17/arch/arm64/kernel/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/Makefile 2014-09-09 10:13:47.612944054 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/Makefile 2014-09-11 18:05:54.458007828 +0200 @@ -5,21 +5,29 @@ CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET) AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) @@ -40413,7 +40413,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/Makefile linux-imx6-3.14/arch/arm64/ke obj-m += $(arm64-obj-m) diff -Nur linux-3.14.17/arch/arm64/kernel/perf_event.c linux-imx6-3.14/arch/arm64/kernel/perf_event.c --- linux-3.14.17/arch/arm64/kernel/perf_event.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/perf_event.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/perf_event.c 2014-09-11 18:05:54.474007892 +0200 @@ -1348,8 +1348,8 @@ * Callchain handling code. */ @@ -40526,7 +40526,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/perf_event.c linux-imx6-3.14/arch/arm6 diff -Nur linux-3.14.17/arch/arm64/kernel/perf_regs.c linux-imx6-3.14/arch/arm64/kernel/perf_regs.c --- linux-3.14.17/arch/arm64/kernel/perf_regs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/perf_regs.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/perf_regs.c 2014-09-11 18:05:54.474007892 +0200 @@ -0,0 +1,46 @@ +#include <linux/errno.h> +#include <linux/kernel.h> @@ -40576,7 +40576,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/perf_regs.c linux-imx6-3.14/arch/arm64 +} diff -Nur linux-3.14.17/arch/arm64/kernel/process.c linux-imx6-3.14/arch/arm64/kernel/process.c --- linux-3.14.17/arch/arm64/kernel/process.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/process.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/process.c 2014-09-11 18:05:54.474007892 +0200 @@ -20,6 +20,7 @@ #include <stdarg.h> @@ -40587,7 +40587,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/process.c linux-imx6-3.14/arch/arm64/k #include <linux/kernel.h> diff -Nur linux-3.14.17/arch/arm64/kernel/ptrace.c linux-imx6-3.14/arch/arm64/kernel/ptrace.c --- linux-3.14.17/arch/arm64/kernel/ptrace.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/ptrace.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/ptrace.c 2014-09-11 18:05:54.474007892 +0200 @@ -19,6 +19,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ @@ -40679,7 +40679,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/ptrace.c linux-imx6-3.14/arch/arm64/ke +} diff -Nur linux-3.14.17/arch/arm64/kernel/return_address.c linux-imx6-3.14/arch/arm64/kernel/return_address.c --- linux-3.14.17/arch/arm64/kernel/return_address.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/return_address.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/return_address.c 2014-09-11 18:05:54.474007892 +0200 @@ -0,0 +1,55 @@ +/* + * arch/arm64/kernel/return_address.c @@ -40738,7 +40738,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/return_address.c linux-imx6-3.14/arch/ +EXPORT_SYMBOL_GPL(return_address); diff -Nur linux-3.14.17/arch/arm64/kernel/setup.c linux-imx6-3.14/arch/arm64/kernel/setup.c --- linux-3.14.17/arch/arm64/kernel/setup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/setup.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/setup.c 2014-09-11 18:05:54.474007892 +0200 @@ -69,6 +69,7 @@ COMPAT_HWCAP_VFPv3|COMPAT_HWCAP_VFPv4|\ COMPAT_HWCAP_NEON|COMPAT_HWCAP_IDIV) @@ -40797,7 +40797,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/setup.c linux-imx6-3.14/arch/arm64/ker diff -Nur linux-3.14.17/arch/arm64/kernel/signal.c linux-imx6-3.14/arch/arm64/kernel/signal.c --- linux-3.14.17/arch/arm64/kernel/signal.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/signal.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/signal.c 2014-09-11 18:05:54.474007892 +0200 @@ -17,6 +17,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ @@ -40816,7 +40816,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/signal.c linux-imx6-3.14/arch/arm64/ke #include <asm/cacheflush.h> diff -Nur linux-3.14.17/arch/arm64/kernel/smp.c linux-imx6-3.14/arch/arm64/kernel/smp.c --- linux-3.14.17/arch/arm64/kernel/smp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/smp.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/smp.c 2014-09-11 18:05:54.474007892 +0200 @@ -114,6 +114,11 @@ return ret; } @@ -40851,7 +40851,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/smp.c linux-imx6-3.14/arch/arm64/kerne */ diff -Nur linux-3.14.17/arch/arm64/kernel/stacktrace.c linux-imx6-3.14/arch/arm64/kernel/stacktrace.c --- linux-3.14.17/arch/arm64/kernel/stacktrace.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/stacktrace.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/stacktrace.c 2014-09-11 18:05:54.474007892 +0200 @@ -35,7 +35,7 @@ * ldp x29, x30, [sp] * add sp, sp, #0x10 @@ -40863,7 +40863,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/stacktrace.c linux-imx6-3.14/arch/arm6 unsigned long fp = frame->fp; diff -Nur linux-3.14.17/arch/arm64/kernel/topology.c linux-imx6-3.14/arch/arm64/kernel/topology.c --- linux-3.14.17/arch/arm64/kernel/topology.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/arch/arm64/kernel/topology.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/topology.c 2014-09-11 18:05:54.478007908 +0200 @@ -0,0 +1,558 @@ +/* + * arch/arm64/kernel/topology.c @@ -41425,7 +41425,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/topology.c linux-imx6-3.14/arch/arm64/ +} diff -Nur linux-3.14.17/arch/arm64/kernel/vdso/Makefile linux-imx6-3.14/arch/arm64/kernel/vdso/Makefile --- linux-3.14.17/arch/arm64/kernel/vdso/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/vdso/Makefile 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/vdso/Makefile 2014-09-11 18:05:54.478007908 +0200 @@ -47,9 +47,9 @@ $(call if_changed_dep,vdsoas) @@ -41440,7 +41440,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/vdso/Makefile linux-imx6-3.14/arch/arm # Install commands for the unstripped file diff -Nur linux-3.14.17/arch/arm64/kernel/vdso.c linux-imx6-3.14/arch/arm64/kernel/vdso.c --- linux-3.14.17/arch/arm64/kernel/vdso.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/vdso.c 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/vdso.c 2014-09-11 18:05:54.478007908 +0200 @@ -156,11 +156,12 @@ int uses_interp) { @@ -41517,7 +41517,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/vdso.c linux-imx6-3.14/arch/arm64/kern return NULL; diff -Nur linux-3.14.17/arch/arm64/kernel/vmlinux.lds.S linux-imx6-3.14/arch/arm64/kernel/vmlinux.lds.S --- linux-3.14.17/arch/arm64/kernel/vmlinux.lds.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/kernel/vmlinux.lds.S 2014-09-09 10:13:47.616944086 +0200 ++++ linux-imx6-3.14/arch/arm64/kernel/vmlinux.lds.S 2014-09-11 18:05:54.478007908 +0200 @@ -104,6 +104,13 @@ _edata = .; @@ -41534,7 +41534,7 @@ diff -Nur linux-3.14.17/arch/arm64/kernel/vmlinux.lds.S linux-imx6-3.14/arch/arm STABS_DEBUG diff -Nur linux-3.14.17/arch/arm64/Makefile linux-imx6-3.14/arch/arm64/Makefile --- linux-3.14.17/arch/arm64/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/Makefile 2014-09-09 10:13:47.604943988 +0200 ++++ linux-imx6-3.14/arch/arm64/Makefile 2014-09-11 18:05:54.354007412 +0200 @@ -45,6 +45,7 @@ core-y += arch/arm64/kernel/ arch/arm64/mm/ core-$(CONFIG_KVM) += arch/arm64/kvm/ @@ -41545,7 +41545,7 @@ diff -Nur linux-3.14.17/arch/arm64/Makefile linux-imx6-3.14/arch/arm64/Makefile diff -Nur linux-3.14.17/arch/arm64/mm/cache.S linux-imx6-3.14/arch/arm64/mm/cache.S --- linux-3.14.17/arch/arm64/mm/cache.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/mm/cache.S 2014-09-09 10:13:47.620944119 +0200 ++++ linux-imx6-3.14/arch/arm64/mm/cache.S 2014-09-11 18:05:54.486007940 +0200 @@ -30,7 +30,7 @@ * * Corrupted registers: x0-x7, x9-x11 @@ -41655,7 +41655,7 @@ diff -Nur linux-3.14.17/arch/arm64/mm/cache.S linux-imx6-3.14/arch/arm64/mm/cach +ENDPROC(__dma_unmap_area) diff -Nur linux-3.14.17/arch/arm64/mm/copypage.c linux-imx6-3.14/arch/arm64/mm/copypage.c --- linux-3.14.17/arch/arm64/mm/copypage.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/mm/copypage.c 2014-09-09 10:13:47.620944119 +0200 ++++ linux-imx6-3.14/arch/arm64/mm/copypage.c 2014-09-11 18:05:54.486007940 +0200 @@ -27,8 +27,10 @@ copy_page(kto, kfrom); __flush_dcache_area(kto, PAGE_SIZE); @@ -41669,7 +41669,7 @@ diff -Nur linux-3.14.17/arch/arm64/mm/copypage.c linux-imx6-3.14/arch/arm64/mm/c +EXPORT_SYMBOL_GPL(__cpu_clear_user_page); diff -Nur linux-3.14.17/arch/arm64/mm/dma-mapping.c linux-imx6-3.14/arch/arm64/mm/dma-mapping.c --- linux-3.14.17/arch/arm64/mm/dma-mapping.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/mm/dma-mapping.c 2014-09-09 10:13:47.620944119 +0200 ++++ linux-imx6-3.14/arch/arm64/mm/dma-mapping.c 2014-09-11 18:05:54.486007940 +0200 @@ -22,26 +22,39 @@ #include <linux/slab.h> #include <linux/dma-mapping.h> @@ -41997,7 +41997,7 @@ diff -Nur linux-3.14.17/arch/arm64/mm/dma-mapping.c linux-imx6-3.14/arch/arm64/m diff -Nur linux-3.14.17/arch/arm64/mm/init.c linux-imx6-3.14/arch/arm64/mm/init.c --- linux-3.14.17/arch/arm64/mm/init.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/mm/init.c 2014-09-09 10:13:47.620944119 +0200 ++++ linux-imx6-3.14/arch/arm64/mm/init.c 2014-09-11 18:05:54.486007940 +0200 @@ -30,6 +30,7 @@ #include <linux/memblock.h> #include <linux/sort.h> @@ -42096,7 +42096,7 @@ diff -Nur linux-3.14.17/arch/arm64/mm/init.c linux-imx6-3.14/arch/arm64/mm/init. #ifndef CONFIG_SPARSEMEM_VMEMMAP diff -Nur linux-3.14.17/arch/arm64/mm/proc.S linux-imx6-3.14/arch/arm64/mm/proc.S --- linux-3.14.17/arch/arm64/mm/proc.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/arm64/mm/proc.S 2014-09-09 10:13:47.620944119 +0200 ++++ linux-imx6-3.14/arch/arm64/mm/proc.S 2014-09-11 18:05:54.490007955 +0200 @@ -173,12 +173,6 @@ * value of the SCTLR_EL1 register. */ @@ -42112,7 +42112,7 @@ diff -Nur linux-3.14.17/arch/arm64/mm/proc.S linux-imx6-3.14/arch/arm64/mm/proc. dsb sy diff -Nur linux-3.14.17/arch/avr32/kernel/cpu.c linux-imx6-3.14/arch/avr32/kernel/cpu.c --- linux-3.14.17/arch/avr32/kernel/cpu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/avr32/kernel/cpu.c 2014-09-09 10:13:47.628944185 +0200 ++++ linux-imx6-3.14/arch/avr32/kernel/cpu.c 2014-09-11 18:05:54.514008051 +0200 @@ -39,10 +39,12 @@ size_t count) { @@ -42211,7 +42211,7 @@ diff -Nur linux-3.14.17/arch/avr32/kernel/cpu.c linux-imx6-3.14/arch/avr32/kerne diff -Nur linux-3.14.17/arch/blackfin/include/asm/ftrace.h linux-imx6-3.14/arch/blackfin/include/asm/ftrace.h --- linux-3.14.17/arch/blackfin/include/asm/ftrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/blackfin/include/asm/ftrace.h 2014-09-09 10:13:47.640944282 +0200 ++++ linux-imx6-3.14/arch/blackfin/include/asm/ftrace.h 2014-09-11 18:05:54.538008148 +0200 @@ -66,16 +66,7 @@ #endif /* CONFIG_FRAME_POINTER */ @@ -42232,7 +42232,7 @@ diff -Nur linux-3.14.17/arch/blackfin/include/asm/ftrace.h linux-imx6-3.14/arch/ diff -Nur linux-3.14.17/arch/hexagon/include/asm/elf.h linux-imx6-3.14/arch/hexagon/include/asm/elf.h --- linux-3.14.17/arch/hexagon/include/asm/elf.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/hexagon/include/asm/elf.h 2014-09-09 10:13:47.748945163 +0200 ++++ linux-imx6-3.14/arch/hexagon/include/asm/elf.h 2014-09-11 18:05:55.318011266 +0200 @@ -1,7 +1,7 @@ /* * ELF definitions for the Hexagon architecture @@ -42244,7 +42244,7 @@ diff -Nur linux-3.14.17/arch/hexagon/include/asm/elf.h linux-imx6-3.14/arch/hexa * it under the terms of the GNU General Public License version 2 and diff -Nur linux-3.14.17/arch/parisc/include/asm/ftrace.h linux-imx6-3.14/arch/parisc/include/asm/ftrace.h --- linux-3.14.17/arch/parisc/include/asm/ftrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/parisc/include/asm/ftrace.h 2014-09-09 10:13:48.088947937 +0200 ++++ linux-imx6-3.14/arch/parisc/include/asm/ftrace.h 2014-09-11 18:05:56.270015072 +0200 @@ -24,15 +24,7 @@ extern unsigned long return_address(unsigned int); @@ -42264,7 +42264,7 @@ diff -Nur linux-3.14.17/arch/parisc/include/asm/ftrace.h linux-imx6-3.14/arch/pa diff -Nur linux-3.14.17/arch/parisc/include/uapi/asm/signal.h linux-imx6-3.14/arch/parisc/include/uapi/asm/signal.h --- linux-3.14.17/arch/parisc/include/uapi/asm/signal.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/parisc/include/uapi/asm/signal.h 2014-09-09 10:13:48.092947970 +0200 ++++ linux-imx6-3.14/arch/parisc/include/uapi/asm/signal.h 2014-09-11 18:05:56.278015104 +0200 @@ -69,6 +69,8 @@ #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND @@ -42276,7 +42276,7 @@ diff -Nur linux-3.14.17/arch/parisc/include/uapi/asm/signal.h linux-imx6-3.14/ar diff -Nur linux-3.14.17/arch/s390/include/asm/cio.h linux-imx6-3.14/arch/s390/include/asm/cio.h --- linux-3.14.17/arch/s390/include/asm/cio.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/s390/include/asm/cio.h 2014-09-09 10:13:48.264949374 +0200 ++++ linux-imx6-3.14/arch/s390/include/asm/cio.h 2014-09-11 18:05:56.974017886 +0200 @@ -199,7 +199,7 @@ /** * struct irb - interruption response block @@ -42288,7 +42288,7 @@ diff -Nur linux-3.14.17/arch/s390/include/asm/cio.h linux-imx6-3.14/arch/s390/in * The irb that is handed to the device driver when an interrupt occurs. For diff -Nur linux-3.14.17/arch/s390/kernel/ptrace.c linux-imx6-3.14/arch/s390/kernel/ptrace.c --- linux-3.14.17/arch/s390/kernel/ptrace.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/s390/kernel/ptrace.c 2014-09-09 10:13:48.280949504 +0200 ++++ linux-imx6-3.14/arch/s390/kernel/ptrace.c 2014-09-11 18:05:57.078018301 +0200 @@ -323,14 +323,9 @@ unsigned long mask = PSW_MASK_USER; @@ -42321,7 +42321,7 @@ diff -Nur linux-3.14.17/arch/s390/kernel/ptrace.c linux-imx6-3.14/arch/s390/kern (__u64)(tmp & mask) << 32; diff -Nur linux-3.14.17/arch/sh/include/asm/ftrace.h linux-imx6-3.14/arch/sh/include/asm/ftrace.h --- linux-3.14.17/arch/sh/include/asm/ftrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sh/include/asm/ftrace.h 2014-09-09 10:13:48.320949831 +0200 ++++ linux-imx6-3.14/arch/sh/include/asm/ftrace.h 2014-09-11 18:05:57.446019771 +0200 @@ -40,15 +40,7 @@ /* arch/sh/kernel/return_address.c */ extern void *return_address(unsigned int); @@ -42341,7 +42341,7 @@ diff -Nur linux-3.14.17/arch/sh/include/asm/ftrace.h linux-imx6-3.14/arch/sh/inc diff -Nur linux-3.14.17/arch/sparc/include/asm/pgtable_64.h linux-imx6-3.14/arch/sparc/include/asm/pgtable_64.h --- linux-3.14.17/arch/sparc/include/asm/pgtable_64.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/include/asm/pgtable_64.h 2014-09-09 10:13:48.372950255 +0200 ++++ linux-imx6-3.14/arch/sparc/include/asm/pgtable_64.h 2014-09-11 18:05:57.682020716 +0200 @@ -24,8 +24,7 @@ /* The kernel image occupies 0x4000000 to 0x6000000 (4MB --> 96MB). @@ -42520,7 +42520,7 @@ diff -Nur linux-3.14.17/arch/sparc/include/asm/pgtable_64.h linux-imx6-3.14/arch /* diff -Nur linux-3.14.17/arch/sparc/include/asm/tlbflush_64.h linux-imx6-3.14/arch/sparc/include/asm/tlbflush_64.h --- linux-3.14.17/arch/sparc/include/asm/tlbflush_64.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/include/asm/tlbflush_64.h 2014-09-09 10:13:48.376950288 +0200 ++++ linux-imx6-3.14/arch/sparc/include/asm/tlbflush_64.h 2014-09-11 18:05:57.694020763 +0200 @@ -34,8 +34,6 @@ { } @@ -42556,7 +42556,7 @@ diff -Nur linux-3.14.17/arch/sparc/include/asm/tlbflush_64.h linux-imx6-3.14/arc diff -Nur linux-3.14.17/arch/sparc/include/asm/tsb.h linux-imx6-3.14/arch/sparc/include/asm/tsb.h --- linux-3.14.17/arch/sparc/include/asm/tsb.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/include/asm/tsb.h 2014-09-09 10:13:48.376950288 +0200 ++++ linux-imx6-3.14/arch/sparc/include/asm/tsb.h 2014-09-11 18:05:57.694020763 +0200 @@ -171,8 +171,7 @@ andcc REG1, REG2, %g0; \ be,pt %xcc, 700f; \ @@ -42569,7 +42569,7 @@ diff -Nur linux-3.14.17/arch/sparc/include/asm/tsb.h linux-imx6-3.14/arch/sparc/ or REG1, REG2, REG1; \ diff -Nur linux-3.14.17/arch/sparc/kernel/head_64.S linux-imx6-3.14/arch/sparc/kernel/head_64.S --- linux-3.14.17/arch/sparc/kernel/head_64.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/head_64.S 2014-09-09 10:13:48.380950320 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/head_64.S 2014-09-11 18:05:57.710020827 +0200 @@ -282,8 +282,8 @@ stx %l2, [%l4 + 0x0] ldx [%sp + 2047 + 128 + 0x50], %l3 ! physaddr low @@ -42583,7 +42583,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/head_64.S linux-imx6-3.14/arch/sparc/k /* Leave service as-is, "call-method" */ diff -Nur linux-3.14.17/arch/sparc/kernel/ktlb.S linux-imx6-3.14/arch/sparc/kernel/ktlb.S --- linux-3.14.17/arch/sparc/kernel/ktlb.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/ktlb.S 2014-09-09 10:13:48.384950352 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/ktlb.S 2014-09-11 18:05:57.714020844 +0200 @@ -277,7 +277,7 @@ #ifdef CONFIG_SPARSEMEM_VMEMMAP kvmap_vmemmap: @@ -42595,7 +42595,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/ktlb.S linux-imx6-3.14/arch/sparc/kern or %g1, %lo(vmemmap_table), %g1 diff -Nur linux-3.14.17/arch/sparc/kernel/ldc.c linux-imx6-3.14/arch/sparc/kernel/ldc.c --- linux-3.14.17/arch/sparc/kernel/ldc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/ldc.c 2014-09-09 10:13:48.384950352 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/ldc.c 2014-09-11 18:05:57.714020844 +0200 @@ -1336,7 +1336,7 @@ if (!(lp->flags & LDC_FLAG_ALLOCED_QUEUES) || !(lp->flags & LDC_FLAG_REGISTERED_QUEUES) || @@ -42607,7 +42607,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/ldc.c linux-imx6-3.14/arch/sparc/kerne diff -Nur linux-3.14.17/arch/sparc/kernel/smp_64.c linux-imx6-3.14/arch/sparc/kernel/smp_64.c --- linux-3.14.17/arch/sparc/kernel/smp_64.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/smp_64.c 2014-09-09 10:13:48.392950418 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/smp_64.c 2014-09-11 18:05:57.754021003 +0200 @@ -151,7 +151,7 @@ #define NUM_ROUNDS 64 /* magic value */ #define NUM_ITERS 5 /* likewise */ @@ -42637,7 +42637,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/smp_64.c linux-imx6-3.14/arch/sparc/ke #if defined(CONFIG_SUN_LDOMS) && defined(CONFIG_HOTPLUG_CPU) diff -Nur linux-3.14.17/arch/sparc/kernel/sys32.S linux-imx6-3.14/arch/sparc/kernel/sys32.S --- linux-3.14.17/arch/sparc/kernel/sys32.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/sys32.S 2014-09-09 10:13:48.392950418 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/sys32.S 2014-09-11 18:05:57.766021051 +0200 @@ -44,7 +44,7 @@ SIGN1(sys32_io_submit, compat_sys_io_submit, %o1) SIGN1(sys32_mq_open, compat_sys_mq_open, %o1) @@ -42649,7 +42649,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/sys32.S linux-imx6-3.14/arch/sparc/ker SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0) diff -Nur linux-3.14.17/arch/sparc/kernel/unaligned_64.c linux-imx6-3.14/arch/sparc/kernel/unaligned_64.c --- linux-3.14.17/arch/sparc/kernel/unaligned_64.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/kernel/unaligned_64.c 2014-09-09 10:13:48.416950614 +0200 ++++ linux-imx6-3.14/arch/sparc/kernel/unaligned_64.c 2014-09-11 18:05:57.774021083 +0200 @@ -166,23 +166,17 @@ unsigned long compute_effective_address(struct pt_regs *regs, unsigned int insn, unsigned int rd) @@ -42679,7 +42679,7 @@ diff -Nur linux-3.14.17/arch/sparc/kernel/unaligned_64.c linux-imx6-3.14/arch/sp /* This is just to make gcc think die_if_kernel does return... */ diff -Nur linux-3.14.17/arch/sparc/lib/NG2memcpy.S linux-imx6-3.14/arch/sparc/lib/NG2memcpy.S --- linux-3.14.17/arch/sparc/lib/NG2memcpy.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/lib/NG2memcpy.S 2014-09-09 10:13:48.420950646 +0200 ++++ linux-imx6-3.14/arch/sparc/lib/NG2memcpy.S 2014-09-11 18:05:57.814021242 +0200 @@ -236,7 +236,6 @@ */ VISEntryHalf @@ -42690,7 +42690,7 @@ diff -Nur linux-3.14.17/arch/sparc/lib/NG2memcpy.S linux-imx6-3.14/arch/sparc/li add %o1, (64 - 1), %o4 diff -Nur linux-3.14.17/arch/sparc/math-emu/math_32.c linux-imx6-3.14/arch/sparc/math-emu/math_32.c --- linux-3.14.17/arch/sparc/math-emu/math_32.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/math-emu/math_32.c 2014-09-09 10:13:48.424950678 +0200 ++++ linux-imx6-3.14/arch/sparc/math-emu/math_32.c 2014-09-11 18:05:57.866021451 +0200 @@ -499,7 +499,7 @@ case 0: fsr = *pfsr; if (IR == -1) IR = 2; @@ -42702,7 +42702,7 @@ diff -Nur linux-3.14.17/arch/sparc/math-emu/math_32.c linux-imx6-3.14/arch/sparc case 1: rd->s = IR; break; diff -Nur linux-3.14.17/arch/sparc/mm/fault_64.c linux-imx6-3.14/arch/sparc/mm/fault_64.c --- linux-3.14.17/arch/sparc/mm/fault_64.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/mm/fault_64.c 2014-09-09 10:13:48.428950711 +0200 ++++ linux-imx6-3.14/arch/sparc/mm/fault_64.c 2014-09-11 18:05:57.866021451 +0200 @@ -96,51 +96,38 @@ pte_t *ptep, pte; unsigned long pa; @@ -42863,7 +42863,7 @@ diff -Nur linux-3.14.17/arch/sparc/mm/fault_64.c linux-imx6-3.14/arch/sparc/mm/f if (regs->tstate & TSTATE_PRIV) diff -Nur linux-3.14.17/arch/sparc/mm/gup.c linux-imx6-3.14/arch/sparc/mm/gup.c --- linux-3.14.17/arch/sparc/mm/gup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/mm/gup.c 2014-09-09 10:13:48.428950711 +0200 ++++ linux-imx6-3.14/arch/sparc/mm/gup.c 2014-09-11 18:05:57.866021451 +0200 @@ -73,7 +73,7 @@ struct page *head, *page, *tail; int refs; @@ -42875,7 +42875,7 @@ diff -Nur linux-3.14.17/arch/sparc/mm/gup.c linux-imx6-3.14/arch/sparc/mm/gup.c if (write && !pmd_write(pmd)) diff -Nur linux-3.14.17/arch/sparc/mm/init_64.c linux-imx6-3.14/arch/sparc/mm/init_64.c --- linux-3.14.17/arch/sparc/mm/init_64.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/mm/init_64.c 2014-09-09 10:13:48.428950711 +0200 ++++ linux-imx6-3.14/arch/sparc/mm/init_64.c 2014-09-11 18:05:57.870021467 +0200 @@ -350,10 +350,6 @@ mm = vma->vm_mm; @@ -42981,7 +42981,7 @@ diff -Nur linux-3.14.17/arch/sparc/mm/init_64.c linux-imx6-3.14/arch/sparc/mm/in -} diff -Nur linux-3.14.17/arch/sparc/mm/tlb.c linux-imx6-3.14/arch/sparc/mm/tlb.c --- linux-3.14.17/arch/sparc/mm/tlb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/mm/tlb.c 2014-09-09 10:13:48.428950711 +0200 ++++ linux-imx6-3.14/arch/sparc/mm/tlb.c 2014-09-11 18:05:57.870021467 +0200 @@ -134,7 +134,7 @@ #ifdef CONFIG_TRANSPARENT_HUGEPAGE @@ -43041,7 +43041,7 @@ diff -Nur linux-3.14.17/arch/sparc/mm/tlb.c linux-imx6-3.14/arch/sparc/mm/tlb.c { diff -Nur linux-3.14.17/arch/sparc/mm/tsb.c linux-imx6-3.14/arch/sparc/mm/tsb.c --- linux-3.14.17/arch/sparc/mm/tsb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/sparc/mm/tsb.c 2014-09-09 10:13:48.428950711 +0200 ++++ linux-imx6-3.14/arch/sparc/mm/tsb.c 2014-09-11 18:05:57.870021467 +0200 @@ -133,19 +133,7 @@ mm->context.tsb_block[tsb_idx].tsb_nentries = tsb_bytes / sizeof(struct tsb); @@ -43065,7 +43065,7 @@ diff -Nur linux-3.14.17/arch/sparc/mm/tsb.c linux-imx6-3.14/arch/sparc/mm/tsb.c BUG_ON(tsb_paddr & (tsb_bytes - 1UL)); diff -Nur linux-3.14.17/arch/x86/boot/header.S linux-imx6-3.14/arch/x86/boot/header.S --- linux-3.14.17/arch/x86/boot/header.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/boot/header.S 2014-09-09 10:13:48.484951168 +0200 ++++ linux-imx6-3.14/arch/x86/boot/header.S 2014-09-11 18:05:58.266023049 +0200 @@ -91,9 +91,10 @@ .section ".bsdata", "a" @@ -43116,7 +43116,7 @@ diff -Nur linux-3.14.17/arch/x86/boot/header.S linux-imx6-3.14/arch/x86/boot/hea # Kernel attributes; used by setup. This is part 1 of the diff -Nur linux-3.14.17/arch/x86/boot/tools/build.c linux-imx6-3.14/arch/x86/boot/tools/build.c --- linux-3.14.17/arch/x86/boot/tools/build.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/boot/tools/build.c 2014-09-09 10:13:48.484951168 +0200 ++++ linux-imx6-3.14/arch/x86/boot/tools/build.c 2014-09-11 18:05:58.326023289 +0200 @@ -142,7 +142,7 @@ #ifdef CONFIG_EFI_STUB @@ -43227,7 +43227,7 @@ diff -Nur linux-3.14.17/arch/x86/include/asm/espfix.h linux-imx6-3.14/arch/x86/i -#endif /* _ASM_X86_ESPFIX_H */ diff -Nur linux-3.14.17/arch/x86/include/asm/irqflags.h linux-imx6-3.14/arch/x86/include/asm/irqflags.h --- linux-3.14.17/arch/x86/include/asm/irqflags.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/include/asm/irqflags.h 2014-09-09 10:13:48.504951332 +0200 ++++ linux-imx6-3.14/arch/x86/include/asm/irqflags.h 2014-09-11 18:05:58.386023528 +0200 @@ -129,7 +129,7 @@ #define PARAVIRT_ADJUST_EXCEPTION_FRAME /* */ @@ -43239,7 +43239,7 @@ diff -Nur linux-3.14.17/arch/x86/include/asm/irqflags.h linux-imx6-3.14/arch/x86 sysretq; diff -Nur linux-3.14.17/arch/x86/include/asm/pgtable_64_types.h linux-imx6-3.14/arch/x86/include/asm/pgtable_64_types.h --- linux-3.14.17/arch/x86/include/asm/pgtable_64_types.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/include/asm/pgtable_64_types.h 2014-09-09 10:13:48.508951364 +0200 ++++ linux-imx6-3.14/arch/x86/include/asm/pgtable_64_types.h 2014-09-11 18:05:58.390023544 +0200 @@ -61,8 +61,6 @@ #define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE) #define MODULES_END _AC(0xffffffffff000000, UL) @@ -43251,7 +43251,7 @@ diff -Nur linux-3.14.17/arch/x86/include/asm/pgtable_64_types.h linux-imx6-3.14/ diff -Nur linux-3.14.17/arch/x86/include/asm/setup.h linux-imx6-3.14/arch/x86/include/asm/setup.h --- linux-3.14.17/arch/x86/include/asm/setup.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/include/asm/setup.h 2014-09-09 10:13:48.512951397 +0200 ++++ linux-imx6-3.14/arch/x86/include/asm/setup.h 2014-09-11 18:05:58.414023641 +0200 @@ -65,8 +65,6 @@ #ifndef _SETUP @@ -43263,7 +43263,7 @@ diff -Nur linux-3.14.17/arch/x86/include/asm/setup.h linux-imx6-3.14/arch/x86/in */ diff -Nur linux-3.14.17/arch/x86/Kconfig linux-imx6-3.14/arch/x86/Kconfig --- linux-3.14.17/arch/x86/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/Kconfig 2014-09-09 10:13:48.480951135 +0200 ++++ linux-imx6-3.14/arch/x86/Kconfig 2014-09-11 18:05:58.262023032 +0200 @@ -966,27 +966,10 @@ default y depends on X86_32 @@ -43298,7 +43298,7 @@ diff -Nur linux-3.14.17/arch/x86/Kconfig linux-imx6-3.14/arch/x86/Kconfig tristate "Toshiba Laptop support" diff -Nur linux-3.14.17/arch/x86/kernel/entry_32.S linux-imx6-3.14/arch/x86/kernel/entry_32.S --- linux-3.14.17/arch/x86/kernel/entry_32.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/entry_32.S 2014-09-09 10:13:48.536951592 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/entry_32.S 2014-09-11 18:05:58.538024137 +0200 @@ -433,8 +433,8 @@ cmpl $(NR_syscalls), %eax jae sysenter_badsys @@ -43424,7 +43424,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/entry_32.S linux-imx6-3.14/arch/x86/kern diff -Nur linux-3.14.17/arch/x86/kernel/entry_64.S linux-imx6-3.14/arch/x86/kernel/entry_64.S --- linux-3.14.17/arch/x86/kernel/entry_64.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/entry_64.S 2014-09-09 10:13:48.536951592 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/entry_64.S 2014-09-11 18:05:58.538024137 +0200 @@ -58,7 +58,6 @@ #include <asm/asm.h> #include <asm/context_tracking.h> @@ -43756,7 +43756,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/espfix_64.c linux-imx6-3.14/arch/x86/ker -} diff -Nur linux-3.14.17/arch/x86/kernel/ldt.c linux-imx6-3.14/arch/x86/kernel/ldt.c --- linux-3.14.17/arch/x86/kernel/ldt.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/ldt.c 2014-09-09 10:13:48.540951626 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/ldt.c 2014-09-11 18:05:58.546024168 +0200 @@ -20,6 +20,8 @@ #include <asm/mmu_context.h> #include <asm/syscalls.h> @@ -43786,7 +43786,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/ldt.c linux-imx6-3.14/arch/x86/kernel/ld if (oldmode) diff -Nur linux-3.14.17/arch/x86/kernel/Makefile linux-imx6-3.14/arch/x86/kernel/Makefile --- linux-3.14.17/arch/x86/kernel/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/Makefile 2014-09-09 10:13:48.520951462 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/Makefile 2014-09-11 18:05:58.478023896 +0200 @@ -29,7 +29,6 @@ obj-y += syscall_$(BITS).o obj-$(CONFIG_X86_64) += vsyscall_64.o @@ -43797,7 +43797,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/Makefile linux-imx6-3.14/arch/x86/kernel obj-y += pci-dma.o quirks.o topology.o kdebugfs.o diff -Nur linux-3.14.17/arch/x86/kernel/paravirt_patch_64.c linux-imx6-3.14/arch/x86/kernel/paravirt_patch_64.c --- linux-3.14.17/arch/x86/kernel/paravirt_patch_64.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/paravirt_patch_64.c 2014-09-09 10:13:48.540951626 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/paravirt_patch_64.c 2014-09-11 18:05:58.546024168 +0200 @@ -6,6 +6,7 @@ DEF_NATIVE(pv_irq_ops, irq_enable, "sti"); DEF_NATIVE(pv_irq_ops, restore_fl, "pushq %rdi; popfq"); @@ -43816,7 +43816,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/paravirt_patch_64.c linux-imx6-3.14/arch PATCH_SITE(pv_cpu_ops, usergs_sysret64); diff -Nur linux-3.14.17/arch/x86/kernel/setup.c linux-imx6-3.14/arch/x86/kernel/setup.c --- linux-3.14.17/arch/x86/kernel/setup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/setup.c 2014-09-09 10:13:48.544951658 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/setup.c 2014-09-11 18:05:58.578024296 +0200 @@ -1120,7 +1120,7 @@ setup_real_mode(); @@ -43828,7 +43828,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/setup.c linux-imx6-3.14/arch/x86/kernel/ * NOTE: On x86-32, only from this point on, fixmaps are ready for use. diff -Nur linux-3.14.17/arch/x86/kernel/smpboot.c linux-imx6-3.14/arch/x86/kernel/smpboot.c --- linux-3.14.17/arch/x86/kernel/smpboot.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/kernel/smpboot.c 2014-09-09 10:13:48.544951658 +0200 ++++ linux-imx6-3.14/arch/x86/kernel/smpboot.c 2014-09-11 18:05:58.582024312 +0200 @@ -243,13 +243,6 @@ check_tsc_sync_target(); @@ -43845,7 +43845,7 @@ diff -Nur linux-3.14.17/arch/x86/kernel/smpboot.c linux-imx6-3.14/arch/x86/kerne * this lock ensures we don't half assign or remove an irq from a cpu. diff -Nur linux-3.14.17/arch/x86/mm/dump_pagetables.c linux-imx6-3.14/arch/x86/mm/dump_pagetables.c --- linux-3.14.17/arch/x86/mm/dump_pagetables.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/mm/dump_pagetables.c 2014-09-09 10:13:48.564951821 +0200 ++++ linux-imx6-3.14/arch/x86/mm/dump_pagetables.c 2014-09-11 18:05:58.694024760 +0200 @@ -30,13 +30,11 @@ unsigned long start_address; unsigned long current_address; @@ -43927,7 +43927,7 @@ diff -Nur linux-3.14.17/arch/x86/mm/dump_pagetables.c linux-imx6-3.14/arch/x86/m * We print markers for special areas of address space, diff -Nur linux-3.14.17/arch/x86/vdso/vdso32-setup.c linux-imx6-3.14/arch/x86/vdso/vdso32-setup.c --- linux-3.14.17/arch/x86/vdso/vdso32-setup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/vdso/vdso32-setup.c 2014-09-09 10:13:48.584951984 +0200 ++++ linux-imx6-3.14/arch/x86/vdso/vdso32-setup.c 2014-09-11 18:05:58.862025430 +0200 @@ -41,6 +41,7 @@ #ifdef CONFIG_X86_64 #define vdso_enabled sysctl_vsyscall32 @@ -43952,7 +43952,7 @@ diff -Nur linux-3.14.17/arch/x86/vdso/vdso32-setup.c linux-imx6-3.14/arch/x86/vd }; diff -Nur linux-3.14.17/arch/x86/xen/setup.c linux-imx6-3.14/arch/x86/xen/setup.c --- linux-3.14.17/arch/x86/xen/setup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/x86/xen/setup.c 2014-09-09 10:13:48.588952016 +0200 ++++ linux-imx6-3.14/arch/x86/xen/setup.c 2014-09-11 18:05:58.890025543 +0200 @@ -574,7 +574,13 @@ } #endif /* CONFIG_X86_64 */ @@ -43978,7 +43978,7 @@ diff -Nur linux-3.14.17/arch/x86/xen/setup.c linux-imx6-3.14/arch/x86/xen/setup. /* This function is not called for HVM domains */ diff -Nur linux-3.14.17/arch/xtensa/kernel/vectors.S linux-imx6-3.14/arch/xtensa/kernel/vectors.S --- linux-3.14.17/arch/xtensa/kernel/vectors.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/xtensa/kernel/vectors.S 2014-09-09 10:13:48.600952115 +0200 ++++ linux-imx6-3.14/arch/xtensa/kernel/vectors.S 2014-09-11 18:05:59.070026262 +0200 @@ -376,42 +376,38 @@ beqz a2, 1f # if at start of vector, don't restore @@ -44175,7 +44175,7 @@ diff -Nur linux-3.14.17/arch/xtensa/kernel/vectors.S linux-imx6-3.14/arch/xtensa * There is not much space here, so simply jump to another handler. diff -Nur linux-3.14.17/arch/xtensa/kernel/vmlinux.lds.S linux-imx6-3.14/arch/xtensa/kernel/vmlinux.lds.S --- linux-3.14.17/arch/xtensa/kernel/vmlinux.lds.S 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/arch/xtensa/kernel/vmlinux.lds.S 2014-09-09 10:13:48.600952115 +0200 ++++ linux-imx6-3.14/arch/xtensa/kernel/vmlinux.lds.S 2014-09-11 18:05:59.070026262 +0200 @@ -269,13 +269,13 @@ .UserExceptionVector.literal) SECTION_VECTOR (_DoubleExceptionVector_literal, @@ -44194,7 +44194,7 @@ diff -Nur linux-3.14.17/arch/xtensa/kernel/vmlinux.lds.S linux-imx6-3.14/arch/xt . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3; diff -Nur linux-3.14.17/block/bfq-cgroup.c linux-imx6-3.14/block/bfq-cgroup.c --- linux-3.14.17/block/bfq-cgroup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/block/bfq-cgroup.c 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/bfq-cgroup.c 2014-09-11 18:05:59.118026454 +0200 @@ -0,0 +1,932 @@ +/* + * BFQ: CGROUPS support. @@ -45130,7 +45130,7 @@ diff -Nur linux-3.14.17/block/bfq-cgroup.c linux-imx6-3.14/block/bfq-cgroup.c +#endif diff -Nur linux-3.14.17/block/bfq.h linux-imx6-3.14/block/bfq.h --- linux-3.14.17/block/bfq.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/block/bfq.h 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/bfq.h 2014-09-11 18:05:59.118026454 +0200 @@ -0,0 +1,770 @@ +/* + * BFQ-v7r5 for 3.14.0: data structures and common functions prototypes. @@ -45904,7 +45904,7 @@ diff -Nur linux-3.14.17/block/bfq.h linux-imx6-3.14/block/bfq.h +#endif /* _BFQ_H */ diff -Nur linux-3.14.17/block/bfq-ioc.c linux-imx6-3.14/block/bfq-ioc.c --- linux-3.14.17/block/bfq-ioc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/block/bfq-ioc.c 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/bfq-ioc.c 2014-09-11 18:05:59.118026454 +0200 @@ -0,0 +1,36 @@ +/* + * BFQ: I/O context handling. @@ -45944,7 +45944,7 @@ diff -Nur linux-3.14.17/block/bfq-ioc.c linux-imx6-3.14/block/bfq-ioc.c +} diff -Nur linux-3.14.17/block/bfq-iosched.c linux-imx6-3.14/block/bfq-iosched.c --- linux-3.14.17/block/bfq-iosched.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/block/bfq-iosched.c 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/bfq-iosched.c 2014-09-11 18:05:59.118026454 +0200 @@ -0,0 +1,3919 @@ +/* + * Budget Fair Queueing (BFQ) disk scheduler. @@ -49867,7 +49867,7 @@ diff -Nur linux-3.14.17/block/bfq-iosched.c linux-imx6-3.14/block/bfq-iosched.c +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/block/bfq-sched.c linux-imx6-3.14/block/bfq-sched.c --- linux-3.14.17/block/bfq-sched.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/block/bfq-sched.c 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/bfq-sched.c 2014-09-11 18:05:59.118026454 +0200 @@ -0,0 +1,1179 @@ +/* + * BFQ: Hierarchical B-WF2Q+ scheduler. @@ -51050,7 +51050,7 @@ diff -Nur linux-3.14.17/block/bfq-sched.c linux-imx6-3.14/block/bfq-sched.c +} diff -Nur linux-3.14.17/block/blk-cgroup.c linux-imx6-3.14/block/blk-cgroup.c --- linux-3.14.17/block/blk-cgroup.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/blk-cgroup.c 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/blk-cgroup.c 2014-09-11 18:05:59.118026454 +0200 @@ -859,13 +859,6 @@ { lockdep_assert_held(q->queue_lock); @@ -51067,7 +51067,7 @@ diff -Nur linux-3.14.17/block/blk-cgroup.c linux-imx6-3.14/block/blk-cgroup.c diff -Nur linux-3.14.17/block/blk-core.c linux-imx6-3.14/block/blk-core.c --- linux-3.14.17/block/blk-core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/blk-core.c 2014-09-09 10:13:48.608952180 +0200 ++++ linux-imx6-3.14/block/blk-core.c 2014-09-11 18:05:59.122026470 +0200 @@ -1928,7 +1928,7 @@ * in some cases below, so export this function. * Request stacking drivers like request-based dm may change the queue @@ -51079,7 +51079,7 @@ diff -Nur linux-3.14.17/block/blk-core.c linux-imx6-3.14/block/blk-core.c * when submitting requests. diff -Nur linux-3.14.17/block/blk-map.c linux-imx6-3.14/block/blk-map.c --- linux-3.14.17/block/blk-map.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/blk-map.c 2014-09-09 10:13:48.608952180 +0200 ++++ linux-imx6-3.14/block/blk-map.c 2014-09-11 18:05:59.122026470 +0200 @@ -285,7 +285,7 @@ * * Description: @@ -51091,7 +51091,7 @@ diff -Nur linux-3.14.17/block/blk-map.c linux-imx6-3.14/block/blk-map.c int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, diff -Nur linux-3.14.17/block/blk-tag.c linux-imx6-3.14/block/blk-tag.c --- linux-3.14.17/block/blk-tag.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/blk-tag.c 2014-09-09 10:13:48.608952180 +0200 ++++ linux-imx6-3.14/block/blk-tag.c 2014-09-11 18:05:59.122026470 +0200 @@ -27,15 +27,18 @@ EXPORT_SYMBOL(blk_queue_find_tag); @@ -51159,7 +51159,7 @@ diff -Nur linux-3.14.17/block/blk-tag.c linux-imx6-3.14/block/blk-tag.c * diff -Nur linux-3.14.17/block/compat_ioctl.c linux-imx6-3.14/block/compat_ioctl.c --- linux-3.14.17/block/compat_ioctl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/compat_ioctl.c 2014-09-09 10:13:48.612952213 +0200 ++++ linux-imx6-3.14/block/compat_ioctl.c 2014-09-11 18:05:59.126026486 +0200 @@ -690,7 +690,6 @@ case BLKROSET: case BLKDISCARD: @@ -51170,7 +51170,7 @@ diff -Nur linux-3.14.17/block/compat_ioctl.c linux-imx6-3.14/block/compat_ioctl. * but we call blkdev_ioctl, which gets the lock for us diff -Nur linux-3.14.17/block/Kconfig.iosched linux-imx6-3.14/block/Kconfig.iosched --- linux-3.14.17/block/Kconfig.iosched 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/Kconfig.iosched 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/Kconfig.iosched 2014-09-11 18:05:59.118026454 +0200 @@ -39,6 +39,27 @@ ---help--- Enable group IO scheduling in CFQ. @@ -51226,7 +51226,7 @@ diff -Nur linux-3.14.17/block/Kconfig.iosched linux-imx6-3.14/block/Kconfig.iosc endmenu diff -Nur linux-3.14.17/block/Makefile linux-imx6-3.14/block/Makefile --- linux-3.14.17/block/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/block/Makefile 2014-09-09 10:13:48.604952147 +0200 ++++ linux-imx6-3.14/block/Makefile 2014-09-11 18:05:59.118026454 +0200 @@ -16,6 +16,7 @@ obj-$(CONFIG_IOSCHED_NOOP) += noop-iosched.o obj-$(CONFIG_IOSCHED_DEADLINE) += deadline-iosched.o @@ -51237,7 +51237,7 @@ diff -Nur linux-3.14.17/block/Makefile linux-imx6-3.14/block/Makefile obj-$(CONFIG_BLK_DEV_INTEGRITY) += blk-integrity.o diff -Nur linux-3.14.17/crypto/af_alg.c linux-imx6-3.14/crypto/af_alg.c --- linux-3.14.17/crypto/af_alg.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/crypto/af_alg.c 2014-09-09 10:13:48.616952245 +0200 ++++ linux-imx6-3.14/crypto/af_alg.c 2014-09-11 18:05:59.134026519 +0200 @@ -21,7 +21,6 @@ #include <linux/module.h> #include <linux/net.h> @@ -51256,7 +51256,7 @@ diff -Nur linux-3.14.17/crypto/af_alg.c linux-imx6-3.14/crypto/af_alg.c if (err) { diff -Nur linux-3.14.17/crypto/blkcipher.c linux-imx6-3.14/crypto/blkcipher.c --- linux-3.14.17/crypto/blkcipher.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/crypto/blkcipher.c 2014-09-09 10:13:48.620952278 +0200 ++++ linux-imx6-3.14/crypto/blkcipher.c 2014-09-11 18:05:59.150026582 +0200 @@ -70,14 +70,12 @@ return max(start, end_page); } @@ -51458,7 +51458,7 @@ diff -Nur linux-3.14.17/crypto/blkcipher.c linux-imx6-3.14/crypto/blkcipher.c { diff -Nur linux-3.14.17/crypto/tcrypt.c linux-imx6-3.14/crypto/tcrypt.c --- linux-3.14.17/crypto/tcrypt.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/crypto/tcrypt.c 2014-09-09 10:13:48.624952310 +0200 ++++ linux-imx6-3.14/crypto/tcrypt.c 2014-09-11 18:05:59.186026726 +0200 @@ -33,6 +33,7 @@ #include <linux/jiffies.h> #include <linux/timex.h> @@ -51509,7 +51509,7 @@ diff -Nur linux-3.14.17/crypto/tcrypt.c linux-imx6-3.14/crypto/tcrypt.c } diff -Nur linux-3.14.17/Documentation/ABI/testing/sysfs-class-net-statistics linux-imx6-3.14/Documentation/ABI/testing/sysfs-class-net-statistics --- linux-3.14.17/Documentation/ABI/testing/sysfs-class-net-statistics 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/ABI/testing/sysfs-class-net-statistics 2014-09-09 10:13:46.792937360 +0200 ++++ linux-imx6-3.14/Documentation/ABI/testing/sysfs-class-net-statistics 2014-09-11 18:05:51.685996745 +0200 @@ -0,0 +1,201 @@ +What: /sys/class/<iface>/statistics/collisions +Date: April 2005 @@ -51714,7 +51714,7 @@ diff -Nur linux-3.14.17/Documentation/ABI/testing/sysfs-class-net-statistics lin + late collisions errors. diff -Nur linux-3.14.17/Documentation/arm64/booting.txt linux-imx6-3.14/Documentation/arm64/booting.txt --- linux-3.14.17/Documentation/arm64/booting.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/arm64/booting.txt 2014-09-09 10:13:46.868937981 +0200 ++++ linux-imx6-3.14/Documentation/arm64/booting.txt 2014-09-11 18:05:51.793997177 +0200 @@ -111,8 +111,14 @@ - Caches, MMUs The MMU must be off. @@ -51734,7 +51734,7 @@ diff -Nur linux-3.14.17/Documentation/arm64/booting.txt linux-imx6-3.14/Document CNTFRQ must be programmed with the timer frequency and CNTVOFF must diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt --- linux-3.14.17/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt 2014-09-09 10:13:46.908938309 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.txt 2014-09-11 18:05:51.825997304 +0200 @@ -0,0 +1,64 @@ +Freescale Busfreq driver + @@ -51802,7 +51802,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/imx/busfreq-imx6.t +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/imx/gpc.txt linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/gpc.txt --- linux-3.14.17/Documentation/devicetree/bindings/arm/imx/gpc.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/gpc.txt 2014-09-09 10:13:46.908938309 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/imx/gpc.txt 2014-09-11 18:05:51.825997304 +0200 @@ -0,0 +1,20 @@ +Freescale imx GPC bindings + @@ -51826,7 +51826,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/imx/gpc.txt linux- + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/pmu.txt linux-imx6-3.14/Documentation/devicetree/bindings/arm/pmu.txt --- linux-3.14.17/Documentation/devicetree/bindings/arm/pmu.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/pmu.txt 2014-09-09 10:13:46.912938342 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/arm/pmu.txt 2014-09-11 18:05:51.825997304 +0200 @@ -17,6 +17,9 @@ "arm,arm1176-pmu" "arm,arm1136-pmu" @@ -51839,7 +51839,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/arm/pmu.txt linux-imx6 diff -Nur linux-3.14.17/Documentation/devicetree/bindings/ata/ahci-platform.txt linux-imx6-3.14/Documentation/devicetree/bindings/ata/ahci-platform.txt --- linux-3.14.17/Documentation/devicetree/bindings/ata/ahci-platform.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/ata/ahci-platform.txt 2014-09-09 10:13:46.912938342 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/ata/ahci-platform.txt 2014-09-11 18:05:51.833997337 +0200 @@ -4,12 +4,19 @@ Each SATA controller should have its own node. @@ -51863,7 +51863,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/ata/ahci-platform.txt sata@ffe08000 { diff -Nur linux-3.14.17/Documentation/devicetree/bindings/clock/imx6q-clock.txt linux-imx6-3.14/Documentation/devicetree/bindings/clock/imx6q-clock.txt --- linux-3.14.17/Documentation/devicetree/bindings/clock/imx6q-clock.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/clock/imx6q-clock.txt 2014-09-09 10:13:46.916938373 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/clock/imx6q-clock.txt 2014-09-11 18:05:51.837997352 +0200 @@ -89,8 +89,6 @@ gpu3d_shader 74 ipu1_podf 75 @@ -51896,7 +51896,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/clock/imx6q-clock.txt diff -Nur linux-3.14.17/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt linux-imx6-3.14/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt --- linux-3.14.17/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt 2014-09-09 10:13:46.920938405 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt 2014-09-11 18:05:51.845997384 +0200 @@ -47,6 +47,7 @@ 20 ASRC 21 ESAI @@ -51907,7 +51907,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt l diff -Nur linux-3.14.17/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt linux-imx6-3.14/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt --- linux-3.14.17/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt 2014-09-09 10:13:46.920938405 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt 2014-09-11 18:05:51.845997384 +0200 @@ -0,0 +1,146 @@ +* FSL IPUv3 Display/FB + @@ -52057,7 +52057,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt li + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/leds/leds-pwm.txt linux-imx6-3.14/Documentation/devicetree/bindings/leds/leds-pwm.txt --- linux-3.14.17/Documentation/devicetree/bindings/leds/leds-pwm.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/leds/leds-pwm.txt 2014-09-09 10:13:46.928938471 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/leds/leds-pwm.txt 2014-09-11 18:05:51.857997433 +0200 @@ -13,6 +13,8 @@ For the pwms and pwm-names property please refer to: Documentation/devicetree/bindings/pwm/pwm.txt @@ -52069,7 +52069,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/leds/leds-pwm.txt linu - linux,default-trigger : (optional) diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mailbox/mailbox.txt linux-imx6-3.14/Documentation/devicetree/bindings/mailbox/mailbox.txt --- linux-3.14.17/Documentation/devicetree/bindings/mailbox/mailbox.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/mailbox/mailbox.txt 2014-09-09 10:13:46.928938471 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/mailbox/mailbox.txt 2014-09-11 18:05:51.857997433 +0200 @@ -0,0 +1,33 @@ +* Generic Mailbox Controller and client driver bindings + @@ -52106,7 +52106,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mailbox/mailbox.txt li + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mlb/mlb150.txt linux-imx6-3.14/Documentation/devicetree/bindings/mlb/mlb150.txt --- linux-3.14.17/Documentation/devicetree/bindings/mlb/mlb150.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/mlb/mlb150.txt 2014-09-09 10:13:46.932938505 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/mlb/mlb150.txt 2014-09-11 18:05:51.865997464 +0200 @@ -0,0 +1,22 @@ +* Freescale Media Local Bus Host Controller (MLB) for i.MX6Q/DL + @@ -52132,7 +52132,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mlb/mlb150.txt linux-i +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mmc/mmc.txt linux-imx6-3.14/Documentation/devicetree/bindings/mmc/mmc.txt --- linux-3.14.17/Documentation/devicetree/bindings/mmc/mmc.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/mmc/mmc.txt 2014-09-09 10:13:46.932938505 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/mmc/mmc.txt 2014-09-11 18:05:51.865997464 +0200 @@ -5,6 +5,8 @@ Interpreted by the OF core: - reg: Registers location and length. @@ -52160,7 +52160,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/mmc/mmc.txt linux-imx6 line levels. We choose to follow the SDHCI standard, which specifies both those diff -Nur linux-3.14.17/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt linux-imx6-3.14/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt --- linux-3.14.17/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt 2014-09-09 10:13:46.940938569 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt 2014-09-11 18:05:51.905997624 +0200 @@ -71,6 +71,13 @@ name for integer state ID 0, list entry 1 for state ID 1, and so on. @@ -52177,7 +52177,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/pinctrl/pinctrl-bindin /* For a client device requiring named states */ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/reset/gpio-reset.txt linux-imx6-3.14/Documentation/devicetree/bindings/reset/gpio-reset.txt --- linux-3.14.17/Documentation/devicetree/bindings/reset/gpio-reset.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/reset/gpio-reset.txt 2014-09-09 10:13:46.948938635 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/reset/gpio-reset.txt 2014-09-11 18:05:51.929997720 +0200 @@ -0,0 +1,35 @@ +GPIO reset controller +===================== @@ -52216,7 +52216,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/reset/gpio-reset.txt l +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/cs42888.txt linux-imx6-3.14/Documentation/devicetree/bindings/sound/cs42888.txt --- linux-3.14.17/Documentation/devicetree/bindings/sound/cs42888.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/cs42888.txt 2014-09-09 10:13:46.952938668 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/cs42888.txt 2014-09-11 18:05:51.937997752 +0200 @@ -0,0 +1,29 @@ +CS42888 audio CODEC + @@ -52249,7 +52249,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/cs42888.txt linu +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt linux-imx6-3.14/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt --- linux-3.14.17/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt 2014-09-09 10:13:46.952938668 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt 2014-09-11 18:05:51.937997752 +0200 @@ -0,0 +1,23 @@ +* Freescale Asynchronous Sample Rate Converter (ASRC) + @@ -52276,7 +52276,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/fsl-asrc-p2p.txt +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt --- linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt 2014-09-09 10:13:46.952938668 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt 2014-09-11 18:05:51.937997752 +0200 @@ -0,0 +1,25 @@ +Freescale i.MX audio complex with CS42888 codec + @@ -52305,7 +52305,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-cs4288 +}; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt --- linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt 2014-09-09 10:13:46.952938668 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt 2014-09-11 18:05:51.937997752 +0200 @@ -24,6 +24,12 @@ Note: The AUDMUX port numbering should start at 1, which is consistent with hardware manual. @@ -52328,7 +52328,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/imx-audio-wm8962 }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/wm8962.txt linux-imx6-3.14/Documentation/devicetree/bindings/sound/wm8962.txt --- linux-3.14.17/Documentation/devicetree/bindings/sound/wm8962.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/wm8962.txt 2014-09-09 10:13:46.952938668 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/sound/wm8962.txt 2014-09-11 18:05:51.949997800 +0200 @@ -13,6 +13,14 @@ of R51 (Class D Control 2) gets set, indicating that the speaker is in mono mode. @@ -52346,7 +52346,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/sound/wm8962.txt linux diff -Nur linux-3.14.17/Documentation/devicetree/bindings/usb/mxs-phy.txt linux-imx6-3.14/Documentation/devicetree/bindings/usb/mxs-phy.txt --- linux-3.14.17/Documentation/devicetree/bindings/usb/mxs-phy.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/usb/mxs-phy.txt 2014-09-09 10:13:46.956938700 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/usb/mxs-phy.txt 2014-09-11 18:05:51.977997912 +0200 @@ -1,13 +1,16 @@ * Freescale MXS USB Phy Device @@ -52367,7 +52367,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/usb/mxs-phy.txt linux- }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,csi-v4l2-capture.txt linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,csi-v4l2-capture.txt --- linux-3.14.17/Documentation/devicetree/bindings/video/fsl,csi-v4l2-capture.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,csi-v4l2-capture.txt 2014-09-09 10:13:46.960938732 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,csi-v4l2-capture.txt 2014-09-11 18:05:51.981997928 +0200 @@ -0,0 +1,61 @@ +* Freescale CMOS Sensor Interface (CSI) V4L2 Capture + @@ -52432,7 +52432,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,csi-v4l2-cap + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,mipi-csi2.txt linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,mipi-csi2.txt --- linux-3.14.17/Documentation/devicetree/bindings/video/fsl,mipi-csi2.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,mipi-csi2.txt 2014-09-09 10:13:46.960938732 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,mipi-csi2.txt 2014-09-11 18:05:51.981997928 +0200 @@ -0,0 +1,42 @@ +* Freescale MIPI CSI2 Controller for i.MX6DQ/i.MX6SDL + @@ -52478,7 +52478,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,mipi-csi2.tx + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,pxp.txt linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,pxp.txt --- linux-3.14.17/Documentation/devicetree/bindings/video/fsl,pxp.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,pxp.txt 2014-09-09 10:13:46.960938732 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,pxp.txt 2014-09-11 18:05:51.981997928 +0200 @@ -0,0 +1,30 @@ +* Freescale PxP Controller for i.MX6DL, i.MX6SL + @@ -52512,7 +52512,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,pxp.txt linu + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,v4l2-capture.txt linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,v4l2-capture.txt --- linux-3.14.17/Documentation/devicetree/bindings/video/fsl,v4l2-capture.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,v4l2-capture.txt 2014-09-09 10:13:46.960938732 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/video/fsl,v4l2-capture.txt 2014-09-11 18:05:51.981997928 +0200 @@ -0,0 +1,102 @@ +* Freescale V4L2 Capture for i.MX6DQ/i.MX6SDL + @@ -52618,7 +52618,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/fsl,v4l2-capture + }; diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/mxc_hdmi_video.txt linux-imx6-3.14/Documentation/devicetree/bindings/video/mxc_hdmi_video.txt --- linux-3.14.17/Documentation/devicetree/bindings/video/mxc_hdmi_video.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/Documentation/devicetree/bindings/video/mxc_hdmi_video.txt 2014-09-09 10:13:46.960938732 +0200 ++++ linux-imx6-3.14/Documentation/devicetree/bindings/video/mxc_hdmi_video.txt 2014-09-11 18:05:51.981997928 +0200 @@ -0,0 +1,20 @@ +Device-Tree bindings for hdmi video driver + @@ -52642,7 +52642,7 @@ diff -Nur linux-3.14.17/Documentation/devicetree/bindings/video/mxc_hdmi_video.t + diff -Nur linux-3.14.17/Documentation/filesystems/hfsplus.txt linux-imx6-3.14/Documentation/filesystems/hfsplus.txt --- linux-3.14.17/Documentation/filesystems/hfsplus.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/filesystems/hfsplus.txt 2014-09-09 10:13:46.976938864 +0200 ++++ linux-imx6-3.14/Documentation/filesystems/hfsplus.txt 2014-09-11 18:05:52.081998328 +0200 @@ -56,4 +56,4 @@ kernel source: <file:fs/hfsplus> @@ -52651,7 +52651,7 @@ diff -Nur linux-3.14.17/Documentation/filesystems/hfsplus.txt linux-imx6-3.14/Do +Apple Technote 1150 https://developer.apple.com/legacy/library/technotes/tn/tn1150.html diff -Nur linux-3.14.17/Documentation/kernel-parameters.txt linux-imx6-3.14/Documentation/kernel-parameters.txt --- linux-3.14.17/Documentation/kernel-parameters.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/kernel-parameters.txt 2014-09-09 10:13:47.028939289 +0200 ++++ linux-imx6-3.14/Documentation/kernel-parameters.txt 2014-09-11 18:05:52.177998711 +0200 @@ -603,8 +603,11 @@ Also note the kernel might malfunction if you disable some critical bits. @@ -52668,7 +52668,7 @@ diff -Nur linux-3.14.17/Documentation/kernel-parameters.txt linux-imx6-3.14/Docu diff -Nur linux-3.14.17/Documentation/networking/gianfar.txt linux-imx6-3.14/Documentation/networking/gianfar.txt --- linux-3.14.17/Documentation/networking/gianfar.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/networking/gianfar.txt 2014-09-09 10:13:47.052939484 +0200 ++++ linux-imx6-3.14/Documentation/networking/gianfar.txt 2014-09-11 18:05:52.233998935 +0200 @@ -1,38 +1,8 @@ The Gianfar Ethernet Driver -Sysfs File description @@ -52710,7 +52710,7 @@ diff -Nur linux-3.14.17/Documentation/networking/gianfar.txt linux-imx6-3.14/Doc diff -Nur linux-3.14.17/Documentation/x86/x86_64/mm.txt linux-imx6-3.14/Documentation/x86/x86_64/mm.txt --- linux-3.14.17/Documentation/x86/x86_64/mm.txt 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Documentation/x86/x86_64/mm.txt 2014-09-09 10:13:47.120940038 +0200 ++++ linux-imx6-3.14/Documentation/x86/x86_64/mm.txt 2014-09-11 18:05:52.449999800 +0200 @@ -12,8 +12,6 @@ ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB) @@ -52722,7 +52722,7 @@ diff -Nur linux-3.14.17/Documentation/x86/x86_64/mm.txt linux-imx6-3.14/Document ffffffffff600000 - ffffffffffdfffff (=8 MB) vsyscalls diff -Nur linux-3.14.17/drivers/ata/acard-ahci.c linux-imx6-3.14/drivers/ata/acard-ahci.c --- linux-3.14.17/drivers/ata/acard-ahci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/acard-ahci.c 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/acard-ahci.c 2014-09-11 18:05:59.410027622 +0200 @@ -36,7 +36,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -52733,7 +52733,7 @@ diff -Nur linux-3.14.17/drivers/ata/acard-ahci.c linux-imx6-3.14/drivers/ata/aca #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/ahci.c linux-imx6-3.14/drivers/ata/ahci.c --- linux-3.14.17/drivers/ata/ahci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/ahci.c 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/ahci.c 2014-09-11 18:05:59.410027622 +0200 @@ -35,7 +35,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -52815,7 +52815,7 @@ diff -Nur linux-3.14.17/drivers/ata/ahci.c linux-imx6-3.14/drivers/ata/ahci.c diff -Nur linux-3.14.17/drivers/ata/ahci.h linux-imx6-3.14/drivers/ata/ahci.h --- linux-3.14.17/drivers/ata/ahci.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/ahci.h 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/ahci.h 2014-09-11 18:05:59.414027637 +0200 @@ -37,6 +37,8 @@ #include <linux/clk.h> @@ -52863,7 +52863,7 @@ diff -Nur linux-3.14.17/drivers/ata/ahci.h linux-imx6-3.14/drivers/ata/ahci.h extern int ahci_ignore_sss; diff -Nur linux-3.14.17/drivers/ata/ahci_imx.c linux-imx6-3.14/drivers/ata/ahci_imx.c --- linux-3.14.17/drivers/ata/ahci_imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/ahci_imx.c 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/ahci_imx.c 2014-09-11 18:05:59.414027637 +0200 @@ -26,12 +26,29 @@ #include <linux/mfd/syscon.h> #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h> @@ -53686,7 +53686,7 @@ diff -Nur linux-3.14.17/drivers/ata/ahci_imx.c linux-imx6-3.14/drivers/ata/ahci_ module_platform_driver(imx_ahci_driver); diff -Nur linux-3.14.17/drivers/ata/ahci_platform.c linux-imx6-3.14/drivers/ata/ahci_platform.c --- linux-3.14.17/drivers/ata/ahci_platform.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/ahci_platform.c 2014-09-09 10:13:48.672952702 +0200 ++++ linux-imx6-3.14/drivers/ata/ahci_platform.c 2014-09-11 18:05:59.414027637 +0200 @@ -12,135 +12,36 @@ * any later version. */ @@ -54037,7 +54037,7 @@ diff -Nur linux-3.14.17/drivers/ata/ahci_platform.c linux-imx6-3.14/drivers/ata/ diff -Nur linux-3.14.17/drivers/ata/ata_generic.c linux-imx6-3.14/drivers/ata/ata_generic.c --- linux-3.14.17/drivers/ata/ata_generic.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/ata_generic.c 2014-09-09 10:13:48.672952702 +0200 ++++ linux-imx6-3.14/drivers/ata/ata_generic.c 2014-09-11 18:05:59.414027637 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54048,7 +54048,7 @@ diff -Nur linux-3.14.17/drivers/ata/ata_generic.c linux-imx6-3.14/drivers/ata/at #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/Kconfig linux-imx6-3.14/drivers/ata/Kconfig --- linux-3.14.17/drivers/ata/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/Kconfig 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/Kconfig 2014-09-11 18:05:59.410027622 +0200 @@ -99,7 +99,7 @@ config AHCI_IMX @@ -54060,7 +54060,7 @@ diff -Nur linux-3.14.17/drivers/ata/Kconfig linux-imx6-3.14/drivers/ata/Kconfig onboard AHCI SATA. diff -Nur linux-3.14.17/drivers/ata/libahci.c linux-imx6-3.14/drivers/ata/libahci.c --- linux-3.14.17/drivers/ata/libahci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/libahci.c 2014-09-09 10:13:48.672952702 +0200 ++++ linux-imx6-3.14/drivers/ata/libahci.c 2014-09-11 18:05:59.414027637 +0200 @@ -35,7 +35,6 @@ #include <linux/kernel.h> #include <linux/gfp.h> @@ -54212,7 +54212,7 @@ diff -Nur linux-3.14.17/drivers/ata/libahci.c linux-imx6-3.14/drivers/ata/libahc static void ahci_pmp_attach(struct ata_port *ap) diff -Nur linux-3.14.17/drivers/ata/libahci_platform.c linux-imx6-3.14/drivers/ata/libahci_platform.c --- linux-3.14.17/drivers/ata/libahci_platform.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/ata/libahci_platform.c 2014-09-09 10:13:48.672952702 +0200 ++++ linux-imx6-3.14/drivers/ata/libahci_platform.c 2014-09-11 18:05:59.414027637 +0200 @@ -0,0 +1,544 @@ +/* + * AHCI SATA platform library @@ -54760,7 +54760,7 @@ diff -Nur linux-3.14.17/drivers/ata/libahci_platform.c linux-imx6-3.14/drivers/a +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/ata/libata-core.c linux-imx6-3.14/drivers/ata/libata-core.c --- linux-3.14.17/drivers/ata/libata-core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/libata-core.c 2014-09-09 10:13:48.672952702 +0200 ++++ linux-imx6-3.14/drivers/ata/libata-core.c 2014-09-11 18:05:59.418027652 +0200 @@ -1524,7 +1524,7 @@ * @dev: Device to which the command is sent * @tf: Taskfile registers for the command and the result @@ -54827,7 +54827,7 @@ diff -Nur linux-3.14.17/drivers/ata/libata-core.c linux-imx6-3.14/drivers/ata/li dev_err(host->dev, "BUG: trying to register unstarted host\n"); diff -Nur linux-3.14.17/drivers/ata/Makefile linux-imx6-3.14/drivers/ata/Makefile --- linux-3.14.17/drivers/ata/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/Makefile 2014-09-09 10:13:48.668952670 +0200 ++++ linux-imx6-3.14/drivers/ata/Makefile 2014-09-11 18:05:59.410027622 +0200 @@ -4,13 +4,13 @@ # non-SFF interface obj-$(CONFIG_SATA_AHCI) += ahci.o libahci.o @@ -54846,7 +54846,7 @@ diff -Nur linux-3.14.17/drivers/ata/Makefile linux-imx6-3.14/drivers/ata/Makefil obj-$(CONFIG_PDC_ADMA) += pdc_adma.o diff -Nur linux-3.14.17/drivers/ata/pata_acpi.c linux-imx6-3.14/drivers/ata/pata_acpi.c --- linux-3.14.17/drivers/ata/pata_acpi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_acpi.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_acpi.c 2014-09-11 18:05:59.422027668 +0200 @@ -7,7 +7,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54857,7 +54857,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_acpi.c linux-imx6-3.14/drivers/ata/pata #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_amd.c linux-imx6-3.14/drivers/ata/pata_amd.c --- linux-3.14.17/drivers/ata/pata_amd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_amd.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_amd.c 2014-09-11 18:05:59.422027668 +0200 @@ -17,7 +17,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54868,7 +54868,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_amd.c linux-imx6-3.14/drivers/ata/pata_ #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_artop.c linux-imx6-3.14/drivers/ata/pata_artop.c --- linux-3.14.17/drivers/ata/pata_artop.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_artop.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_artop.c 2014-09-11 18:05:59.422027668 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54879,7 +54879,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_artop.c linux-imx6-3.14/drivers/ata/pat #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_at91.c linux-imx6-3.14/drivers/ata/pata_at91.c --- linux-3.14.17/drivers/ata/pata_at91.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_at91.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_at91.c 2014-09-11 18:05:59.422027668 +0200 @@ -18,7 +18,6 @@ #include <linux/kernel.h> @@ -54890,7 +54890,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_at91.c linux-imx6-3.14/drivers/ata/pata #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_atiixp.c linux-imx6-3.14/drivers/ata/pata_atiixp.c --- linux-3.14.17/drivers/ata/pata_atiixp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_atiixp.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_atiixp.c 2014-09-11 18:05:59.422027668 +0200 @@ -15,7 +15,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54901,7 +54901,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_atiixp.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_atp867x.c linux-imx6-3.14/drivers/ata/pata_atp867x.c --- linux-3.14.17/drivers/ata/pata_atp867x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_atp867x.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_atp867x.c 2014-09-11 18:05:59.422027668 +0200 @@ -29,7 +29,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54912,7 +54912,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_atp867x.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_cmd640.c linux-imx6-3.14/drivers/ata/pata_cmd640.c --- linux-3.14.17/drivers/ata/pata_cmd640.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cmd640.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cmd640.c 2014-09-11 18:05:59.422027668 +0200 @@ -15,7 +15,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54923,7 +54923,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cmd640.c linux-imx6-3.14/drivers/ata/pa #include <linux/gfp.h> diff -Nur linux-3.14.17/drivers/ata/pata_cmd64x.c linux-imx6-3.14/drivers/ata/pata_cmd64x.c --- linux-3.14.17/drivers/ata/pata_cmd64x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cmd64x.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cmd64x.c 2014-09-11 18:05:59.422027668 +0200 @@ -26,7 +26,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54934,7 +54934,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cmd64x.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_cs5520.c linux-imx6-3.14/drivers/ata/pata_cs5520.c --- linux-3.14.17/drivers/ata/pata_cs5520.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cs5520.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cs5520.c 2014-09-11 18:05:59.422027668 +0200 @@ -34,7 +34,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54945,7 +54945,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cs5520.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_cs5530.c linux-imx6-3.14/drivers/ata/pata_cs5530.c --- linux-3.14.17/drivers/ata/pata_cs5530.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cs5530.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cs5530.c 2014-09-11 18:05:59.422027668 +0200 @@ -26,7 +26,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54956,7 +54956,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cs5530.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_cs5535.c linux-imx6-3.14/drivers/ata/pata_cs5535.c --- linux-3.14.17/drivers/ata/pata_cs5535.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cs5535.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cs5535.c 2014-09-11 18:05:59.422027668 +0200 @@ -31,7 +31,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54967,7 +54967,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cs5535.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_cs5536.c linux-imx6-3.14/drivers/ata/pata_cs5536.c --- linux-3.14.17/drivers/ata/pata_cs5536.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cs5536.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cs5536.c 2014-09-11 18:05:59.422027668 +0200 @@ -33,7 +33,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54978,7 +54978,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cs5536.c linux-imx6-3.14/drivers/ata/pa #include <linux/libata.h> diff -Nur linux-3.14.17/drivers/ata/pata_cypress.c linux-imx6-3.14/drivers/ata/pata_cypress.c --- linux-3.14.17/drivers/ata/pata_cypress.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_cypress.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_cypress.c 2014-09-11 18:05:59.422027668 +0200 @@ -11,7 +11,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -54989,7 +54989,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_cypress.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_efar.c linux-imx6-3.14/drivers/ata/pata_efar.c --- linux-3.14.17/drivers/ata/pata_efar.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_efar.c 2014-09-09 10:13:48.676952734 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_efar.c 2014-09-11 18:05:59.426027685 +0200 @@ -14,7 +14,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55000,7 +55000,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_efar.c linux-imx6-3.14/drivers/ata/pata #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_ep93xx.c linux-imx6-3.14/drivers/ata/pata_ep93xx.c --- linux-3.14.17/drivers/ata/pata_ep93xx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_ep93xx.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_ep93xx.c 2014-09-11 18:05:59.426027685 +0200 @@ -34,7 +34,6 @@ #include <linux/err.h> #include <linux/kernel.h> @@ -55011,7 +55011,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_ep93xx.c linux-imx6-3.14/drivers/ata/pa #include <linux/ata.h> diff -Nur linux-3.14.17/drivers/ata/pata_hpt366.c linux-imx6-3.14/drivers/ata/pata_hpt366.c --- linux-3.14.17/drivers/ata/pata_hpt366.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_hpt366.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_hpt366.c 2014-09-11 18:05:59.426027685 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55022,7 +55022,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_hpt366.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_hpt37x.c linux-imx6-3.14/drivers/ata/pata_hpt37x.c --- linux-3.14.17/drivers/ata/pata_hpt37x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_hpt37x.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_hpt37x.c 2014-09-11 18:05:59.426027685 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55033,7 +55033,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_hpt37x.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_hpt3x2n.c linux-imx6-3.14/drivers/ata/pata_hpt3x2n.c --- linux-3.14.17/drivers/ata/pata_hpt3x2n.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_hpt3x2n.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_hpt3x2n.c 2014-09-11 18:05:59.426027685 +0200 @@ -20,7 +20,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55044,7 +55044,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_hpt3x2n.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_hpt3x3.c linux-imx6-3.14/drivers/ata/pata_hpt3x3.c --- linux-3.14.17/drivers/ata/pata_hpt3x3.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_hpt3x3.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_hpt3x3.c 2014-09-11 18:05:59.426027685 +0200 @@ -16,7 +16,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55055,7 +55055,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_hpt3x3.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_imx.c linux-imx6-3.14/drivers/ata/pata_imx.c --- linux-3.14.17/drivers/ata/pata_imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_imx.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_imx.c 2014-09-11 18:05:59.426027685 +0200 @@ -15,7 +15,6 @@ */ #include <linux/kernel.h> @@ -55066,7 +55066,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_imx.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/ata.h> diff -Nur linux-3.14.17/drivers/ata/pata_it8213.c linux-imx6-3.14/drivers/ata/pata_it8213.c --- linux-3.14.17/drivers/ata/pata_it8213.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_it8213.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_it8213.c 2014-09-11 18:05:59.426027685 +0200 @@ -10,7 +10,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55077,7 +55077,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_it8213.c linux-imx6-3.14/drivers/ata/pa #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_it821x.c linux-imx6-3.14/drivers/ata/pata_it821x.c --- linux-3.14.17/drivers/ata/pata_it821x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_it821x.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_it821x.c 2014-09-11 18:05:59.426027685 +0200 @@ -72,7 +72,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55088,7 +55088,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_it821x.c linux-imx6-3.14/drivers/ata/pa #include <linux/slab.h> diff -Nur linux-3.14.17/drivers/ata/pata_jmicron.c linux-imx6-3.14/drivers/ata/pata_jmicron.c --- linux-3.14.17/drivers/ata/pata_jmicron.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_jmicron.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_jmicron.c 2014-09-11 18:05:59.426027685 +0200 @@ -10,7 +10,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55099,7 +55099,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_jmicron.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_marvell.c linux-imx6-3.14/drivers/ata/pata_marvell.c --- linux-3.14.17/drivers/ata/pata_marvell.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_marvell.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_marvell.c 2014-09-11 18:05:59.430027701 +0200 @@ -11,7 +11,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55110,7 +55110,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_marvell.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_mpiix.c linux-imx6-3.14/drivers/ata/pata_mpiix.c --- linux-3.14.17/drivers/ata/pata_mpiix.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_mpiix.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_mpiix.c 2014-09-11 18:05:59.430027701 +0200 @@ -28,7 +28,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55121,7 +55121,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_mpiix.c linux-imx6-3.14/drivers/ata/pat #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_netcell.c linux-imx6-3.14/drivers/ata/pata_netcell.c --- linux-3.14.17/drivers/ata/pata_netcell.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_netcell.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_netcell.c 2014-09-11 18:05:59.430027701 +0200 @@ -7,7 +7,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55132,7 +55132,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_netcell.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_ninja32.c linux-imx6-3.14/drivers/ata/pata_ninja32.c --- linux-3.14.17/drivers/ata/pata_ninja32.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_ninja32.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_ninja32.c 2014-09-11 18:05:59.430027701 +0200 @@ -37,7 +37,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55143,7 +55143,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_ninja32.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_ns87410.c linux-imx6-3.14/drivers/ata/pata_ns87410.c --- linux-3.14.17/drivers/ata/pata_ns87410.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_ns87410.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_ns87410.c 2014-09-11 18:05:59.430027701 +0200 @@ -20,7 +20,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55154,7 +55154,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_ns87410.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_ns87415.c linux-imx6-3.14/drivers/ata/pata_ns87415.c --- linux-3.14.17/drivers/ata/pata_ns87415.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_ns87415.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_ns87415.c 2014-09-11 18:05:59.430027701 +0200 @@ -25,7 +25,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55165,7 +55165,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_ns87415.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_oldpiix.c linux-imx6-3.14/drivers/ata/pata_oldpiix.c --- linux-3.14.17/drivers/ata/pata_oldpiix.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_oldpiix.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_oldpiix.c 2014-09-11 18:05:59.430027701 +0200 @@ -16,7 +16,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55176,7 +55176,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_oldpiix.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_opti.c linux-imx6-3.14/drivers/ata/pata_opti.c --- linux-3.14.17/drivers/ata/pata_opti.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_opti.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_opti.c 2014-09-11 18:05:59.430027701 +0200 @@ -26,7 +26,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55187,7 +55187,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_opti.c linux-imx6-3.14/drivers/ata/pata #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_optidma.c linux-imx6-3.14/drivers/ata/pata_optidma.c --- linux-3.14.17/drivers/ata/pata_optidma.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_optidma.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_optidma.c 2014-09-11 18:05:59.430027701 +0200 @@ -25,7 +25,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55198,7 +55198,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_optidma.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_pcmcia.c linux-imx6-3.14/drivers/ata/pata_pcmcia.c --- linux-3.14.17/drivers/ata/pata_pcmcia.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_pcmcia.c 2014-09-09 10:13:48.680952767 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_pcmcia.c 2014-09-11 18:05:59.430027701 +0200 @@ -26,7 +26,6 @@ #include <linux/kernel.h> @@ -55209,7 +55209,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_pcmcia.c linux-imx6-3.14/drivers/ata/pa #include <linux/slab.h> diff -Nur linux-3.14.17/drivers/ata/pata_pdc2027x.c linux-imx6-3.14/drivers/ata/pata_pdc2027x.c --- linux-3.14.17/drivers/ata/pata_pdc2027x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_pdc2027x.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_pdc2027x.c 2014-09-11 18:05:59.430027701 +0200 @@ -25,7 +25,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55220,7 +55220,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_pdc2027x.c linux-imx6-3.14/drivers/ata/ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_pdc202xx_old.c linux-imx6-3.14/drivers/ata/pata_pdc202xx_old.c --- linux-3.14.17/drivers/ata/pata_pdc202xx_old.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_pdc202xx_old.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_pdc202xx_old.c 2014-09-11 18:05:59.430027701 +0200 @@ -15,7 +15,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55231,7 +55231,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_pdc202xx_old.c linux-imx6-3.14/drivers/ #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_piccolo.c linux-imx6-3.14/drivers/ata/pata_piccolo.c --- linux-3.14.17/drivers/ata/pata_piccolo.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_piccolo.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_piccolo.c 2014-09-11 18:05:59.430027701 +0200 @@ -18,7 +18,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55242,7 +55242,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_piccolo.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_platform.c linux-imx6-3.14/drivers/ata/pata_platform.c --- linux-3.14.17/drivers/ata/pata_platform.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_platform.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_platform.c 2014-09-11 18:05:59.430027701 +0200 @@ -13,7 +13,6 @@ */ #include <linux/kernel.h> @@ -55253,7 +55253,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_platform.c linux-imx6-3.14/drivers/ata/ #include <linux/ata.h> diff -Nur linux-3.14.17/drivers/ata/pata_pxa.c linux-imx6-3.14/drivers/ata/pata_pxa.c --- linux-3.14.17/drivers/ata/pata_pxa.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_pxa.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_pxa.c 2014-09-11 18:05:59.430027701 +0200 @@ -20,7 +20,6 @@ #include <linux/kernel.h> @@ -55264,7 +55264,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_pxa.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/libata.h> diff -Nur linux-3.14.17/drivers/ata/pata_radisys.c linux-imx6-3.14/drivers/ata/pata_radisys.c --- linux-3.14.17/drivers/ata/pata_radisys.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_radisys.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_radisys.c 2014-09-11 18:05:59.430027701 +0200 @@ -15,7 +15,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55275,7 +55275,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_radisys.c linux-imx6-3.14/drivers/ata/p #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_rdc.c linux-imx6-3.14/drivers/ata/pata_rdc.c --- linux-3.14.17/drivers/ata/pata_rdc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_rdc.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_rdc.c 2014-09-11 18:05:59.430027701 +0200 @@ -24,7 +24,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55286,7 +55286,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_rdc.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_rz1000.c linux-imx6-3.14/drivers/ata/pata_rz1000.c --- linux-3.14.17/drivers/ata/pata_rz1000.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_rz1000.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_rz1000.c 2014-09-11 18:05:59.430027701 +0200 @@ -14,7 +14,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55297,7 +55297,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_rz1000.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_sc1200.c linux-imx6-3.14/drivers/ata/pata_sc1200.c --- linux-3.14.17/drivers/ata/pata_sc1200.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_sc1200.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_sc1200.c 2014-09-11 18:05:59.434027716 +0200 @@ -32,7 +32,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55308,7 +55308,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_sc1200.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_scc.c linux-imx6-3.14/drivers/ata/pata_scc.c --- linux-3.14.17/drivers/ata/pata_scc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_scc.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_scc.c 2014-09-11 18:05:59.434027716 +0200 @@ -35,7 +35,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55319,7 +55319,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_scc.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_sch.c linux-imx6-3.14/drivers/ata/pata_sch.c --- linux-3.14.17/drivers/ata/pata_sch.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_sch.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_sch.c 2014-09-11 18:05:59.434027716 +0200 @@ -27,7 +27,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55330,7 +55330,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_sch.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_serverworks.c linux-imx6-3.14/drivers/ata/pata_serverworks.c --- linux-3.14.17/drivers/ata/pata_serverworks.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_serverworks.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_serverworks.c 2014-09-11 18:05:59.434027716 +0200 @@ -34,7 +34,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55341,7 +55341,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_serverworks.c linux-imx6-3.14/drivers/a #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_sil680.c linux-imx6-3.14/drivers/ata/pata_sil680.c --- linux-3.14.17/drivers/ata/pata_sil680.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_sil680.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_sil680.c 2014-09-11 18:05:59.434027716 +0200 @@ -25,7 +25,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55352,7 +55352,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_sil680.c linux-imx6-3.14/drivers/ata/pa #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_sis.c linux-imx6-3.14/drivers/ata/pata_sis.c --- linux-3.14.17/drivers/ata/pata_sis.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_sis.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_sis.c 2014-09-11 18:05:59.434027716 +0200 @@ -26,7 +26,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55363,7 +55363,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_sis.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/pata_sl82c105.c linux-imx6-3.14/drivers/ata/pata_sl82c105.c --- linux-3.14.17/drivers/ata/pata_sl82c105.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_sl82c105.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_sl82c105.c 2014-09-11 18:05:59.434027716 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55374,7 +55374,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_sl82c105.c linux-imx6-3.14/drivers/ata/ #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_triflex.c linux-imx6-3.14/drivers/ata/pata_triflex.c --- linux-3.14.17/drivers/ata/pata_triflex.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_triflex.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_triflex.c 2014-09-11 18:05:59.434027716 +0200 @@ -36,7 +36,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55385,7 +55385,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_triflex.c linux-imx6-3.14/drivers/ata/p #include <scsi/scsi_host.h> diff -Nur linux-3.14.17/drivers/ata/pata_via.c linux-imx6-3.14/drivers/ata/pata_via.c --- linux-3.14.17/drivers/ata/pata_via.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pata_via.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pata_via.c 2014-09-11 18:05:59.434027716 +0200 @@ -55,7 +55,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55396,7 +55396,7 @@ diff -Nur linux-3.14.17/drivers/ata/pata_via.c linux-imx6-3.14/drivers/ata/pata_ #include <linux/gfp.h> diff -Nur linux-3.14.17/drivers/ata/pdc_adma.c linux-imx6-3.14/drivers/ata/pdc_adma.c --- linux-3.14.17/drivers/ata/pdc_adma.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/pdc_adma.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/pdc_adma.c 2014-09-11 18:05:59.434027716 +0200 @@ -36,7 +36,6 @@ #include <linux/module.h> #include <linux/gfp.h> @@ -55407,7 +55407,7 @@ diff -Nur linux-3.14.17/drivers/ata/pdc_adma.c linux-imx6-3.14/drivers/ata/pdc_a #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_dwc_460ex.c linux-imx6-3.14/drivers/ata/sata_dwc_460ex.c --- linux-3.14.17/drivers/ata/sata_dwc_460ex.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_dwc_460ex.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_dwc_460ex.c 2014-09-11 18:05:59.434027716 +0200 @@ -29,7 +29,6 @@ #include <linux/kernel.h> @@ -55418,7 +55418,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_dwc_460ex.c linux-imx6-3.14/drivers/ata #include <linux/of_irq.h> diff -Nur linux-3.14.17/drivers/ata/sata_highbank.c linux-imx6-3.14/drivers/ata/sata_highbank.c --- linux-3.14.17/drivers/ata/sata_highbank.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_highbank.c 2014-09-09 10:13:48.684952800 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_highbank.c 2014-09-11 18:05:59.434027716 +0200 @@ -19,7 +19,6 @@ #include <linux/kernel.h> #include <linux/gfp.h> @@ -55446,7 +55446,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_highbank.c linux-imx6-3.14/drivers/ata/ *class = ahci_dev_classify(ap); diff -Nur linux-3.14.17/drivers/ata/sata_nv.c linux-imx6-3.14/drivers/ata/sata_nv.c --- linux-3.14.17/drivers/ata/sata_nv.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_nv.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_nv.c 2014-09-11 18:05:59.438027733 +0200 @@ -40,7 +40,6 @@ #include <linux/module.h> #include <linux/gfp.h> @@ -55457,7 +55457,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_nv.c linux-imx6-3.14/drivers/ata/sata_n #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_promise.c linux-imx6-3.14/drivers/ata/sata_promise.c --- linux-3.14.17/drivers/ata/sata_promise.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_promise.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_promise.c 2014-09-11 18:05:59.438027733 +0200 @@ -35,7 +35,6 @@ #include <linux/module.h> #include <linux/gfp.h> @@ -55468,7 +55468,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_promise.c linux-imx6-3.14/drivers/ata/s #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_qstor.c linux-imx6-3.14/drivers/ata/sata_qstor.c --- linux-3.14.17/drivers/ata/sata_qstor.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_qstor.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_qstor.c 2014-09-11 18:05:59.438027733 +0200 @@ -31,7 +31,6 @@ #include <linux/module.h> #include <linux/gfp.h> @@ -55479,7 +55479,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_qstor.c linux-imx6-3.14/drivers/ata/sat #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_sil.c linux-imx6-3.14/drivers/ata/sata_sil.c --- linux-3.14.17/drivers/ata/sata_sil.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_sil.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_sil.c 2014-09-11 18:05:59.438027733 +0200 @@ -37,7 +37,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55490,7 +55490,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_sil.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_sis.c linux-imx6-3.14/drivers/ata/sata_sis.c --- linux-3.14.17/drivers/ata/sata_sis.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_sis.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_sis.c 2014-09-11 18:05:59.438027733 +0200 @@ -33,7 +33,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55501,7 +55501,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_sis.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_svw.c linux-imx6-3.14/drivers/ata/sata_svw.c --- linux-3.14.17/drivers/ata/sata_svw.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_svw.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_svw.c 2014-09-11 18:05:59.438027733 +0200 @@ -39,7 +39,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55512,7 +55512,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_svw.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_sx4.c linux-imx6-3.14/drivers/ata/sata_sx4.c --- linux-3.14.17/drivers/ata/sata_sx4.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_sx4.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_sx4.c 2014-09-11 18:05:59.438027733 +0200 @@ -82,7 +82,6 @@ #include <linux/module.h> #include <linux/pci.h> @@ -55523,7 +55523,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_sx4.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_uli.c linux-imx6-3.14/drivers/ata/sata_uli.c --- linux-3.14.17/drivers/ata/sata_uli.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_uli.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_uli.c 2014-09-11 18:05:59.438027733 +0200 @@ -28,7 +28,6 @@ #include <linux/module.h> #include <linux/gfp.h> @@ -55534,7 +55534,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_uli.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/ata/sata_via.c linux-imx6-3.14/drivers/ata/sata_via.c --- linux-3.14.17/drivers/ata/sata_via.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_via.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_via.c 2014-09-11 18:05:59.438027733 +0200 @@ -36,7 +36,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55545,7 +55545,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_via.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/device.h> diff -Nur linux-3.14.17/drivers/ata/sata_vsc.c linux-imx6-3.14/drivers/ata/sata_vsc.c --- linux-3.14.17/drivers/ata/sata_vsc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ata/sata_vsc.c 2014-09-09 10:13:48.688952833 +0200 ++++ linux-imx6-3.14/drivers/ata/sata_vsc.c 2014-09-11 18:05:59.438027733 +0200 @@ -37,7 +37,6 @@ #include <linux/kernel.h> #include <linux/module.h> @@ -55556,7 +55556,7 @@ diff -Nur linux-3.14.17/drivers/ata/sata_vsc.c linux-imx6-3.14/drivers/ata/sata_ #include <linux/interrupt.h> diff -Nur linux-3.14.17/drivers/base/bus.c linux-imx6-3.14/drivers/base/bus.c --- linux-3.14.17/drivers/base/bus.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/bus.c 2014-09-09 10:13:48.700952930 +0200 ++++ linux-imx6-3.14/drivers/base/bus.c 2014-09-11 18:05:59.498027972 +0200 @@ -1218,7 +1218,7 @@ * with the name of the subsystem. The root device can carry subsystem- * wide attributes. All registered devices are below this single root @@ -55568,7 +55568,7 @@ diff -Nur linux-3.14.17/drivers/base/bus.c linux-imx6-3.14/drivers/base/bus.c * Do not use this interface for anything new, it exists for compatibility diff -Nur linux-3.14.17/drivers/base/cpu.c linux-imx6-3.14/drivers/base/cpu.c --- linux-3.14.17/drivers/base/cpu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/cpu.c 2014-09-09 10:13:48.700952930 +0200 ++++ linux-imx6-3.14/drivers/base/cpu.c 2014-09-11 18:05:59.522028069 +0200 @@ -15,6 +15,7 @@ #include <linux/percpu.h> #include <linux/acpi.h> @@ -55656,7 +55656,7 @@ diff -Nur linux-3.14.17/drivers/base/cpu.c linux-imx6-3.14/drivers/base/cpu.c NULL diff -Nur linux-3.14.17/drivers/base/dma-buf.c linux-imx6-3.14/drivers/base/dma-buf.c --- linux-3.14.17/drivers/base/dma-buf.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/dma-buf.c 2014-09-09 10:13:48.700952930 +0200 ++++ linux-imx6-3.14/drivers/base/dma-buf.c 2014-09-11 18:05:59.522028069 +0200 @@ -251,9 +251,8 @@ * @dmabuf: [in] buffer to attach device to. * @dev: [in] device to be attached. @@ -55712,7 +55712,7 @@ diff -Nur linux-3.14.17/drivers/base/dma-buf.c linux-imx6-3.14/drivers/base/dma- dmabuf->vmap_ptr = ptr; diff -Nur linux-3.14.17/drivers/base/dma-contiguous.c linux-imx6-3.14/drivers/base/dma-contiguous.c --- linux-3.14.17/drivers/base/dma-contiguous.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/dma-contiguous.c 2014-09-09 10:13:48.700952930 +0200 ++++ linux-imx6-3.14/drivers/base/dma-contiguous.c 2014-09-11 18:05:59.522028069 +0200 @@ -24,22 +24,9 @@ #include <linux/memblock.h> @@ -56042,7 +56042,7 @@ diff -Nur linux-3.14.17/drivers/base/dma-contiguous.c linux-imx6-3.14/drivers/ba } diff -Nur linux-3.14.17/drivers/base/Kconfig linux-imx6-3.14/drivers/base/Kconfig --- linux-3.14.17/drivers/base/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/Kconfig 2014-09-09 10:13:48.700952930 +0200 ++++ linux-imx6-3.14/drivers/base/Kconfig 2014-09-11 18:05:59.498027972 +0200 @@ -185,6 +185,14 @@ bool default n @@ -56077,7 +56077,7 @@ diff -Nur linux-3.14.17/drivers/base/Kconfig linux-imx6-3.14/drivers/base/Kconfi endmenu diff -Nur linux-3.14.17/drivers/base/platform.c linux-imx6-3.14/drivers/base/platform.c --- linux-3.14.17/drivers/base/platform.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/base/platform.c 2014-09-09 10:13:48.704952963 +0200 ++++ linux-imx6-3.14/drivers/base/platform.c 2014-09-11 18:05:59.526028085 +0200 @@ -89,13 +89,8 @@ return dev->archdata.irqs[num]; #else @@ -56096,7 +56096,7 @@ diff -Nur linux-3.14.17/drivers/base/platform.c linux-imx6-3.14/drivers/base/pla diff -Nur linux-3.14.17/drivers/bus/arm-cci.c linux-imx6-3.14/drivers/bus/arm-cci.c --- linux-3.14.17/drivers/bus/arm-cci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/bus/arm-cci.c 2014-09-09 10:13:48.740953257 +0200 ++++ linux-imx6-3.14/drivers/bus/arm-cci.c 2014-09-11 18:05:59.666028644 +0200 @@ -26,6 +26,7 @@ #include <asm/cacheflush.h> @@ -56127,7 +56127,7 @@ diff -Nur linux-3.14.17/drivers/bus/arm-cci.c linux-imx6-3.14/drivers/bus/arm-cc return -ENODEV; diff -Nur linux-3.14.17/drivers/char/fsl_otp.c linux-imx6-3.14/drivers/char/fsl_otp.c --- linux-3.14.17/drivers/char/fsl_otp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/char/fsl_otp.c 2014-09-09 10:13:48.748953321 +0200 ++++ linux-imx6-3.14/drivers/char/fsl_otp.c 2014-09-11 18:05:59.682028708 +0200 @@ -0,0 +1,299 @@ +/* + * Freescale On-Chip OTP driver @@ -56430,7 +56430,7 @@ diff -Nur linux-3.14.17/drivers/char/fsl_otp.c linux-imx6-3.14/drivers/char/fsl_ +MODULE_DESCRIPTION("Freescale i.MX OCOTP driver"); diff -Nur linux-3.14.17/drivers/char/Kconfig linux-imx6-3.14/drivers/char/Kconfig --- linux-3.14.17/drivers/char/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/char/Kconfig 2014-09-09 10:13:48.744953289 +0200 ++++ linux-imx6-3.14/drivers/char/Kconfig 2014-09-11 18:05:59.670028659 +0200 @@ -82,6 +82,21 @@ If unsure, say N. @@ -56455,7 +56455,7 @@ diff -Nur linux-3.14.17/drivers/char/Kconfig linux-imx6-3.14/drivers/char/Kconfi depends on PARPORT diff -Nur linux-3.14.17/drivers/char/Makefile linux-imx6-3.14/drivers/char/Makefile --- linux-3.14.17/drivers/char/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/char/Makefile 2014-09-09 10:13:48.744953289 +0200 ++++ linux-imx6-3.14/drivers/char/Makefile 2014-09-11 18:05:59.670028659 +0200 @@ -16,6 +16,7 @@ obj-$(CONFIG_IBM_BSR) += bsr.o obj-$(CONFIG_SGI_MBCS) += mbcs.o @@ -56466,7 +56466,7 @@ diff -Nur linux-3.14.17/drivers/char/Makefile linux-imx6-3.14/drivers/char/Makef diff -Nur linux-3.14.17/drivers/clk/clk.c linux-imx6-3.14/drivers/clk/clk.c --- linux-3.14.17/drivers/clk/clk.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/clk/clk.c 2014-09-09 10:13:48.768953484 +0200 ++++ linux-imx6-3.14/drivers/clk/clk.c 2014-09-11 18:05:59.854029395 +0200 @@ -1702,6 +1702,7 @@ */ int clk_set_parent(struct clk *clk, struct clk *parent) @@ -56496,7 +56496,7 @@ diff -Nur linux-3.14.17/drivers/clk/clk.c linux-imx6-3.14/drivers/clk/clk.c p_index = clk_fetch_parent_index(clk, parent); diff -Nur linux-3.14.17/drivers/clk/clk-mux.c linux-imx6-3.14/drivers/clk/clk-mux.c --- linux-3.14.17/drivers/clk/clk-mux.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/clk/clk-mux.c 2014-09-09 10:13:48.764953452 +0200 ++++ linux-imx6-3.14/drivers/clk/clk-mux.c 2014-09-11 18:05:59.826029283 +0200 @@ -143,7 +143,7 @@ init.ops = &clk_mux_ro_ops; else @@ -56508,7 +56508,7 @@ diff -Nur linux-3.14.17/drivers/clk/clk-mux.c linux-imx6-3.14/drivers/clk/clk-mu diff -Nur linux-3.14.17/drivers/cpufreq/cpufreq.c linux-imx6-3.14/drivers/cpufreq/cpufreq.c --- linux-3.14.17/drivers/cpufreq/cpufreq.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/cpufreq/cpufreq.c 2014-09-09 10:13:48.788953648 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/cpufreq.c 2014-09-11 18:05:59.998029971 +0200 @@ -1089,12 +1089,10 @@ * the creation of a brand new one. So we need to perform this update * by invoking update_policy_cpu(). @@ -56526,7 +56526,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/cpufreq.c linux-imx6-3.14/drivers/cpufre cpumask_copy(policy->cpus, cpumask_of(cpu)); diff -Nur linux-3.14.17/drivers/cpufreq/cpufreq_interactive.c linux-imx6-3.14/drivers/cpufreq/cpufreq_interactive.c --- linux-3.14.17/drivers/cpufreq/cpufreq_interactive.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/cpufreq/cpufreq_interactive.c 2014-09-09 10:13:48.788953648 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/cpufreq_interactive.c 2014-09-11 18:05:59.998029971 +0200 @@ -0,0 +1,1349 @@ +/* + * drivers/cpufreq/cpufreq_interactive.c @@ -57879,7 +57879,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/cpufreq_interactive.c linux-imx6-3.14/dr +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/cpufreq/highbank-cpufreq.c linux-imx6-3.14/drivers/cpufreq/highbank-cpufreq.c --- linux-3.14.17/drivers/cpufreq/highbank-cpufreq.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/cpufreq/highbank-cpufreq.c 2014-09-09 10:13:48.792953680 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/highbank-cpufreq.c 2014-09-11 18:06:00.006030002 +0200 @@ -19,7 +19,7 @@ #include <linux/cpu.h> #include <linux/err.h> @@ -57891,7 +57891,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/highbank-cpufreq.c linux-imx6-3.14/drive #define HB_CPUFREQ_CHANGE_NOTE 0x80000001 diff -Nur linux-3.14.17/drivers/cpufreq/imx6-cpufreq.c linux-imx6-3.14/drivers/cpufreq/imx6-cpufreq.c --- linux-3.14.17/drivers/cpufreq/imx6-cpufreq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/cpufreq/imx6-cpufreq.c 2014-09-09 10:13:48.792953680 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/imx6-cpufreq.c 2014-09-11 18:06:00.006030002 +0200 @@ -0,0 +1,393 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -58622,7 +58622,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/imx6q-cpufreq.c linux-imx6-3.14/drivers/ -MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/cpufreq/Kconfig linux-imx6-3.14/drivers/cpufreq/Kconfig --- linux-3.14.17/drivers/cpufreq/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/cpufreq/Kconfig 2014-09-09 10:13:48.788953648 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/Kconfig 2014-09-11 18:05:59.970029858 +0200 @@ -91,6 +91,15 @@ governor. If unsure have a look at the help section of the driver. Fallback governor will be the performance governor. @@ -58666,7 +58666,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/Kconfig linux-imx6-3.14/drivers/cpufreq/ config CPU_FREQ_GOV_CONSERVATIVE diff -Nur linux-3.14.17/drivers/cpufreq/Kconfig.arm linux-imx6-3.14/drivers/cpufreq/Kconfig.arm --- linux-3.14.17/drivers/cpufreq/Kconfig.arm 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/cpufreq/Kconfig.arm 2014-09-09 10:13:48.788953648 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/Kconfig.arm 2014-09-11 18:05:59.970029858 +0200 @@ -4,7 +4,8 @@ config ARM_BIG_LITTLE_CPUFREQ @@ -58688,7 +58688,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/Kconfig.arm linux-imx6-3.14/drivers/cpuf depends on REGULATOR_ANATOP diff -Nur linux-3.14.17/drivers/cpufreq/Makefile linux-imx6-3.14/drivers/cpufreq/Makefile --- linux-3.14.17/drivers/cpufreq/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/cpufreq/Makefile 2014-09-09 10:13:48.788953648 +0200 ++++ linux-imx6-3.14/drivers/cpufreq/Makefile 2014-09-11 18:05:59.970029858 +0200 @@ -8,6 +8,7 @@ obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE) += cpufreq_powersave.o obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE) += cpufreq_userspace.o @@ -58708,7 +58708,7 @@ diff -Nur linux-3.14.17/drivers/cpufreq/Makefile linux-imx6-3.14/drivers/cpufreq obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o diff -Nur linux-3.14.17/drivers/crypto/caam/secvio.c linux-imx6-3.14/drivers/crypto/caam/secvio.c --- linux-3.14.17/drivers/crypto/caam/secvio.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/secvio.c 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/secvio.c 2014-09-11 18:06:00.054030194 +0200 @@ -0,0 +1,335 @@ + +/* @@ -59047,7 +59047,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/secvio.c linux-imx6-3.14/drivers/cry +#endif diff -Nur linux-3.14.17/drivers/crypto/caam/secvio.h linux-imx6-3.14/drivers/crypto/caam/secvio.h --- linux-3.14.17/drivers/crypto/caam/secvio.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/secvio.h 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/secvio.h 2014-09-11 18:06:00.062030226 +0200 @@ -0,0 +1,64 @@ + +/* @@ -59115,7 +59115,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/secvio.h linux-imx6-3.14/drivers/cry +#endif /* SECVIO_H */ diff -Nur linux-3.14.17/drivers/crypto/caam/sm.h linux-imx6-3.14/drivers/crypto/caam/sm.h --- linux-3.14.17/drivers/crypto/caam/sm.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/sm.h 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/sm.h 2014-09-11 18:06:00.066030242 +0200 @@ -0,0 +1,88 @@ + +/* @@ -59207,7 +59207,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/sm.h linux-imx6-3.14/drivers/crypto/ +#endif /* SM_H */ diff -Nur linux-3.14.17/drivers/crypto/caam/sm_store.c linux-imx6-3.14/drivers/crypto/caam/sm_store.c --- linux-3.14.17/drivers/crypto/caam/sm_store.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/sm_store.c 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/sm_store.c 2014-09-11 18:06:00.066030242 +0200 @@ -0,0 +1,896 @@ + +/* @@ -60107,7 +60107,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/sm_store.c linux-imx6-3.14/drivers/c +#endif diff -Nur linux-3.14.17/drivers/crypto/caam/sm_test.c linux-imx6-3.14/drivers/crypto/caam/sm_test.c --- linux-3.14.17/drivers/crypto/caam/sm_test.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/sm_test.c 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/sm_test.c 2014-09-11 18:06:00.066030242 +0200 @@ -0,0 +1,844 @@ +/* + * Secure Memory / Keystore Exemplification Module @@ -60955,7 +60955,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/sm_test.c linux-imx6-3.14/drivers/cr +#endif diff -Nur linux-3.14.17/drivers/crypto/caam/snvsregs.h linux-imx6-3.14/drivers/crypto/caam/snvsregs.h --- linux-3.14.17/drivers/crypto/caam/snvsregs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/crypto/caam/snvsregs.h 2014-09-09 10:13:48.804953779 +0200 ++++ linux-imx6-3.14/drivers/crypto/caam/snvsregs.h 2014-09-11 18:06:00.066030242 +0200 @@ -0,0 +1,237 @@ +/* + * SNVS hardware register-level view @@ -61196,7 +61196,7 @@ diff -Nur linux-3.14.17/drivers/crypto/caam/snvsregs.h linux-imx6-3.14/drivers/c +#endif /* SNVSREGS_H */ diff -Nur linux-3.14.17/drivers/dma/imx-sdma.c linux-imx6-3.14/drivers/dma/imx-sdma.c --- linux-3.14.17/drivers/dma/imx-sdma.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/dma/imx-sdma.c 2014-09-09 10:13:48.820953910 +0200 ++++ linux-imx6-3.14/drivers/dma/imx-sdma.c 2014-09-11 18:06:00.162030626 +0200 @@ -29,6 +29,7 @@ #include <linux/semaphore.h> #include <linux/spinlock.h> @@ -61795,7 +61795,7 @@ diff -Nur linux-3.14.17/drivers/dma/imx-sdma.c linux-imx6-3.14/drivers/dma/imx-s goto err_init; diff -Nur linux-3.14.17/drivers/dma/Kconfig linux-imx6-3.14/drivers/dma/Kconfig --- linux-3.14.17/drivers/dma/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/dma/Kconfig 2014-09-09 10:13:48.816953876 +0200 ++++ linux-imx6-3.14/drivers/dma/Kconfig 2014-09-11 18:06:00.122030466 +0200 @@ -137,6 +137,19 @@ To avoid bloating the irq_desc[] array we allocate a sufficient number of IRQ slots and map them dynamically to specific sources. @@ -61818,7 +61818,7 @@ diff -Nur linux-3.14.17/drivers/dma/Kconfig linux-imx6-3.14/drivers/dma/Kconfig depends on MACH_TX49XX || MACH_TX39XX diff -Nur linux-3.14.17/drivers/dma/Makefile linux-imx6-3.14/drivers/dma/Makefile --- linux-3.14.17/drivers/dma/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/dma/Makefile 2014-09-09 10:13:48.816953876 +0200 ++++ linux-imx6-3.14/drivers/dma/Makefile 2014-09-11 18:06:00.122030466 +0200 @@ -18,6 +18,7 @@ obj-$(CONFIG_DW_DMAC_CORE) += dw/ obj-$(CONFIG_AT_HDMAC) += at_hdmac.o @@ -61829,13 +61829,13 @@ diff -Nur linux-3.14.17/drivers/dma/Makefile linux-imx6-3.14/drivers/dma/Makefil obj-$(CONFIG_COH901318) += coh901318.o coh901318_lli.o diff -Nur linux-3.14.17/drivers/dma/pxp/Makefile linux-imx6-3.14/drivers/dma/pxp/Makefile --- linux-3.14.17/drivers/dma/pxp/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/dma/pxp/Makefile 2014-09-09 10:13:48.828953974 +0200 ++++ linux-imx6-3.14/drivers/dma/pxp/Makefile 2014-09-11 18:06:00.198030770 +0200 @@ -0,0 +1,2 @@ +obj-$(CONFIG_MXC_PXP_V2) += pxp_dma_v2.o +obj-$(CONFIG_MXC_PXP_CLIENT_DEVICE) += pxp_device.o diff -Nur linux-3.14.17/drivers/dma/pxp/pxp_device.c linux-imx6-3.14/drivers/dma/pxp/pxp_device.c --- linux-3.14.17/drivers/dma/pxp/pxp_device.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/dma/pxp/pxp_device.c 2014-09-09 10:13:48.828953974 +0200 ++++ linux-imx6-3.14/drivers/dma/pxp/pxp_device.c 2014-09-11 18:06:00.198030770 +0200 @@ -0,0 +1,765 @@ +/* + * Copyright (C) 2010-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -62604,7 +62604,7 @@ diff -Nur linux-3.14.17/drivers/dma/pxp/pxp_device.c linux-imx6-3.14/drivers/dma +} diff -Nur linux-3.14.17/drivers/dma/pxp/pxp_dma_v2.c linux-imx6-3.14/drivers/dma/pxp/pxp_dma_v2.c --- linux-3.14.17/drivers/dma/pxp/pxp_dma_v2.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/dma/pxp/pxp_dma_v2.c 2014-09-09 10:13:48.828953974 +0200 ++++ linux-imx6-3.14/drivers/dma/pxp/pxp_dma_v2.c 2014-09-11 18:06:00.198030770 +0200 @@ -0,0 +1,1854 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. @@ -64462,7 +64462,7 @@ diff -Nur linux-3.14.17/drivers/dma/pxp/pxp_dma_v2.c linux-imx6-3.14/drivers/dma +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/dma/pxp/regs-pxp_v2.h linux-imx6-3.14/drivers/dma/pxp/regs-pxp_v2.h --- linux-3.14.17/drivers/dma/pxp/regs-pxp_v2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/dma/pxp/regs-pxp_v2.h 2014-09-09 10:13:48.828953974 +0200 ++++ linux-imx6-3.14/drivers/dma/pxp/regs-pxp_v2.h 2014-09-11 18:06:00.198030770 +0200 @@ -0,0 +1,1152 @@ +/* + * Freescale PXP Register Definitions @@ -65618,7 +65618,7 @@ diff -Nur linux-3.14.17/drivers/dma/pxp/regs-pxp_v2.h linux-imx6-3.14/drivers/dm +#endif /* __ARCH_ARM___PXP_H */ diff -Nur linux-3.14.17/drivers/gpio/gpio-pca953x.c linux-imx6-3.14/drivers/gpio/gpio-pca953x.c --- linux-3.14.17/drivers/gpio/gpio-pca953x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpio/gpio-pca953x.c 2014-09-09 10:13:48.852954170 +0200 ++++ linux-imx6-3.14/drivers/gpio/gpio-pca953x.c 2014-09-11 18:06:00.354031392 +0200 @@ -19,6 +19,7 @@ #include <linux/irqdomain.h> #include <linux/i2c.h> @@ -65640,7 +65640,7 @@ diff -Nur linux-3.14.17/drivers/gpio/gpio-pca953x.c linux-imx6-3.14/drivers/gpio */ diff -Nur linux-3.14.17/drivers/gpu/drm/drm_crtc_helper.c linux-imx6-3.14/drivers/gpu/drm/drm_crtc_helper.c --- linux-3.14.17/drivers/gpu/drm/drm_crtc_helper.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/drm_crtc_helper.c 2014-09-09 10:13:48.864954268 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/drm_crtc_helper.c 2014-09-11 18:06:00.478031888 +0200 @@ -564,7 +564,7 @@ * Caller must hold mode config lock. * @@ -65652,7 +65652,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/drm_crtc_helper.c linux-imx6-3.14/driver * ->prepare(), ->modeset() and ->commit() helper callbacks. diff -Nur linux-3.14.17/drivers/gpu/drm/drm_prime.c linux-imx6-3.14/drivers/gpu/drm/drm_prime.c --- linux-3.14.17/drivers/gpu/drm/drm_prime.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/drm_prime.c 2014-09-09 10:13:48.868954301 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/drm_prime.c 2014-09-11 18:06:00.494031953 +0200 @@ -471,7 +471,7 @@ get_dma_buf(dma_buf); @@ -65664,7 +65664,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/drm_prime.c linux-imx6-3.14/drivers/gpu/ } diff -Nur linux-3.14.17/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c linux-imx6-3.14/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c --- linux-3.14.17/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c 2014-09-09 10:13:48.872954334 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c 2014-09-11 18:06:00.498031968 +0200 @@ -224,7 +224,7 @@ get_dma_buf(dma_buf); @@ -65676,7 +65676,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c linux-imx6-3. } diff -Nur linux-3.14.17/drivers/gpu/drm/Kconfig linux-imx6-3.14/drivers/gpu/drm/Kconfig --- linux-3.14.17/drivers/gpu/drm/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/Kconfig 2014-09-09 10:13:48.860954236 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/Kconfig 2014-09-11 18:06:00.394031553 +0200 @@ -166,6 +166,13 @@ Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister chipset. If M is selected the module will be called savage. @@ -65693,7 +65693,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/Kconfig linux-imx6-3.14/drivers/gpu/drm/ source "drivers/gpu/drm/vmwgfx/Kconfig" diff -Nur linux-3.14.17/drivers/gpu/drm/Makefile linux-imx6-3.14/drivers/gpu/drm/Makefile --- linux-3.14.17/drivers/gpu/drm/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/Makefile 2014-09-09 10:13:48.860954236 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/Makefile 2014-09-11 18:06:00.394031553 +0200 @@ -1,3 +1,24 @@ +############################################################################## +# @@ -65729,7 +65729,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/Makefile linux-imx6-3.14/drivers/gpu/drm obj-$(CONFIG_DRM_RADEON)+= radeon/ diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/cik.c linux-imx6-3.14/drivers/gpu/drm/radeon/cik.c --- linux-3.14.17/drivers/gpu/drm/radeon/cik.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/radeon/cik.c 2014-09-09 10:13:48.972955149 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/radeon/cik.c 2014-09-11 18:06:00.878033486 +0200 @@ -2219,7 +2219,6 @@ gb_tile_moden = 0; break; @@ -65748,7 +65748,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/cik.c linux-imx6-3.14/drivers/gpu } diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/evergreen.c linux-imx6-3.14/drivers/gpu/drm/radeon/evergreen.c --- linux-3.14.17/drivers/gpu/drm/radeon/evergreen.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/radeon/evergreen.c 2014-09-09 10:13:48.972955149 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/radeon/evergreen.c 2014-09-11 18:06:00.882033502 +0200 @@ -4763,7 +4763,6 @@ tmp = RREG32(IH_RB_CNTL); tmp |= IH_WPTR_OVERFLOW_CLEAR; @@ -65759,7 +65759,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/evergreen.c linux-imx6-3.14/drive } diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/r600.c linux-imx6-3.14/drivers/gpu/drm/radeon/r600.c --- linux-3.14.17/drivers/gpu/drm/radeon/r600.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/radeon/r600.c 2014-09-09 10:13:48.980955215 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/radeon/r600.c 2014-09-11 18:06:00.890033535 +0200 @@ -3795,7 +3795,6 @@ tmp = RREG32(IH_RB_CNTL); tmp |= IH_WPTR_OVERFLOW_CLEAR; @@ -65770,7 +65770,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/r600.c linux-imx6-3.14/drivers/gp } diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/si.c linux-imx6-3.14/drivers/gpu/drm/radeon/si.c --- linux-3.14.17/drivers/gpu/drm/radeon/si.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/gpu/drm/radeon/si.c 2014-09-09 10:13:49.004955410 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/radeon/si.c 2014-09-11 18:06:00.910033615 +0200 @@ -6098,7 +6098,6 @@ tmp = RREG32(IH_RB_CNTL); tmp |= IH_WPTR_OVERFLOW_CLEAR; @@ -65781,7 +65781,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/radeon/si.c linux-imx6-3.14/drivers/gpu/ } diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/Makefile linux-imx6-3.14/drivers/gpu/drm/vivante/Makefile --- linux-3.14.17/drivers/gpu/drm/vivante/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/gpu/drm/vivante/Makefile 2014-09-09 10:13:49.020955541 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/vivante/Makefile 2014-09-11 18:06:00.966033837 +0200 @@ -0,0 +1,29 @@ +############################################################################## +# @@ -65814,7 +65814,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/Makefile linux-imx6-3.14/drivers +obj-$(CONFIG_DRM_VIVANTE) += vivante.o diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.c linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.c --- linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.c 2014-09-09 10:13:49.020955541 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.c 2014-09-11 18:06:00.966033837 +0200 @@ -0,0 +1,108 @@ +/**************************************************************************** +* @@ -65926,7 +65926,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.c linux-imx6-3.14/dr +MODULE_LICENSE("GPL and additional rights"); diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.h linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.h --- linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.h 2014-09-09 10:13:49.020955541 +0200 ++++ linux-imx6-3.14/drivers/gpu/drm/vivante/vivante_drv.h 2014-09-11 18:06:00.966033837 +0200 @@ -0,0 +1,66 @@ +/**************************************************************************** +* @@ -65996,7 +65996,7 @@ diff -Nur linux-3.14.17/drivers/gpu/drm/vivante/vivante_drv.h linux-imx6-3.14/dr +#endif diff -Nur linux-3.14.17/drivers/hwmon/Kconfig linux-imx6-3.14/drivers/hwmon/Kconfig --- linux-3.14.17/drivers/hwmon/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/hwmon/Kconfig 2014-09-09 10:13:49.044955736 +0200 ++++ linux-imx6-3.14/drivers/hwmon/Kconfig 2014-09-11 18:06:01.102034382 +0200 @@ -1584,4 +1584,19 @@ endif # ACPI @@ -66019,7 +66019,7 @@ diff -Nur linux-3.14.17/drivers/hwmon/Kconfig linux-imx6-3.14/drivers/hwmon/Kcon endif # HWMON diff -Nur linux-3.14.17/drivers/hwmon/mag3110.c linux-imx6-3.14/drivers/hwmon/mag3110.c --- linux-3.14.17/drivers/hwmon/mag3110.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/hwmon/mag3110.c 2014-09-09 10:13:49.060955867 +0200 ++++ linux-imx6-3.14/drivers/hwmon/mag3110.c 2014-09-11 18:06:01.178034686 +0200 @@ -0,0 +1,611 @@ +/* + * @@ -66634,7 +66634,7 @@ diff -Nur linux-3.14.17/drivers/hwmon/mag3110.c linux-imx6-3.14/drivers/hwmon/ma +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/hwmon/Makefile linux-imx6-3.14/drivers/hwmon/Makefile --- linux-3.14.17/drivers/hwmon/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/hwmon/Makefile 2014-09-09 10:13:49.044955736 +0200 ++++ linux-imx6-3.14/drivers/hwmon/Makefile 2014-09-11 18:06:01.102034382 +0200 @@ -142,6 +142,8 @@ obj-$(CONFIG_SENSORS_W83L786NG) += w83l786ng.o obj-$(CONFIG_SENSORS_WM831X) += wm831x-hwmon.o @@ -66646,7 +66646,7 @@ diff -Nur linux-3.14.17/drivers/hwmon/Makefile linux-imx6-3.14/drivers/hwmon/Mak diff -Nur linux-3.14.17/drivers/hwmon/mxc_mma8451.c linux-imx6-3.14/drivers/hwmon/mxc_mma8451.c --- linux-3.14.17/drivers/hwmon/mxc_mma8451.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/hwmon/mxc_mma8451.c 2014-09-09 10:13:49.060955867 +0200 ++++ linux-imx6-3.14/drivers/hwmon/mxc_mma8451.c 2014-09-11 18:06:01.178034686 +0200 @@ -0,0 +1,598 @@ +/* + * mma8451.c - Linux kernel modules for 3-Axis Orientation/Motion @@ -67248,7 +67248,7 @@ diff -Nur linux-3.14.17/drivers/hwmon/mxc_mma8451.c linux-imx6-3.14/drivers/hwmo +module_exit(mma8451_exit); diff -Nur linux-3.14.17/drivers/hwmon/smsc47m192.c linux-imx6-3.14/drivers/hwmon/smsc47m192.c --- linux-3.14.17/drivers/hwmon/smsc47m192.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/hwmon/smsc47m192.c 2014-09-09 10:13:49.064955899 +0200 ++++ linux-imx6-3.14/drivers/hwmon/smsc47m192.c 2014-09-11 18:06:01.198034765 +0200 @@ -86,7 +86,7 @@ */ static inline s8 TEMP_TO_REG(int val) @@ -67269,7 +67269,7 @@ diff -Nur linux-3.14.17/drivers/hwmon/smsc47m192.c linux-imx6-3.14/drivers/hwmon return count; diff -Nur linux-3.14.17/drivers/i2c/busses/i2c-imx.c linux-imx6-3.14/drivers/i2c/busses/i2c-imx.c --- linux-3.14.17/drivers/i2c/busses/i2c-imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/i2c/busses/i2c-imx.c 2014-09-09 10:13:49.076955998 +0200 ++++ linux-imx6-3.14/drivers/i2c/busses/i2c-imx.c 2014-09-11 18:06:01.214034829 +0200 @@ -184,6 +184,9 @@ int stopped; unsigned int ifdr; /* IMX_I2C_IFDR */ @@ -67413,7 +67413,7 @@ diff -Nur linux-3.14.17/drivers/i2c/busses/i2c-imx.c linux-imx6-3.14/drivers/i2c imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, diff -Nur linux-3.14.17/drivers/iio/accel/bma180.c linux-imx6-3.14/drivers/iio/accel/bma180.c --- linux-3.14.17/drivers/iio/accel/bma180.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/iio/accel/bma180.c 2014-09-09 10:13:49.100956193 +0200 ++++ linux-imx6-3.14/drivers/iio/accel/bma180.c 2014-09-11 18:06:01.246034957 +0200 @@ -68,13 +68,13 @@ /* Defaults values */ #define BMA180_DEF_PMODE 0 @@ -67450,7 +67450,7 @@ diff -Nur linux-3.14.17/drivers/iio/accel/bma180.c linux-imx6-3.14/drivers/iio/a mutex_unlock(&data->mutex); diff -Nur linux-3.14.17/drivers/iio/industrialio-buffer.c linux-imx6-3.14/drivers/iio/industrialio-buffer.c --- linux-3.14.17/drivers/iio/industrialio-buffer.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/iio/industrialio-buffer.c 2014-09-09 10:13:49.112956291 +0200 ++++ linux-imx6-3.14/drivers/iio/industrialio-buffer.c 2014-09-11 18:06:01.286035116 +0200 @@ -953,7 +953,7 @@ /* Now we have the two masks, work from least sig and build up sizes */ @@ -67462,7 +67462,7 @@ diff -Nur linux-3.14.17/drivers/iio/industrialio-buffer.c linux-imx6-3.14/driver indio_dev->masklength, diff -Nur linux-3.14.17/drivers/input/input.c linux-imx6-3.14/drivers/input/input.c --- linux-3.14.17/drivers/input/input.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/input.c 2014-09-09 10:13:49.172956780 +0200 ++++ linux-imx6-3.14/drivers/input/input.c 2014-09-11 18:06:01.434035708 +0200 @@ -257,10 +257,9 @@ } @@ -67494,7 +67494,7 @@ diff -Nur linux-3.14.17/drivers/input/input.c linux-imx6-3.14/drivers/input/inpu dev->event(dev, type, code, value); diff -Nur linux-3.14.17/drivers/input/keyboard/gpio_keys.c linux-imx6-3.14/drivers/input/keyboard/gpio_keys.c --- linux-3.14.17/drivers/input/keyboard/gpio_keys.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/keyboard/gpio_keys.c 2014-09-09 10:13:49.180956845 +0200 ++++ linux-imx6-3.14/drivers/input/keyboard/gpio_keys.c 2014-09-11 18:06:01.486035915 +0200 @@ -3,6 +3,7 @@ * * Copyright 2005 Phil Blundell @@ -67514,7 +67514,7 @@ diff -Nur linux-3.14.17/drivers/input/keyboard/gpio_keys.c linux-imx6-3.14/drive if (!button->irq) { diff -Nur linux-3.14.17/drivers/input/keyboard/imx_keypad.c linux-imx6-3.14/drivers/input/keyboard/imx_keypad.c --- linux-3.14.17/drivers/input/keyboard/imx_keypad.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/keyboard/imx_keypad.c 2014-09-09 10:13:49.180956845 +0200 ++++ linux-imx6-3.14/drivers/input/keyboard/imx_keypad.c 2014-09-11 18:06:01.486035915 +0200 @@ -1,6 +1,7 @@ /* * Driver for the IMX keypad port. @@ -67543,7 +67543,7 @@ diff -Nur linux-3.14.17/drivers/input/keyboard/imx_keypad.c linux-imx6-3.14/driv diff -Nur linux-3.14.17/drivers/input/misc/mma8450.c linux-imx6-3.14/drivers/input/misc/mma8450.c --- linux-3.14.17/drivers/input/misc/mma8450.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/misc/mma8450.c 2014-09-09 10:13:49.188956911 +0200 ++++ linux-imx6-3.14/drivers/input/misc/mma8450.c 2014-09-11 18:06:01.498035963 +0200 @@ -1,7 +1,7 @@ /* * Driver for Freescale's 3-Axis Accelerometer MMA8450 @@ -67816,7 +67816,7 @@ diff -Nur linux-3.14.17/drivers/input/misc/mma8450.c linux-imx6-3.14/drivers/inp kfree(m); diff -Nur linux-3.14.17/drivers/input/mouse/synaptics.c linux-imx6-3.14/drivers/input/mouse/synaptics.c --- linux-3.14.17/drivers/input/mouse/synaptics.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/mouse/synaptics.c 2014-09-09 10:13:49.196956975 +0200 ++++ linux-imx6-3.14/drivers/input/mouse/synaptics.c 2014-09-11 18:06:01.526036075 +0200 @@ -132,8 +132,7 @@ 1232, 5710, 1156, 4696 }, @@ -67838,7 +67838,7 @@ diff -Nur linux-3.14.17/drivers/input/mouse/synaptics.c linux-imx6-3.14/drivers/ "LEN2005", diff -Nur linux-3.14.17/drivers/input/sparse-keymap.c linux-imx6-3.14/drivers/input/sparse-keymap.c --- linux-3.14.17/drivers/input/sparse-keymap.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/input/sparse-keymap.c 2014-09-09 10:13:49.200957008 +0200 ++++ linux-imx6-3.14/drivers/input/sparse-keymap.c 2014-09-11 18:06:01.554036186 +0200 @@ -236,7 +236,7 @@ * in an input device that was set up by sparse_keymap_setup(). * NOTE: It is safe to cal this function while input device is @@ -67850,7 +67850,7 @@ diff -Nur linux-3.14.17/drivers/input/sparse-keymap.c linux-imx6-3.14/drivers/in void sparse_keymap_free(struct input_dev *dev) diff -Nur linux-3.14.17/drivers/Kconfig linux-imx6-3.14/drivers/Kconfig --- linux-3.14.17/drivers/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/Kconfig 2014-09-09 10:13:48.632952376 +0200 ++++ linux-imx6-3.14/drivers/Kconfig 2014-09-11 18:05:59.194026757 +0200 @@ -96,6 +96,8 @@ source "drivers/memstick/Kconfig" @@ -67862,7 +67862,7 @@ diff -Nur linux-3.14.17/drivers/Kconfig linux-imx6-3.14/drivers/Kconfig source "drivers/accessibility/Kconfig" diff -Nur linux-3.14.17/drivers/leds/leds-gpio.c linux-imx6-3.14/drivers/leds/leds-gpio.c --- linux-3.14.17/drivers/leds/leds-gpio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/leds/leds-gpio.c 2014-09-09 10:13:49.272957595 +0200 ++++ linux-imx6-3.14/drivers/leds/leds-gpio.c 2014-09-11 18:06:01.842037338 +0200 @@ -3,7 +3,7 @@ * * Copyright (C) 2007 8D Technologies inc. @@ -67883,7 +67883,7 @@ diff -Nur linux-3.14.17/drivers/leds/leds-gpio.c linux-imx6-3.14/drivers/leds/le &pdev->dev, NULL); diff -Nur linux-3.14.17/drivers/leds/leds-pwm.c linux-imx6-3.14/drivers/leds/leds-pwm.c --- linux-3.14.17/drivers/leds/leds-pwm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/leds/leds-pwm.c 2014-09-09 10:13:49.276957628 +0200 ++++ linux-imx6-3.14/drivers/leds/leds-pwm.c 2014-09-11 18:06:01.846037353 +0200 @@ -70,6 +70,10 @@ duty *= brightness; @@ -68071,7 +68071,7 @@ diff -Nur linux-3.14.17/drivers/leds/leds-pwm.c linux-imx6-3.14/drivers/leds/led static int led_pwm_remove(struct platform_device *pdev) diff -Nur linux-3.14.17/drivers/mailbox/mailbox.c linux-imx6-3.14/drivers/mailbox/mailbox.c --- linux-3.14.17/drivers/mailbox/mailbox.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mailbox/mailbox.c 2014-09-09 10:13:49.288957725 +0200 ++++ linux-imx6-3.14/drivers/mailbox/mailbox.c 2014-09-11 18:06:01.890037529 +0200 @@ -0,0 +1,488 @@ +/* + * Mailbox: Common code for Mailbox controllers and users @@ -68563,7 +68563,7 @@ diff -Nur linux-3.14.17/drivers/mailbox/mailbox.c linux-imx6-3.14/drivers/mailbo +EXPORT_SYMBOL_GPL(mbox_controller_unregister); diff -Nur linux-3.14.17/drivers/mailbox/Makefile linux-imx6-3.14/drivers/mailbox/Makefile --- linux-3.14.17/drivers/mailbox/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mailbox/Makefile 2014-09-09 10:13:49.288957725 +0200 ++++ linux-imx6-3.14/drivers/mailbox/Makefile 2014-09-11 18:06:01.890037529 +0200 @@ -1,3 +1,7 @@ +# Generic MAILBOX API + @@ -68574,7 +68574,7 @@ diff -Nur linux-3.14.17/drivers/mailbox/Makefile linux-imx6-3.14/drivers/mailbox obj-$(CONFIG_OMAP_MBOX) += omap-mailbox.o diff -Nur linux-3.14.17/drivers/mailbox/pl320-ipc.c linux-imx6-3.14/drivers/mailbox/pl320-ipc.c --- linux-3.14.17/drivers/mailbox/pl320-ipc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mailbox/pl320-ipc.c 2014-09-09 10:13:49.288957725 +0200 ++++ linux-imx6-3.14/drivers/mailbox/pl320-ipc.c 2014-09-11 18:06:01.890037529 +0200 @@ -26,7 +26,7 @@ #include <linux/device.h> #include <linux/amba/bus.h> @@ -68586,7 +68586,7 @@ diff -Nur linux-3.14.17/drivers/mailbox/pl320-ipc.c linux-imx6-3.14/drivers/mail #define IPCMxDSET(m) (((m) * 0x40) + 0x004) diff -Nur linux-3.14.17/drivers/Makefile linux-imx6-3.14/drivers/Makefile --- linux-3.14.17/drivers/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/Makefile 2014-09-09 10:13:48.632952376 +0200 ++++ linux-imx6-3.14/drivers/Makefile 2014-09-11 18:05:59.194026757 +0200 @@ -111,6 +111,7 @@ obj-$(CONFIG_CPU_FREQ) += cpufreq/ obj-$(CONFIG_CPU_IDLE) += cpuidle/ @@ -68597,7 +68597,7 @@ diff -Nur linux-3.14.17/drivers/Makefile linux-imx6-3.14/drivers/Makefile obj-$(CONFIG_INFINIBAND) += infiniband/ diff -Nur linux-3.14.17/drivers/md/dm-bufio.c linux-imx6-3.14/drivers/md/dm-bufio.c --- linux-3.14.17/drivers/md/dm-bufio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/md/dm-bufio.c 2014-09-09 10:13:49.292957759 +0200 ++++ linux-imx6-3.14/drivers/md/dm-bufio.c 2014-09-11 18:06:01.898037562 +0200 @@ -1541,7 +1541,7 @@ BUG_ON(block_size < 1 << SECTOR_SHIFT || (block_size & (block_size - 1))); @@ -68609,7 +68609,7 @@ diff -Nur linux-3.14.17/drivers/md/dm-bufio.c linux-imx6-3.14/drivers/md/dm-bufi goto bad_client; diff -Nur linux-3.14.17/drivers/md/dm-cache-target.c linux-imx6-3.14/drivers/md/dm-cache-target.c --- linux-3.14.17/drivers/md/dm-cache-target.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/md/dm-cache-target.c 2014-09-09 10:13:49.296957792 +0200 ++++ linux-imx6-3.14/drivers/md/dm-cache-target.c 2014-09-11 18:06:01.902037577 +0200 @@ -231,7 +231,7 @@ /* * cache_size entries, dirty if set @@ -68667,7 +68667,7 @@ diff -Nur linux-3.14.17/drivers/md/dm-cache-target.c linux-imx6-3.14/drivers/md/ DMEMIT("1 writethrough "); diff -Nur linux-3.14.17/drivers/media/dvb-frontends/tda10071.c linux-imx6-3.14/drivers/media/dvb-frontends/tda10071.c --- linux-3.14.17/drivers/media/dvb-frontends/tda10071.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/dvb-frontends/tda10071.c 2014-09-09 10:13:49.352958249 +0200 ++++ linux-imx6-3.14/drivers/media/dvb-frontends/tda10071.c 2014-09-11 18:06:02.026038073 +0200 @@ -667,7 +667,6 @@ struct dtv_frontend_properties *c = &fe->dtv_property_cache; int ret, i; @@ -68701,7 +68701,7 @@ diff -Nur linux-3.14.17/drivers/media/dvb-frontends/tda10071.c linux-imx6-3.14/d dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n", diff -Nur linux-3.14.17/drivers/media/platform/Kconfig linux-imx6-3.14/drivers/media/platform/Kconfig --- linux-3.14.17/drivers/media/platform/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/platform/Kconfig 2014-09-09 10:13:49.424958835 +0200 ++++ linux-imx6-3.14/drivers/media/platform/Kconfig 2014-09-11 18:06:02.238038919 +0200 @@ -115,6 +115,21 @@ To compile this driver as a module, choose M here: the module will be called s3c-camif. @@ -68726,7 +68726,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/Kconfig linux-imx6-3.14/drivers/m source "drivers/media/platform/s5p-tv/Kconfig" diff -Nur linux-3.14.17/drivers/media/platform/Makefile linux-imx6-3.14/drivers/media/platform/Makefile --- linux-3.14.17/drivers/media/platform/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/platform/Makefile 2014-09-09 10:13:49.424958835 +0200 ++++ linux-imx6-3.14/drivers/media/platform/Makefile 2014-09-11 18:06:02.238038919 +0200 @@ -51,4 +51,7 @@ obj-$(CONFIG_ARCH_OMAP) += omap/ @@ -68737,7 +68737,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/Makefile linux-imx6-3.14/drivers/ ccflags-y += -I$(srctree)/drivers/media/i2c diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/adv7180.c linux-imx6-3.14/drivers/media/platform/mxc/capture/adv7180.c --- linux-3.14.17/drivers/media/platform/mxc/capture/adv7180.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/adv7180.c 2014-09-09 10:13:49.436958933 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/adv7180.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,1344 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -70085,7 +70085,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/adv7180.c linux-imx6- +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/csi_v4l2_capture.c linux-imx6-3.14/drivers/media/platform/mxc/capture/csi_v4l2_capture.c --- linux-3.14.17/drivers/media/platform/mxc/capture/csi_v4l2_capture.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/csi_v4l2_capture.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/csi_v4l2_capture.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,2047 @@ +/* + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -72136,7 +72136,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/csi_v4l2_capture.c li +MODULE_SUPPORTED_DEVICE("video"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.c linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.c --- linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,302 @@ +/* + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -72442,7 +72442,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.c linux-imx6- +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.h linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.h --- linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.h 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/fsl_csi.h 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,198 @@ +/* + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -72644,7 +72644,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/fsl_csi.h linux-imx6- +void csi_dmareq_rff_disable(void); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,546 @@ + +/* @@ -73194,7 +73194,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_bg_overlay_sdc.c +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_csi_enc.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_csi_enc.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_csi_enc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_csi_enc.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_csi_enc.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,418 @@ +/* + * Copyright 2009-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -73616,7 +73616,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_csi_enc.c linux-i +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,634 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -74254,7 +74254,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_fg_overlay_sdc.c +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_enc.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_enc.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_enc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_enc.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_enc.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,595 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -74853,7 +74853,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_enc.c linux-i +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_sw.h linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_sw.h --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_sw.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_sw.h 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_sw.h 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,43 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -74900,7 +74900,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_sw.h linux-im +#endif diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,521 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -75425,7 +75425,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc_bg.c l +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,582 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -76011,7 +76011,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_prp_vf_sdc.c linu +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_still.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_still.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ipu_still.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_still.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ipu_still.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,268 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -76283,7 +76283,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ipu_still.c linux-imx +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/Kconfig linux-imx6-3.14/drivers/media/platform/mxc/capture/Kconfig --- linux-3.14.17/drivers/media/platform/mxc/capture/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/Kconfig 2014-09-09 10:13:49.436958933 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/Kconfig 2014-09-11 18:06:02.250038968 +0200 @@ -0,0 +1,86 @@ +if VIDEO_MXC_CAPTURE + @@ -76373,7 +76373,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/Kconfig linux-imx6-3. +endif diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/Makefile linux-imx6-3.14/drivers/media/platform/mxc/capture/Makefile --- linux-3.14.17/drivers/media/platform/mxc/capture/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/Makefile 2014-09-09 10:13:49.436958933 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/Makefile 2014-09-11 18:06:02.250038968 +0200 @@ -0,0 +1,21 @@ +obj-$(CONFIG_VIDEO_MXC_CSI_CAMERA) += fsl_csi.o csi_v4l2_capture.o + @@ -76398,7 +76398,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/Makefile linux-imx6-3 +obj-$(CONFIG_MXC_TVIN_ADV7180) += adv7180_tvin.o diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c --- linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,3102 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -79504,7 +79504,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c li +MODULE_SUPPORTED_DEVICE("video"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h --- linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,260 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -79768,7 +79768,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h li +#endif /* __MXC_V4L2_CAPTURE_H__ */ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5640.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ov5640.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,1951 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -81723,7 +81723,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5640.c linux-imx6-3 +MODULE_ALIAS("CSI"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5640_mipi.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640_mipi.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ov5640_mipi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640_mipi.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5640_mipi.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,2104 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -83831,7 +83831,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5640_mipi.c linux-i +MODULE_ALIAS("CSI"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5642.c linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5642.c --- linux-3.14.17/drivers/media/platform/mxc/capture/ov5642.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5642.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/capture/ov5642.c 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,4252 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -88087,7 +88087,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/capture/ov5642.c linux-imx6-3 +MODULE_ALIAS("CSI"); diff -Nur linux-3.14.17/drivers/media/platform/mxc/output/Kconfig linux-imx6-3.14/drivers/media/platform/mxc/output/Kconfig --- linux-3.14.17/drivers/media/platform/mxc/output/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/output/Kconfig 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/output/Kconfig 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1,5 @@ +config VIDEO_MXC_IPU_OUTPUT + tristate "IPU v4l2 output support" @@ -88096,12 +88096,12 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/output/Kconfig linux-imx6-3.1 + This is the video4linux2 driver for IPU post processing video output. diff -Nur linux-3.14.17/drivers/media/platform/mxc/output/Makefile linux-imx6-3.14/drivers/media/platform/mxc/output/Makefile --- linux-3.14.17/drivers/media/platform/mxc/output/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/output/Makefile 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/output/Makefile 2014-09-11 18:06:02.254038983 +0200 @@ -0,0 +1 @@ +obj-$(CONFIG_VIDEO_MXC_IPU_OUTPUT) += mxc_vout.o diff -Nur linux-3.14.17/drivers/media/platform/mxc/output/mxc_vout.c linux-imx6-3.14/drivers/media/platform/mxc/output/mxc_vout.c --- linux-3.14.17/drivers/media/platform/mxc/output/mxc_vout.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/media/platform/mxc/output/mxc_vout.c 2014-09-09 10:13:49.440958965 +0200 ++++ linux-imx6-3.14/drivers/media/platform/mxc/output/mxc_vout.c 2014-09-11 18:06:02.258038999 +0200 @@ -0,0 +1,2265 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -90370,7 +90370,7 @@ diff -Nur linux-3.14.17/drivers/media/platform/mxc/output/mxc_vout.c linux-imx6- +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/media/usb/hdpvr/hdpvr-video.c linux-imx6-3.14/drivers/media/usb/hdpvr/hdpvr-video.c --- linux-3.14.17/drivers/media/usb/hdpvr/hdpvr-video.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/usb/hdpvr/hdpvr-video.c 2014-09-09 10:13:49.532959715 +0200 ++++ linux-imx6-3.14/drivers/media/usb/hdpvr/hdpvr-video.c 2014-09-11 18:06:02.730040885 +0200 @@ -82,7 +82,7 @@ } @@ -90400,7 +90400,7 @@ diff -Nur linux-3.14.17/drivers/media/usb/hdpvr/hdpvr-video.c linux-imx6-3.14/dr V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3, diff -Nur linux-3.14.17/drivers/media/v4l2-core/v4l2-dv-timings.c linux-imx6-3.14/drivers/media/v4l2-core/v4l2-dv-timings.c --- linux-3.14.17/drivers/media/v4l2-core/v4l2-dv-timings.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/v4l2-core/v4l2-dv-timings.c 2014-09-09 10:13:49.552959878 +0200 ++++ linux-imx6-3.14/drivers/media/v4l2-core/v4l2-dv-timings.c 2014-09-11 18:06:02.834041301 +0200 @@ -595,10 +595,10 @@ aspect.denominator = 9; } else if (ratio == 34) { @@ -90416,7 +90416,7 @@ diff -Nur linux-3.14.17/drivers/media/v4l2-core/v4l2-dv-timings.c linux-imx6-3.1 aspect.denominator = 100; diff -Nur linux-3.14.17/drivers/media/v4l2-core/videobuf2-dma-contig.c linux-imx6-3.14/drivers/media/v4l2-core/videobuf2-dma-contig.c --- linux-3.14.17/drivers/media/v4l2-core/videobuf2-dma-contig.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/v4l2-core/videobuf2-dma-contig.c 2014-09-09 10:13:49.552959878 +0200 ++++ linux-imx6-3.14/drivers/media/v4l2-core/videobuf2-dma-contig.c 2014-09-11 18:06:02.838041316 +0200 @@ -719,7 +719,7 @@ /* get the associated scatterlist for this buffer */ @@ -90428,7 +90428,7 @@ diff -Nur linux-3.14.17/drivers/media/v4l2-core/videobuf2-dma-contig.c linux-imx } diff -Nur linux-3.14.17/drivers/media/v4l2-core/videobuf-dma-contig.c linux-imx6-3.14/drivers/media/v4l2-core/videobuf-dma-contig.c --- linux-3.14.17/drivers/media/v4l2-core/videobuf-dma-contig.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/media/v4l2-core/videobuf-dma-contig.c 2014-09-09 10:13:49.552959878 +0200 ++++ linux-imx6-3.14/drivers/media/v4l2-core/videobuf-dma-contig.c 2014-09-11 18:06:02.834041301 +0200 @@ -304,7 +304,7 @@ /* Try to remap memory */ @@ -90440,7 +90440,7 @@ diff -Nur linux-3.14.17/drivers/media/v4l2-core/videobuf-dma-contig.c linux-imx6 dev_err(q->dev, "mmap: remap failed with error %d. ", diff -Nur linux-3.14.17/drivers/mfd/ab8500-core.c linux-imx6-3.14/drivers/mfd/ab8500-core.c --- linux-3.14.17/drivers/mfd/ab8500-core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/ab8500-core.c 2014-09-09 10:13:49.568960009 +0200 ++++ linux-imx6-3.14/drivers/mfd/ab8500-core.c 2014-09-11 18:06:02.862041412 +0200 @@ -592,7 +592,7 @@ /* If ->irq_base is zero this will give a linear mapping */ @@ -90528,7 +90528,7 @@ diff -Nur linux-3.14.17/drivers/mfd/ab8500-core.c linux-imx6-3.14/drivers/mfd/ab } diff -Nur linux-3.14.17/drivers/mfd/db8500-prcmu.c linux-imx6-3.14/drivers/mfd/db8500-prcmu.c --- linux-3.14.17/drivers/mfd/db8500-prcmu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/db8500-prcmu.c 2014-09-09 10:13:49.572960042 +0200 ++++ linux-imx6-3.14/drivers/mfd/db8500-prcmu.c 2014-09-11 18:06:02.866041428 +0200 @@ -25,6 +25,7 @@ #include <linux/bitops.h> #include <linux/fs.h> @@ -90612,7 +90612,7 @@ diff -Nur linux-3.14.17/drivers/mfd/db8500-prcmu.c linux-imx6-3.14/drivers/mfd/d pr_err("prcmu: Failed to add ab8500 subdevice\n"); diff -Nur linux-3.14.17/drivers/mfd/Kconfig linux-imx6-3.14/drivers/mfd/Kconfig --- linux-3.14.17/drivers/mfd/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/Kconfig 2014-09-09 10:13:49.568960009 +0200 ++++ linux-imx6-3.14/drivers/mfd/Kconfig 2014-09-11 18:06:02.862041412 +0200 @@ -163,6 +163,14 @@ Additional drivers must be enabled in order to use the functionality of the device. @@ -90635,7 +90635,7 @@ diff -Nur linux-3.14.17/drivers/mfd/Kconfig linux-imx6-3.14/drivers/mfd/Kconfig + diff -Nur linux-3.14.17/drivers/mfd/Makefile linux-imx6-3.14/drivers/mfd/Makefile --- linux-3.14.17/drivers/mfd/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/Makefile 2014-09-09 10:13:49.568960009 +0200 ++++ linux-imx6-3.14/drivers/mfd/Makefile 2014-09-11 18:06:02.862041412 +0200 @@ -166,3 +166,4 @@ obj-$(CONFIG_MFD_AS3711) += as3711.o obj-$(CONFIG_MFD_AS3722) += as3722.o @@ -90643,7 +90643,7 @@ diff -Nur linux-3.14.17/drivers/mfd/Makefile linux-imx6-3.14/drivers/mfd/Makefil +obj-$(CONFIG_MFD_MXC_HDMI) += mxc-hdmi-core.o diff -Nur linux-3.14.17/drivers/mfd/mxc-hdmi-core.c linux-imx6-3.14/drivers/mfd/mxc-hdmi-core.c --- linux-3.14.17/drivers/mfd/mxc-hdmi-core.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mfd/mxc-hdmi-core.c 2014-09-09 10:13:49.576960075 +0200 ++++ linux-imx6-3.14/drivers/mfd/mxc-hdmi-core.c 2014-09-11 18:06:02.874041460 +0200 @@ -0,0 +1,798 @@ +/* + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. @@ -91445,7 +91445,7 @@ diff -Nur linux-3.14.17/drivers/mfd/mxc-hdmi-core.c linux-imx6-3.14/drivers/mfd/ +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/mfd/si476x-cmd.c linux-imx6-3.14/drivers/mfd/si476x-cmd.c --- linux-3.14.17/drivers/mfd/si476x-cmd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/si476x-cmd.c 2014-09-09 10:13:49.580960108 +0200 ++++ linux-imx6-3.14/drivers/mfd/si476x-cmd.c 2014-09-11 18:06:02.910041603 +0200 @@ -303,13 +303,13 @@ * possible racing conditions when working in polling mode */ atomic_set(&core->cts, 0); @@ -91469,7 +91469,7 @@ diff -Nur linux-3.14.17/drivers/mfd/si476x-cmd.c linux-imx6-3.14/drivers/mfd/si4 When working in polling mode, for some reason the tuner will diff -Nur linux-3.14.17/drivers/mfd/si476x-i2c.c linux-imx6-3.14/drivers/mfd/si476x-i2c.c --- linux-3.14.17/drivers/mfd/si476x-i2c.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/si476x-i2c.c 2014-09-09 10:13:49.580960108 +0200 ++++ linux-imx6-3.14/drivers/mfd/si476x-i2c.c 2014-09-11 18:06:02.910041603 +0200 @@ -303,7 +303,7 @@ */ udelay(100); @@ -91519,7 +91519,7 @@ diff -Nur linux-3.14.17/drivers/mfd/si476x-i2c.c linux-imx6-3.14/drivers/mfd/si4 rval = -ENODEV; diff -Nur linux-3.14.17/drivers/mfd/si476x-prop.c linux-imx6-3.14/drivers/mfd/si476x-prop.c --- linux-3.14.17/drivers/mfd/si476x-prop.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mfd/si476x-prop.c 2014-09-09 10:13:49.580960108 +0200 ++++ linux-imx6-3.14/drivers/mfd/si476x-prop.c 2014-09-11 18:06:02.910041603 +0200 @@ -217,15 +217,36 @@ return 0; } @@ -91559,7 +91559,7 @@ diff -Nur linux-3.14.17/drivers/mfd/si476x-prop.c linux-imx6-3.14/drivers/mfd/si .reg_write = si476x_core_regmap_write, diff -Nur linux-3.14.17/drivers/misc/sram.c linux-imx6-3.14/drivers/misc/sram.c --- linux-3.14.17/drivers/misc/sram.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/misc/sram.c 2014-09-09 10:13:49.640960596 +0200 ++++ linux-imx6-3.14/drivers/misc/sram.c 2014-09-11 18:06:03.010042004 +0200 @@ -29,7 +29,7 @@ #include <linux/spinlock.h> #include <linux/genalloc.h> @@ -91571,7 +91571,7 @@ diff -Nur linux-3.14.17/drivers/misc/sram.c linux-imx6-3.14/drivers/misc/sram.c struct gen_pool *pool; diff -Nur linux-3.14.17/drivers/mmc/core/core.c linux-imx6-3.14/drivers/mmc/core/core.c --- linux-3.14.17/drivers/mmc/core/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/core/core.c 2014-09-09 10:13:49.648960662 +0200 ++++ linux-imx6-3.14/drivers/mmc/core/core.c 2014-09-11 18:06:03.018042035 +0200 @@ -13,11 +13,13 @@ #include <linux/module.h> #include <linux/init.h> @@ -91642,7 +91642,7 @@ diff -Nur linux-3.14.17/drivers/mmc/core/core.c linux-imx6-3.14/drivers/mmc/core host->ios.vdd = fls(ocr) - 1; diff -Nur linux-3.14.17/drivers/mmc/core/host.c linux-imx6-3.14/drivers/mmc/core/host.c --- linux-3.14.17/drivers/mmc/core/host.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/core/host.c 2014-09-09 10:13:49.648960662 +0200 ++++ linux-imx6-3.14/drivers/mmc/core/host.c 2014-09-11 18:06:03.018042035 +0200 @@ -12,14 +12,18 @@ * MMC host class device management */ @@ -91742,7 +91742,7 @@ diff -Nur linux-3.14.17/drivers/mmc/core/host.c linux-imx6-3.14/drivers/mmc/core diff -Nur linux-3.14.17/drivers/mmc/core/mmc.c linux-imx6-3.14/drivers/mmc/core/mmc.c --- linux-3.14.17/drivers/mmc/core/mmc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/core/mmc.c 2014-09-09 10:13:49.648960662 +0200 ++++ linux-imx6-3.14/drivers/mmc/core/mmc.c 2014-09-11 18:06:03.018042035 +0200 @@ -317,6 +317,11 @@ mmc_card_set_blockaddr(card); } @@ -92150,7 +92150,7 @@ diff -Nur linux-3.14.17/drivers/mmc/core/mmc.c linux-imx6-3.14/drivers/mmc/core/ diff -Nur linux-3.14.17/drivers/mmc/core/sdio_irq.c linux-imx6-3.14/drivers/mmc/core/sdio_irq.c --- linux-3.14.17/drivers/mmc/core/sdio_irq.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/core/sdio_irq.c 2014-09-09 10:13:49.648960662 +0200 ++++ linux-imx6-3.14/drivers/mmc/core/sdio_irq.c 2014-09-11 18:06:03.022042051 +0200 @@ -90,6 +90,15 @@ return ret; } @@ -92215,7 +92215,7 @@ diff -Nur linux-3.14.17/drivers/mmc/core/sdio_irq.c linux-imx6-3.14/drivers/mmc/ return 0; diff -Nur linux-3.14.17/drivers/mmc/host/dw_mmc.c linux-imx6-3.14/drivers/mmc/host/dw_mmc.c --- linux-3.14.17/drivers/mmc/host/dw_mmc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/dw_mmc.c 2014-09-09 10:13:49.652960695 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/dw_mmc.c 2014-09-11 18:06:03.026042067 +0200 @@ -2140,6 +2140,8 @@ if (!mmc) return -ENOMEM; @@ -92227,7 +92227,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/dw_mmc.c linux-imx6-3.14/drivers/mmc/ho slot->mmc = mmc; diff -Nur linux-3.14.17/drivers/mmc/host/Kconfig linux-imx6-3.14/drivers/mmc/host/Kconfig --- linux-3.14.17/drivers/mmc/host/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/Kconfig 2014-09-09 10:13:49.648960662 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/Kconfig 2014-09-11 18:06:03.022042051 +0200 @@ -25,8 +25,7 @@ If unsure, say N. @@ -92425,7 +92425,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/Kconfig linux-imx6-3.14/drivers/mmc/hos platform with SD or MMC devices, say Y or M here. diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-acpi.c linux-imx6-3.14/drivers/mmc/host/sdhci-acpi.c --- linux-3.14.17/drivers/mmc/host/sdhci-acpi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-acpi.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-acpi.c 2014-09-11 18:06:03.030042084 +0200 @@ -101,11 +101,19 @@ } @@ -92448,7 +92448,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-acpi.c linux-imx6-3.14/drivers/mm diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-bcm2835.c linux-imx6-3.14/drivers/mmc/host/sdhci-bcm2835.c --- linux-3.14.17/drivers/mmc/host/sdhci-bcm2835.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-bcm2835.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-bcm2835.c 2014-09-11 18:06:03.030042084 +0200 @@ -131,8 +131,12 @@ .read_l = bcm2835_sdhci_readl, .read_w = bcm2835_sdhci_readw, @@ -92464,7 +92464,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-bcm2835.c linux-imx6-3.14/drivers static const struct sdhci_pltfm_data bcm2835_sdhci_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-bcm-kona.c linux-imx6-3.14/drivers/mmc/host/sdhci-bcm-kona.c --- linux-3.14.17/drivers/mmc/host/sdhci-bcm-kona.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-bcm-kona.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-bcm-kona.c 2014-09-11 18:06:03.030042084 +0200 @@ -205,9 +205,13 @@ } @@ -92481,7 +92481,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-bcm-kona.c linux-imx6-3.14/driver diff -Nur linux-3.14.17/drivers/mmc/host/sdhci.c linux-imx6-3.14/drivers/mmc/host/sdhci.c --- linux-3.14.17/drivers/mmc/host/sdhci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci.c 2014-09-09 10:13:49.660960759 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci.c 2014-09-11 18:06:03.034042099 +0200 @@ -44,6 +44,8 @@ #define MAX_TUNING_LOOP 40 @@ -93737,7 +93737,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci.c linux-imx6-3.14/drivers/mmc/hos host->adma_desc = NULL; diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-cns3xxx.c linux-imx6-3.14/drivers/mmc/host/sdhci-cns3xxx.c --- linux-3.14.17/drivers/mmc/host/sdhci-cns3xxx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-cns3xxx.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-cns3xxx.c 2014-09-11 18:06:03.030042084 +0200 @@ -30,13 +30,12 @@ u16 clk; unsigned long timeout; @@ -93783,7 +93783,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-cns3xxx.c linux-imx6-3.14/drivers static int sdhci_cns3xxx_probe(struct platform_device *pdev) diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-dove.c linux-imx6-3.14/drivers/mmc/host/sdhci-dove.c --- linux-3.14.17/drivers/mmc/host/sdhci-dove.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-dove.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-dove.c 2014-09-11 18:06:03.030042084 +0200 @@ -86,6 +86,10 @@ static const struct sdhci_ops sdhci_dove_ops = { .read_w = sdhci_dove_readw, @@ -93797,7 +93797,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-dove.c linux-imx6-3.14/drivers/mm static const struct sdhci_pltfm_data sdhci_dove_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-esdhc.h linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc.h --- linux-3.14.17/drivers/mmc/host/sdhci-esdhc.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc.h 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc.h 2014-09-11 18:06:03.030042084 +0200 @@ -20,12 +20,11 @@ #define ESDHC_DEFAULT_QUIRKS (SDHCI_QUIRK_FORCE_BLK_SZ_2048 | \ @@ -93815,7 +93815,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-esdhc.h linux-imx6-3.14/drivers/m #define ESDHC_DIVIDER_SHIFT 4 diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-esdhc-imx.c linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc-imx.c --- linux-3.14.17/drivers/mmc/host/sdhci-esdhc-imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc-imx.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-esdhc-imx.c 2014-09-11 18:06:03.030042084 +0200 @@ -11,6 +11,7 @@ * the Free Software Foundation; either version 2 of the License. */ @@ -94231,7 +94231,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-esdhc-imx.c linux-imx6-3.14/drive return sdhci_runtime_resume_host(host); diff -Nur linux-3.14.17/drivers/mmc/host/sdhci.h linux-imx6-3.14/drivers/mmc/host/sdhci.h --- linux-3.14.17/drivers/mmc/host/sdhci.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci.h 2014-09-09 10:13:49.660960759 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci.h 2014-09-11 18:06:03.034042099 +0200 @@ -281,18 +281,15 @@ unsigned int (*get_max_clock)(struct sdhci_host *host); unsigned int (*get_min_clock)(struct sdhci_host *host); @@ -94274,7 +94274,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci.h linux-imx6-3.14/drivers/mmc/hos extern int sdhci_resume_host(struct sdhci_host *host); diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-arasan.c linux-imx6-3.14/drivers/mmc/host/sdhci-of-arasan.c --- linux-3.14.17/drivers/mmc/host/sdhci-of-arasan.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-arasan.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-arasan.c 2014-09-11 18:06:03.030042084 +0200 @@ -52,8 +52,12 @@ } @@ -94290,7 +94290,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-arasan.c linux-imx6-3.14/drive static struct sdhci_pltfm_data sdhci_arasan_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-esdhc.c linux-imx6-3.14/drivers/mmc/host/sdhci-of-esdhc.c --- linux-3.14.17/drivers/mmc/host/sdhci-of-esdhc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-esdhc.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-esdhc.c 2014-09-11 18:06:03.030042084 +0200 @@ -199,13 +199,14 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) @@ -94414,7 +94414,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-esdhc.c linux-imx6-3.14/driver .remove = sdhci_esdhc_remove, diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-hlwd.c linux-imx6-3.14/drivers/mmc/host/sdhci-of-hlwd.c --- linux-3.14.17/drivers/mmc/host/sdhci-of-hlwd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-hlwd.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-of-hlwd.c 2014-09-11 18:06:03.030042084 +0200 @@ -58,6 +58,10 @@ .write_l = sdhci_hlwd_writel, .write_w = sdhci_hlwd_writew, @@ -94428,7 +94428,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-of-hlwd.c linux-imx6-3.14/drivers static const struct sdhci_pltfm_data sdhci_hlwd_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pci.c linux-imx6-3.14/drivers/mmc/host/sdhci-pci.c --- linux-3.14.17/drivers/mmc/host/sdhci-pci.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-pci.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-pci.c 2014-09-11 18:06:03.030042084 +0200 @@ -1011,7 +1011,7 @@ return 0; } @@ -94462,7 +94462,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pci.c linux-imx6-3.14/drivers/mmc diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pltfm.c linux-imx6-3.14/drivers/mmc/host/sdhci-pltfm.c --- linux-3.14.17/drivers/mmc/host/sdhci-pltfm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-pltfm.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-pltfm.c 2014-09-11 18:06:03.030042084 +0200 @@ -45,6 +45,10 @@ EXPORT_SYMBOL_GPL(sdhci_pltfm_clk_get_max_clock); @@ -94476,7 +94476,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pltfm.c linux-imx6-3.14/drivers/m #ifdef CONFIG_OF diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pxav2.c linux-imx6-3.14/drivers/mmc/host/sdhci-pxav2.c --- linux-3.14.17/drivers/mmc/host/sdhci-pxav2.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-pxav2.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-pxav2.c 2014-09-11 18:06:03.030042084 +0200 @@ -51,11 +51,13 @@ #define MMC_CARD 0x1000 #define MMC_WIDTH 0x0100 @@ -94522,7 +94522,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pxav2.c linux-imx6-3.14/drivers/m #ifdef CONFIG_OF diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pxav3.c linux-imx6-3.14/drivers/mmc/host/sdhci-pxav3.c --- linux-3.14.17/drivers/mmc/host/sdhci-pxav3.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-pxav3.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-pxav3.c 2014-09-11 18:06:03.030042084 +0200 @@ -57,11 +57,13 @@ #define SDCE_MISC_INT (1<<2) #define SDCE_MISC_INT_EN (1<<1) @@ -94569,7 +94569,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-pxav3.c linux-imx6-3.14/drivers/m static struct sdhci_pltfm_data sdhci_pxav3_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-s3c.c linux-imx6-3.14/drivers/mmc/host/sdhci-s3c.c --- linux-3.14.17/drivers/mmc/host/sdhci-s3c.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-s3c.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-s3c.c 2014-09-11 18:06:03.034042099 +0200 @@ -57,6 +57,8 @@ struct clk *clk_io; @@ -94710,7 +94710,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-s3c.c linux-imx6-3.14/drivers/mmc #else diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-sirf.c linux-imx6-3.14/drivers/mmc/host/sdhci-sirf.c --- linux-3.14.17/drivers/mmc/host/sdhci-sirf.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-sirf.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-sirf.c 2014-09-11 18:06:03.034042099 +0200 @@ -28,7 +28,11 @@ } @@ -94725,7 +94725,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-sirf.c linux-imx6-3.14/drivers/mm static struct sdhci_pltfm_data sdhci_sirf_pdata = { diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-spear.c linux-imx6-3.14/drivers/mmc/host/sdhci-spear.c --- linux-3.14.17/drivers/mmc/host/sdhci-spear.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-spear.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-spear.c 2014-09-11 18:06:03.034042099 +0200 @@ -37,7 +37,10 @@ /* sdhci ops */ @@ -94740,7 +94740,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-spear.c linux-imx6-3.14/drivers/m /* gpio card detection interrupt handler */ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-tegra.c linux-imx6-3.14/drivers/mmc/host/sdhci-tegra.c --- linux-3.14.17/drivers/mmc/host/sdhci-tegra.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mmc/host/sdhci-tegra.c 2014-09-09 10:13:49.656960727 +0200 ++++ linux-imx6-3.14/drivers/mmc/host/sdhci-tegra.c 2014-09-11 18:06:03.034042099 +0200 @@ -48,19 +48,6 @@ int power_gpio; }; @@ -94809,7 +94809,7 @@ diff -Nur linux-3.14.17/drivers/mmc/host/sdhci-tegra.c linux-imx6-3.14/drivers/m static const struct sdhci_pltfm_data sdhci_tegra20_pdata = { diff -Nur linux-3.14.17/drivers/mtd/chips/cfi_cmdset_0002.c linux-imx6-3.14/drivers/mtd/chips/cfi_cmdset_0002.c --- linux-3.14.17/drivers/mtd/chips/cfi_cmdset_0002.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mtd/chips/cfi_cmdset_0002.c 2014-09-09 10:13:49.664960792 +0200 ++++ linux-imx6-3.14/drivers/mtd/chips/cfi_cmdset_0002.c 2014-09-11 18:06:03.038042115 +0200 @@ -1058,17 +1058,13 @@ #define UDELAY(map, chip, adr, usec) \ @@ -94830,7 +94830,7 @@ diff -Nur linux-3.14.17/drivers/mtd/chips/cfi_cmdset_0002.c linux-imx6-3.14/driv #endif diff -Nur linux-3.14.17/drivers/mtd/ubi/build.c linux-imx6-3.14/drivers/mtd/ubi/build.c --- linux-3.14.17/drivers/mtd/ubi/build.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/mtd/ubi/build.c 2014-09-09 10:13:49.688960988 +0200 ++++ linux-imx6-3.14/drivers/mtd/ubi/build.c 2014-09-11 18:06:03.074042259 +0200 @@ -640,7 +640,7 @@ dbg_gen("sizeof(struct ubi_ainf_peb) %zu", sizeof(struct ubi_ainf_peb)); dbg_gen("sizeof(struct ubi_wl_entry) %zu", sizeof(struct ubi_wl_entry)); @@ -94842,7 +94842,7 @@ diff -Nur linux-3.14.17/drivers/mtd/ubi/build.c linux-imx6-3.14/drivers/mtd/ubi/ * may have different eraseblock size and other diff -Nur linux-3.14.17/drivers/mxc/asrc/Kconfig linux-imx6-3.14/drivers/mxc/asrc/Kconfig --- linux-3.14.17/drivers/mxc/asrc/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/asrc/Kconfig 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/asrc/Kconfig 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,14 @@ +# +# ASRC configuration @@ -94860,7 +94860,7 @@ diff -Nur linux-3.14.17/drivers/mxc/asrc/Kconfig linux-imx6-3.14/drivers/mxc/asr +endmenu diff -Nur linux-3.14.17/drivers/mxc/asrc/Makefile linux-imx6-3.14/drivers/mxc/asrc/Makefile --- linux-3.14.17/drivers/mxc/asrc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/asrc/Makefile 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/asrc/Makefile 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,4 @@ +# +# Makefile for the kernel Asynchronous Sample Rate Converter driver @@ -94868,7 +94868,7 @@ diff -Nur linux-3.14.17/drivers/mxc/asrc/Makefile linux-imx6-3.14/drivers/mxc/as +obj-$(CONFIG_MXC_ASRC) += mxc_asrc.o diff -Nur linux-3.14.17/drivers/mxc/asrc/mxc_asrc.c linux-imx6-3.14/drivers/mxc/asrc/mxc_asrc.c --- linux-3.14.17/drivers/mxc/asrc/mxc_asrc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/asrc/mxc_asrc.c 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/asrc/mxc_asrc.c 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,1957 @@ +/* + * Freescale Asynchronous Sample Rate Converter (ASRC) driver @@ -96829,7 +96829,7 @@ diff -Nur linux-3.14.17/drivers/mxc/asrc/mxc_asrc.c linux-imx6-3.14/drivers/mxc/ +MODULE_ALIAS("platform:mxc_asrc"); diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,932 @@ +/**************************************************************************** +* @@ -97765,7 +97765,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_ + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,319 @@ +/**************************************************************************** +* @@ -98088,7 +98088,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_ + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,2114 @@ +/**************************************************************************** +* @@ -100206,7 +100206,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_ + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,75 @@ +/**************************************************************************** +* @@ -100285,7 +100285,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_ + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c --- linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,1735 @@ +/**************************************************************************** +* @@ -102024,7 +102024,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_c + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h --- linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,157 @@ +/**************************************************************************** +* @@ -102185,7 +102185,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_c + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c --- linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,7280 @@ +/**************************************************************************** +* @@ -109469,7 +109469,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_h + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h --- linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,136 @@ +/**************************************************************************** +* @@ -109609,7 +109609,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_h + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/config linux-imx6-3.14/drivers/mxc/gpu-viv/config --- linux-3.14.17/drivers/mxc/gpu-viv/config 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/config 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/config 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,38 @@ +############################################################################## +# @@ -109651,7 +109651,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/config linux-imx6-3.14/drivers/mxc/g + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,3967 @@ +/**************************************************************************** +* @@ -113622,7 +113622,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c linux-imx + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,3042 @@ +/**************************************************************************** +* @@ -116668,7 +116668,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c l +#endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,3677 @@ +/**************************************************************************** +* @@ -120349,7 +120349,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg. +#endif /* gcdENABLE_VG */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c 2014-09-11 18:06:03.086042307 +0200 @@ -0,0 +1,1604 @@ +/**************************************************************************** +* @@ -121957,7 +121957,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c linux- +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c 2014-09-11 18:06:03.086042307 +0200 @@ -0,0 +1,2559 @@ +/**************************************************************************** +* @@ -124520,7 +124520,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c lin +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c 2014-09-11 18:06:03.110042404 +0200 @@ -0,0 +1,2898 @@ +/**************************************************************************** +* @@ -127422,7 +127422,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c lin +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h 2014-09-11 18:06:03.082042291 +0200 @@ -0,0 +1,1011 @@ +/**************************************************************************** +* @@ -128437,7 +128437,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h linux-imx +#endif /* __gc_hal_kernel_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c 2014-09-11 18:06:03.110042404 +0200 @@ -0,0 +1,859 @@ +/**************************************************************************** +* @@ -129300,7 +129300,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c linu + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c 2014-09-11 18:06:03.110042404 +0200 @@ -0,0 +1,877 @@ +/**************************************************************************** +* @@ -130181,7 +130181,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_v +#endif /* gcdENABLE_VG */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,1982 @@ +/**************************************************************************** +* @@ -132167,7 +132167,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c linux + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,522 @@ +/**************************************************************************** +* @@ -132693,7 +132693,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c li +#endif /* gcdENABLE_VG */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,347 @@ +/**************************************************************************** +* @@ -133044,7 +133044,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c lin +#endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,29 @@ +/**************************************************************************** +* @@ -133077,7 +133077,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h l +#endif /* __gc_hal_kernel_precomp_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c 2014-09-09 10:13:49.696961052 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,895 @@ +/**************************************************************************** +* @@ -133976,7 +133976,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c linux- +#endif /* gcdENABLE_VG */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,85 @@ +/**************************************************************************** +* @@ -134065,7 +134065,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h linux- +#endif /* __gc_hal_kernel_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,2264 @@ +/**************************************************************************** +* @@ -136333,7 +136333,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memor +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,3896 @@ +/**************************************************************************** +* @@ -140233,7 +140233,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h linux-i +#endif /* __gc_hal_base_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,4298 @@ +/**************************************************************************** +* @@ -144535,7 +144535,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h lin +#endif /* __gc_hal_compiler_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,1051 @@ +/**************************************************************************** +* @@ -145590,7 +145590,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h linux +#endif /* __gc_hal_driver_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,270 @@ +/**************************************************************************** +* @@ -145864,7 +145864,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h li +#endif /* __gc_hal_driver_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,88 @@ +/**************************************************************************** +* @@ -145956,7 +145956,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h linux-i + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,627 @@ +/**************************************************************************** +* @@ -146587,7 +146587,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h +#endif /* __gc_hal_eglplatform_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,286 @@ +/**************************************************************************** +* @@ -146877,7 +146877,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_ty +#endif /* __gc_hal_eglplatform_type_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,2053 @@ +/**************************************************************************** +* @@ -148934,7 +148934,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h linux +#endif /* __gc_hal_engine_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,904 @@ +/**************************************************************************** +* @@ -149842,7 +149842,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h li +#endif /* __gc_hal_vg_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h 2014-09-11 18:06:03.118042434 +0200 @@ -0,0 +1,965 @@ +/**************************************************************************** +* @@ -150811,7 +150811,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h linux-i +#endif /* __gc_hal_enum_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h 2014-09-11 18:06:03.114042420 +0200 @@ -0,0 +1,2661 @@ +/**************************************************************************** +* @@ -153476,7 +153476,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h linux-imx6-3 +#endif /* __gc_hal_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,185 @@ +/**************************************************************************** +* @@ -153665,7 +153665,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer. +#endif /* __gc_hal_kernel_buffer_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,530 @@ +/**************************************************************************** +* @@ -154199,7 +154199,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h linux-im +#endif /* __gc_hal_mem_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,947 @@ +/**************************************************************************** +* @@ -155150,7 +155150,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h linu +#endif /* __gc_hal_options_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,584 @@ +/**************************************************************************** +* @@ -155738,7 +155738,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h lin +#endif /* __gc_hal_profiler_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,1010 @@ +/**************************************************************************** +* @@ -156752,7 +156752,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h linux +#endif /* __gc_hal_raster_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,248 @@ +/**************************************************************************** +* @@ -157004,7 +157004,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h linux +#endif /* __gc_hal_rename_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,115 @@ +/**************************************************************************** +* @@ -157123,7 +157123,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h l + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,1080 @@ +/**************************************************************************** +* @@ -158207,7 +158207,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h linux- +#endif /* __gc_hal_types_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h 2014-09-09 10:13:49.700961086 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,37 @@ +/**************************************************************************** +* @@ -158248,7 +158248,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h linu +#endif /* __gc_hal_version_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h 2014-09-11 18:06:03.122042450 +0200 @@ -0,0 +1,913 @@ +/**************************************************************************** +* @@ -159165,7 +159165,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h linux-imx +#endif /* __gc_hal_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,795 @@ +/**************************************************************************** +* @@ -159964,7 +159964,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_de +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,84 @@ +/**************************************************************************** +* @@ -160052,7 +160052,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_de + diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,102 @@ +/**************************************************************************** +* @@ -160158,7 +160158,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_de +#endif /* __gc_hal_kernel_debug_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,1676 @@ +/**************************************************************************** +* @@ -161838,7 +161838,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_de +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,192 @@ +/**************************************************************************** +* @@ -162034,7 +162034,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_de +#endif /* __gc_hal_kernel_device_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,1471 @@ +/**************************************************************************** +* @@ -163509,7 +163509,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_dr +#endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,481 @@ +/**************************************************************************** +* @@ -163994,7 +163994,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_li +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,94 @@ +/**************************************************************************** +* @@ -164092,7 +164092,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_li +#endif /* __gc_hal_kernel_linux_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c 2014-09-11 18:06:03.126042465 +0200 @@ -0,0 +1,32 @@ +/**************************************************************************** +* @@ -164128,7 +164128,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_ma +} diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,9019 @@ +/**************************************************************************** +* @@ -173151,7 +173151,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os +#endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,83 @@ +/**************************************************************************** +* @@ -173238,7 +173238,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os +#endif /* __gc_hal_kernel_os_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,174 @@ +/**************************************************************************** +* @@ -173416,7 +173416,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sy +#endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h --- linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,71 @@ +/**************************************************************************** +* @@ -173491,7 +173491,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sy +#endif /* __gc_hal_kernel_sync_h_ */ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/Kbuild linux-imx6-3.14/drivers/mxc/gpu-viv/Kbuild --- linux-3.14.17/drivers/mxc/gpu-viv/Kbuild 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/Kbuild 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/Kbuild 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,236 @@ +############################################################################## +# @@ -173731,7 +173731,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/Kbuild linux-imx6-3.14/drivers/mxc/g +endif diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/Kconfig linux-imx6-3.14/drivers/mxc/gpu-viv/Kconfig --- linux-3.14.17/drivers/mxc/gpu-viv/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/gpu-viv/Kconfig 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/gpu-viv/Kconfig 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,9 @@ +menu "MXC Vivante GPU support" + depends on SOC_IMX6Q @@ -173744,7 +173744,7 @@ diff -Nur linux-3.14.17/drivers/mxc/gpu-viv/Kconfig linux-imx6-3.14/drivers/mxc/ +endmenu diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/Kconfig linux-imx6-3.14/drivers/mxc/hdmi-cec/Kconfig --- linux-3.14.17/drivers/mxc/hdmi-cec/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/hdmi-cec/Kconfig 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/hdmi-cec/Kconfig 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,11 @@ + +menu "MXC HDMI CEC (Consumer Electronics Control) support" @@ -173759,12 +173759,12 @@ diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/Kconfig linux-imx6-3.14/drivers/mxc +endmenu diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/Makefile linux-imx6-3.14/drivers/mxc/hdmi-cec/Makefile --- linux-3.14.17/drivers/mxc/hdmi-cec/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/hdmi-cec/Makefile 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/hdmi-cec/Makefile 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1 @@ +obj-$(CONFIG_MXC_HDMI_CEC) += mxc_hdmi-cec.o diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c --- linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,629 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -174397,7 +174397,7 @@ diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c linux-imx6-3.14/driv + diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h --- linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,38 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -174439,7 +174439,7 @@ diff -Nur linux-3.14.17/drivers/mxc/hdmi-cec/mxc_hdmi-cec.h linux-imx6-3.14/driv +#endif /* !_HDMICEC_H_ */ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,495 @@ +/* + * Copyright 2009-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -174938,7 +174938,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_calc_stripes_sizes.c linux-imx6-3.1 +EXPORT_SYMBOL(ipu_calc_stripes_sizes); diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_capture.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_capture.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_capture.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_capture.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_capture.c 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,816 @@ +/* + * Copyright 2008-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -175758,7 +175758,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_capture.c linux-imx6-3.14/drivers/m +} diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_common.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_common.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_common.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_common.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_common.c 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,3134 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -178896,7 +178896,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_common.c linux-imx6-3.14/drivers/mx +module_exit(ipu_gen_uninit); diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_device.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_device.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_device.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_device.c 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_device.c 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,3717 @@ +/* + * Copyright 2005-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -182617,7 +182617,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_device.c linux-imx6-3.14/drivers/mx +} diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_disp.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_disp.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_disp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_disp.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_disp.c 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,1962 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -184583,7 +184583,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_disp.c linux-imx6-3.14/drivers/mxc/ +} diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_ic.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_ic.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_ic.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_ic.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_ic.c 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,924 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -185511,7 +185511,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_ic.c linux-imx6-3.14/drivers/mxc/ip +} diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_param_mem.h linux-imx6-3.14/drivers/mxc/ipu3/ipu_param_mem.h --- linux-3.14.17/drivers/mxc/ipu3/ipu_param_mem.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_param_mem.h 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_param_mem.h 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,921 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -186436,7 +186436,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_param_mem.h linux-imx6-3.14/drivers +#endif diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_pixel_clk.c linux-imx6-3.14/drivers/mxc/ipu3/ipu_pixel_clk.c --- linux-3.14.17/drivers/mxc/ipu3/ipu_pixel_clk.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_pixel_clk.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_pixel_clk.c 2014-09-11 18:06:03.134042499 +0200 @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -186757,7 +186757,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_pixel_clk.c linux-imx6-3.14/drivers +} diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_prv.h linux-imx6-3.14/drivers/mxc/ipu3/ipu_prv.h --- linux-3.14.17/drivers/mxc/ipu3/ipu_prv.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_prv.h 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_prv.h 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,356 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -187117,7 +187117,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_prv.h linux-imx6-3.14/drivers/mxc/i +#endif /* __INCLUDE_IPU_PRV_H__ */ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_regs.h linux-imx6-3.14/drivers/mxc/ipu3/ipu_regs.h --- linux-3.14.17/drivers/mxc/ipu3/ipu_regs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_regs.h 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/ipu_regs.h 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,743 @@ +/* + * Copyright (C) 2005-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -187864,13 +187864,13 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/ipu_regs.h linux-imx6-3.14/drivers/mxc/ +#endif diff -Nur linux-3.14.17/drivers/mxc/ipu3/Kconfig linux-imx6-3.14/drivers/mxc/ipu3/Kconfig --- linux-3.14.17/drivers/mxc/ipu3/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/Kconfig 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/Kconfig 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,2 @@ +config MXC_IPU_V3 + bool diff -Nur linux-3.14.17/drivers/mxc/ipu3/Makefile linux-imx6-3.14/drivers/mxc/ipu3/Makefile --- linux-3.14.17/drivers/mxc/ipu3/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/Makefile 2014-09-09 10:13:49.704961119 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/Makefile 2014-09-11 18:06:03.130042483 +0200 @@ -0,0 +1,4 @@ +obj-$(CONFIG_MXC_IPU_V3) = mxc_ipu.o + @@ -187878,7 +187878,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/Makefile linux-imx6-3.14/drivers/mxc/ip + ipu_calc_stripes_sizes.o vdoa.o ipu_pixel_clk.o diff -Nur linux-3.14.17/drivers/mxc/ipu3/vdoa.c linux-imx6-3.14/drivers/mxc/ipu3/vdoa.c --- linux-3.14.17/drivers/mxc/ipu3/vdoa.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/vdoa.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/vdoa.c 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,543 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -188425,7 +188425,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/vdoa.c linux-imx6-3.14/drivers/mxc/ipu3 +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/mxc/ipu3/vdoa.h linux-imx6-3.14/drivers/mxc/ipu3/vdoa.h --- linux-3.14.17/drivers/mxc/ipu3/vdoa.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/ipu3/vdoa.h 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/ipu3/vdoa.h 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -188498,7 +188498,7 @@ diff -Nur linux-3.14.17/drivers/mxc/ipu3/vdoa.h linux-imx6-3.14/drivers/mxc/ipu3 +#endif diff -Nur linux-3.14.17/drivers/mxc/Kconfig linux-imx6-3.14/drivers/mxc/Kconfig --- linux-3.14.17/drivers/mxc/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/Kconfig 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/Kconfig 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,24 @@ +# drivers/mxc/Kconfig + @@ -188526,7 +188526,7 @@ diff -Nur linux-3.14.17/drivers/mxc/Kconfig linux-imx6-3.14/drivers/mxc/Kconfig +endif diff -Nur linux-3.14.17/drivers/mxc/Makefile linux-imx6-3.14/drivers/mxc/Makefile --- linux-3.14.17/drivers/mxc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/Makefile 2014-09-09 10:13:49.692961021 +0200 ++++ linux-imx6-3.14/drivers/mxc/Makefile 2014-09-11 18:06:03.078042276 +0200 @@ -0,0 +1,7 @@ +obj-$(CONFIG_MXC_GPU_VIV) += gpu-viv/ +obj-$(CONFIG_MXC_IPU_V3) += ipu3/ @@ -188537,7 +188537,7 @@ diff -Nur linux-3.14.17/drivers/mxc/Makefile linux-imx6-3.14/drivers/mxc/Makefil +obj-$(CONFIG_MXC_MLB) += mlb/ diff -Nur linux-3.14.17/drivers/mxc/mipi/Kconfig linux-imx6-3.14/drivers/mxc/mipi/Kconfig --- linux-3.14.17/drivers/mxc/mipi/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mipi/Kconfig 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mipi/Kconfig 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,14 @@ +# +# MIPI configuration @@ -188555,7 +188555,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mipi/Kconfig linux-imx6-3.14/drivers/mxc/mip +endmenu diff -Nur linux-3.14.17/drivers/mxc/mipi/Makefile linux-imx6-3.14/drivers/mxc/mipi/Makefile --- linux-3.14.17/drivers/mxc/mipi/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mipi/Makefile 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mipi/Makefile 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,4 @@ +# +# Makefile for the mipi interface driver @@ -188563,7 +188563,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mipi/Makefile linux-imx6-3.14/drivers/mxc/mi +obj-$(CONFIG_MXC_MIPI_CSI2) += mxc_mipi_csi2.o diff -Nur linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.c linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.c --- linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.c 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,540 @@ +/* + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -189107,7 +189107,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.c linux-imx6-3.14/drivers +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.h linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.h --- linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.h 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mipi/mxc_mipi_csi2.h 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -189157,7 +189157,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mipi/mxc_mipi_csi2.h linux-imx6-3.14/drivers +#endif diff -Nur linux-3.14.17/drivers/mxc/mlb/Kconfig linux-imx6-3.14/drivers/mxc/mlb/Kconfig --- linux-3.14.17/drivers/mxc/mlb/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mlb/Kconfig 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mlb/Kconfig 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,17 @@ +# +# MLB150 configuration @@ -189178,7 +189178,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mlb/Kconfig linux-imx6-3.14/drivers/mxc/mlb/ +endmenu diff -Nur linux-3.14.17/drivers/mxc/mlb/Makefile linux-imx6-3.14/drivers/mxc/mlb/Makefile --- linux-3.14.17/drivers/mxc/mlb/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mlb/Makefile 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mlb/Makefile 2014-09-11 18:06:03.138042515 +0200 @@ -0,0 +1,5 @@ +# +# Makefile for the i.MX6Q/DL MLB150 driver @@ -189187,7 +189187,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mlb/Makefile linux-imx6-3.14/drivers/mxc/mlb +obj-$(CONFIG_MXC_MLB150) += mxc_mlb150.o diff -Nur linux-3.14.17/drivers/mxc/mlb/mxc_mlb150.c linux-imx6-3.14/drivers/mxc/mlb/mxc_mlb150.c --- linux-3.14.17/drivers/mxc/mlb/mxc_mlb150.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/mlb/mxc_mlb150.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/mlb/mxc_mlb150.c 2014-09-11 18:06:03.142042530 +0200 @@ -0,0 +1,2778 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -191969,7 +191969,7 @@ diff -Nur linux-3.14.17/drivers/mxc/mlb/mxc_mlb150.c linux-imx6-3.14/drivers/mxc +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/mxc/vpu/Kconfig linux-imx6-3.14/drivers/mxc/vpu/Kconfig --- linux-3.14.17/drivers/mxc/vpu/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/vpu/Kconfig 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/vpu/Kconfig 2014-09-11 18:06:03.142042530 +0200 @@ -0,0 +1,31 @@ +# +# Codec configuration @@ -192004,7 +192004,7 @@ diff -Nur linux-3.14.17/drivers/mxc/vpu/Kconfig linux-imx6-3.14/drivers/mxc/vpu/ +endmenu diff -Nur linux-3.14.17/drivers/mxc/vpu/Makefile linux-imx6-3.14/drivers/mxc/vpu/Makefile --- linux-3.14.17/drivers/mxc/vpu/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/vpu/Makefile 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/vpu/Makefile 2014-09-11 18:06:03.142042530 +0200 @@ -0,0 +1,9 @@ +# +# Makefile for the VPU drivers. @@ -192017,7 +192017,7 @@ diff -Nur linux-3.14.17/drivers/mxc/vpu/Makefile linux-imx6-3.14/drivers/mxc/vpu +endif diff -Nur linux-3.14.17/drivers/mxc/vpu/mxc_vpu.c linux-imx6-3.14/drivers/mxc/vpu/mxc_vpu.c --- linux-3.14.17/drivers/mxc/vpu/mxc_vpu.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/mxc/vpu/mxc_vpu.c 2014-09-09 10:13:49.708961151 +0200 ++++ linux-imx6-3.14/drivers/mxc/vpu/mxc_vpu.c 2014-09-11 18:06:03.142042530 +0200 @@ -0,0 +1,1342 @@ +/* + * Copyright 2006-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -193363,7 +193363,7 @@ diff -Nur linux-3.14.17/drivers/mxc/vpu/mxc_vpu.c linux-imx6-3.14/drivers/mxc/vp +module_exit(vpu_exit); diff -Nur linux-3.14.17/drivers/net/bonding/bonding.h linux-imx6-3.14/drivers/net/bonding/bonding.h --- linux-3.14.17/drivers/net/bonding/bonding.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/bonding/bonding.h 2014-09-09 10:13:49.716961215 +0200 ++++ linux-imx6-3.14/drivers/net/bonding/bonding.h 2014-09-11 18:06:03.218042834 +0200 @@ -188,7 +188,8 @@ struct net_device *dev; /* first - useful for panic debug */ struct bonding *bond; /* our master */ @@ -193376,7 +193376,7 @@ diff -Nur linux-3.14.17/drivers/net/bonding/bonding.h linux-imx6-3.14/drivers/ne s8 link; /* one of BOND_LINK_XXXX */ diff -Nur linux-3.14.17/drivers/net/bonding/bond_main.c linux-imx6-3.14/drivers/net/bonding/bond_main.c --- linux-3.14.17/drivers/net/bonding/bond_main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/bonding/bond_main.c 2014-09-09 10:13:49.712961184 +0200 ++++ linux-imx6-3.14/drivers/net/bonding/bond_main.c 2014-09-11 18:06:03.218042834 +0200 @@ -798,7 +798,7 @@ return; @@ -193479,7 +193479,7 @@ diff -Nur linux-3.14.17/drivers/net/bonding/bond_main.c linux-imx6-3.14/drivers/ check_state: diff -Nur linux-3.14.17/drivers/net/can/flexcan.c linux-imx6-3.14/drivers/net/can/flexcan.c --- linux-3.14.17/drivers/net/can/flexcan.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/can/flexcan.c 2014-09-09 10:13:49.720961249 +0200 ++++ linux-imx6-3.14/drivers/net/can/flexcan.c 2014-09-11 18:06:03.246042945 +0200 @@ -125,7 +125,8 @@ FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT) @@ -193521,7 +193521,7 @@ diff -Nur linux-3.14.17/drivers/net/can/flexcan.c linux-imx6-3.14/drivers/net/ca diff -Nur linux-3.14.17/drivers/net/ethernet/adi/bfin_mac.c linux-imx6-3.14/drivers/net/ethernet/adi/bfin_mac.c --- linux-3.14.17/drivers/net/ethernet/adi/bfin_mac.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/adi/bfin_mac.c 2014-09-09 10:13:49.732961347 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/adi/bfin_mac.c 2014-09-11 18:06:03.270043041 +0200 @@ -1040,6 +1040,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -193532,7 +193532,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/adi/bfin_mac.c linux-imx6-3.14/driv .adjtime = bfin_ptp_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c --- linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 2014-09-09 10:13:49.752961509 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 2014-09-11 18:06:03.362043409 +0200 @@ -223,12 +223,6 @@ --nbd; bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); @@ -193558,7 +193558,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c linux-im /* Set PBD in checksum offload case w/o encapsulation */ diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h --- linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h 2014-09-09 10:13:49.752961509 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h 2014-09-11 18:06:03.362043409 +0200 @@ -337,7 +337,6 @@ u8 flags; /* Set on the first BD descriptor when there is a split BD */ @@ -193569,7 +193569,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h linux-imx6-3 struct sw_rx_page { diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/tg3.c linux-imx6-3.14/drivers/net/ethernet/broadcom/tg3.c --- linux-3.14.17/drivers/net/ethernet/broadcom/tg3.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/broadcom/tg3.c 2014-09-09 10:13:49.772961672 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/broadcom/tg3.c 2014-09-11 18:06:03.422043649 +0200 @@ -6322,6 +6322,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -193580,7 +193580,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/broadcom/tg3.c linux-imx6-3.14/driv .adjtime = tg3_ptp_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/brocade/bna/bnad.c linux-imx6-3.14/drivers/net/ethernet/brocade/bna/bnad.c --- linux-3.14.17/drivers/net/ethernet/brocade/bna/bnad.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/brocade/bna/bnad.c 2014-09-09 10:13:49.776961705 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/brocade/bna/bnad.c 2014-09-11 18:06:03.426043665 +0200 @@ -600,9 +600,9 @@ prefetch(bnad->netdev); @@ -193594,7 +193594,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/brocade/bna/bnad.c linux-imx6-3.14/ /* The 'valid' field is set by the adapter, only after writing diff -Nur linux-3.14.17/drivers/net/ethernet/cadence/macb.c linux-imx6-3.14/drivers/net/ethernet/cadence/macb.c --- linux-3.14.17/drivers/net/ethernet/cadence/macb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/cadence/macb.c 2014-09-09 10:13:49.776961705 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/cadence/macb.c 2014-09-11 18:06:03.430043681 +0200 @@ -605,25 +605,16 @@ { unsigned int entry; @@ -193631,7 +193631,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/cadence/macb.c linux-imx6-3.14/driv diff -Nur linux-3.14.17/drivers/net/ethernet/chelsio/cxgb4vf/sge.c linux-imx6-3.14/drivers/net/ethernet/chelsio/cxgb4vf/sge.c --- linux-3.14.17/drivers/net/ethernet/chelsio/cxgb4vf/sge.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/chelsio/cxgb4vf/sge.c 2014-09-09 10:13:49.792961835 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/chelsio/cxgb4vf/sge.c 2014-09-11 18:06:03.478043873 +0200 @@ -1510,7 +1510,8 @@ { struct sk_buff *skb; @@ -193655,7 +193655,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/chelsio/cxgb4vf/sge.c linux-imx6-3. else { diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec.h linux-imx6-3.14/drivers/net/ethernet/freescale/fec.h --- linux-3.14.17/drivers/net/ethernet/freescale/fec.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec.h 2014-09-09 10:13:49.804961934 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec.h 2014-09-11 18:06:03.498043952 +0200 @@ -221,7 +221,7 @@ #define BD_ENET_TX_RCMASK ((ushort)0x003c) #define BD_ENET_TX_UN ((ushort)0x0002) @@ -193728,7 +193728,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec.h linux-imx6-3.14/dri diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec_main.c linux-imx6-3.14/drivers/net/ethernet/freescale/fec_main.c --- linux-3.14.17/drivers/net/ethernet/freescale/fec_main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec_main.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec_main.c 2014-09-11 18:06:03.498043952 +0200 @@ -36,6 +36,7 @@ #include <linux/in.h> #include <linux/ip.h> @@ -195403,7 +195403,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec_main.c linux-imx6-3.1 .driver = { diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec_ptp.c linux-imx6-3.14/drivers/net/ethernet/freescale/fec_ptp.c --- linux-3.14.17/drivers/net/ethernet/freescale/fec_ptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec_ptp.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/fec_ptp.c 2014-09-11 18:06:03.498043952 +0200 @@ -372,6 +372,7 @@ fep->ptp_caps.n_alarm = 0; fep->ptp_caps.n_ext_ts = 0; @@ -195414,7 +195414,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fec_ptp.c linux-imx6-3.14 fep->ptp_caps.adjtime = fec_ptp_adjtime; diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c --- linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 2014-09-11 18:06:03.498043952 +0200 @@ -91,6 +91,9 @@ u16 pkt_len, sc; int curidx; @@ -195458,7 +195458,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c li phy_connection_type = of_get_property(ofdev->dev.of_node, diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/mii-fec.c linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/mii-fec.c --- linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/mii-fec.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/mii-fec.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/fs_enet/mii-fec.c 2014-09-11 18:06:03.498043952 +0200 @@ -95,12 +95,6 @@ } @@ -195482,7 +195482,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/fs_enet/mii-fec.c linux-i if (ret) diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar.c linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.c --- linux-3.14.17/drivers/net/ethernet/freescale/gianfar.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.c 2014-09-11 18:06:03.502043969 +0200 @@ -9,7 +9,7 @@ * Maintainer: Kumar Gala * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com> @@ -197687,7 +197687,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar.c linux-imx6-3.14 { diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar_ethtool.c linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ethtool.c --- linux-3.14.17/drivers/net/ethernet/freescale/gianfar_ethtool.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ethtool.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ethtool.c 2014-09-11 18:06:03.502043969 +0200 @@ -44,10 +44,6 @@ #include "gianfar.h" @@ -197969,7 +197969,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar_ethtool.c linux-i switch (cmd->cmd) { diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar.h linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.h --- linux-3.14.17/drivers/net/ethernet/freescale/gianfar.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.h 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar.h 2014-09-11 18:06:03.502043969 +0200 @@ -9,7 +9,7 @@ * Maintainer: Kumar Gala * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com> @@ -198211,7 +198211,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar.h linux-imx6-3.14 diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar_ptp.c linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ptp.c --- linux-3.14.17/drivers/net/ethernet/freescale/gianfar_ptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ptp.c 2014-09-09 10:13:49.808961966 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/gianfar_ptp.c 2014-09-11 18:06:03.502043969 +0200 @@ -414,6 +414,7 @@ .n_alarm = 0, .n_ext_ts = N_EXT_TS, @@ -198566,7 +198566,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/gianfar_sysfs.c linux-imx -} diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/Kconfig linux-imx6-3.14/drivers/net/ethernet/freescale/Kconfig --- linux-3.14.17/drivers/net/ethernet/freescale/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/Kconfig 2014-09-09 10:13:49.804961934 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/Kconfig 2014-09-11 18:06:03.498043952 +0200 @@ -67,6 +67,7 @@ tristate "Freescale XGMAC MDIO" depends on FSL_SOC @@ -198577,7 +198577,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/Kconfig linux-imx6-3.14/d diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/Makefile linux-imx6-3.14/drivers/net/ethernet/freescale/Makefile --- linux-3.14.17/drivers/net/ethernet/freescale/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/Makefile 2014-09-09 10:13:49.804961934 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/Makefile 2014-09-11 18:06:03.498043952 +0200 @@ -14,7 +14,6 @@ obj-$(CONFIG_GIANFAR) += gianfar_driver.o obj-$(CONFIG_PTP_1588_CLOCK_GIANFAR) += gianfar_ptp.o @@ -198589,7 +198589,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/Makefile linux-imx6-3.14/ ucc_geth_driver-objs := ucc_geth.o ucc_geth_ethtool.o diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/ucc_geth.c linux-imx6-3.14/drivers/net/ethernet/freescale/ucc_geth.c --- linux-3.14.17/drivers/net/ethernet/freescale/ucc_geth.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/ucc_geth.c 2014-09-09 10:13:49.812961999 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/ucc_geth.c 2014-09-11 18:06:03.502043969 +0200 @@ -1728,9 +1728,6 @@ phydev = of_phy_connect(dev, ug_info->phy_node, &adjust_link, 0, @@ -198629,7 +198629,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/ucc_geth.c linux-imx6-3.1 ug_info->tbi_node = of_parse_phandle(np, "tbi-handle", 0); diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/xgmac_mdio.c linux-imx6-3.14/drivers/net/ethernet/freescale/xgmac_mdio.c --- linux-3.14.17/drivers/net/ethernet/freescale/xgmac_mdio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/freescale/xgmac_mdio.c 2014-09-09 10:13:49.812961999 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/freescale/xgmac_mdio.c 2014-09-11 18:06:03.502043969 +0200 @@ -162,7 +162,9 @@ /* Return all Fs if nothing was there */ @@ -198643,7 +198643,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/freescale/xgmac_mdio.c linux-imx6-3 diff -Nur linux-3.14.17/drivers/net/ethernet/intel/e1000e/ptp.c linux-imx6-3.14/drivers/net/ethernet/intel/e1000e/ptp.c --- linux-3.14.17/drivers/net/ethernet/intel/e1000e/ptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/intel/e1000e/ptp.c 2014-09-09 10:13:49.828962129 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/intel/e1000e/ptp.c 2014-09-11 18:06:03.558044192 +0200 @@ -191,6 +191,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -198654,7 +198654,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/intel/e1000e/ptp.c linux-imx6-3.14/ .adjtime = e1000e_phc_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/mellanox/mlx4/en_clock.c linux-imx6-3.14/drivers/net/ethernet/mellanox/mlx4/en_clock.c --- linux-3.14.17/drivers/net/ethernet/mellanox/mlx4/en_clock.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/mellanox/mlx4/en_clock.c 2014-09-09 10:13:49.904962750 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/mellanox/mlx4/en_clock.c 2014-09-11 18:06:03.614044416 +0200 @@ -276,6 +276,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -198665,7 +198665,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/mellanox/mlx4/en_clock.c linux-imx6 .adjtime = mlx4_en_phc_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/sfc/ptp.c linux-imx6-3.14/drivers/net/ethernet/sfc/ptp.c --- linux-3.14.17/drivers/net/ethernet/sfc/ptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/sfc/ptp.c 2014-09-09 10:13:49.952963141 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/sfc/ptp.c 2014-09-11 18:06:03.674044656 +0200 @@ -1208,6 +1208,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -198676,7 +198676,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/sfc/ptp.c linux-imx6-3.14/drivers/n .adjtime = efx_phc_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c linux-imx6-3.14/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c --- linux-3.14.17/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c 2014-09-09 10:13:49.964963238 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c 2014-09-11 18:06:03.690044720 +0200 @@ -164,6 +164,7 @@ .n_alarm = 0, .n_ext_ts = 0, @@ -198687,7 +198687,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c linux-i .adjtime = stmmac_adjust_time, diff -Nur linux-3.14.17/drivers/net/ethernet/ti/cpts.c linux-imx6-3.14/drivers/net/ethernet/ti/cpts.c --- linux-3.14.17/drivers/net/ethernet/ti/cpts.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/ti/cpts.c 2014-09-09 10:13:49.972963304 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/ti/cpts.c 2014-09-11 18:06:03.698044751 +0200 @@ -217,6 +217,7 @@ .name = "CTPS timer", .max_adj = 1000000, @@ -198698,7 +198698,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/ti/cpts.c linux-imx6-3.14/drivers/n .adjtime = cpts_ptp_adjtime, diff -Nur linux-3.14.17/drivers/net/ethernet/tile/tilegx.c linux-imx6-3.14/drivers/net/ethernet/tile/tilegx.c --- linux-3.14.17/drivers/net/ethernet/tile/tilegx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ethernet/tile/tilegx.c 2014-09-09 10:13:49.976963337 +0200 ++++ linux-imx6-3.14/drivers/net/ethernet/tile/tilegx.c 2014-09-11 18:06:03.702044768 +0200 @@ -870,6 +870,7 @@ .name = "mPIPE clock", .max_adj = 999999999, @@ -198709,7 +198709,7 @@ diff -Nur linux-3.14.17/drivers/net/ethernet/tile/tilegx.c linux-imx6-3.14/drive .adjtime = ptp_mpipe_adjtime, diff -Nur linux-3.14.17/drivers/net/ieee802154/Kconfig linux-imx6-3.14/drivers/net/ieee802154/Kconfig --- linux-3.14.17/drivers/net/ieee802154/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ieee802154/Kconfig 2014-09-09 10:13:49.992963467 +0200 ++++ linux-imx6-3.14/drivers/net/ieee802154/Kconfig 2014-09-11 18:06:03.730044879 +0200 @@ -15,9 +15,9 @@ depends on IEEE802154_DRIVERS ---help--- @@ -198753,7 +198753,7 @@ diff -Nur linux-3.14.17/drivers/net/ieee802154/Kconfig linux-imx6-3.14/drivers/n + the module will be called 'mrf24j40'. diff -Nur linux-3.14.17/drivers/net/macvlan.c linux-imx6-3.14/drivers/net/macvlan.c --- linux-3.14.17/drivers/net/macvlan.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/macvlan.c 2014-09-09 10:13:50.004963565 +0200 ++++ linux-imx6-3.14/drivers/net/macvlan.c 2014-09-11 18:06:03.746044943 +0200 @@ -548,7 +548,6 @@ (lowerdev->state & MACVLAN_STATE_MASK); dev->features = lowerdev->features & MACVLAN_FEATURES; @@ -198764,7 +198764,7 @@ diff -Nur linux-3.14.17/drivers/net/macvlan.c linux-imx6-3.14/drivers/net/macvla dev->hard_header_len = lowerdev->hard_header_len; diff -Nur linux-3.14.17/drivers/net/phy/at803x.c linux-imx6-3.14/drivers/net/phy/at803x.c --- linux-3.14.17/drivers/net/phy/at803x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/phy/at803x.c 2014-09-09 10:13:50.004963565 +0200 ++++ linux-imx6-3.14/drivers/net/phy/at803x.c 2014-09-11 18:06:03.746044943 +0200 @@ -27,6 +27,9 @@ #define AT803X_MMD_ACCESS_CONTROL 0x0D #define AT803X_MMD_ACCESS_CONTROL_DATA 0x0E @@ -198873,7 +198873,7 @@ diff -Nur linux-3.14.17/drivers/net/phy/at803x.c linux-imx6-3.14/drivers/net/phy module_init(atheros_init); diff -Nur linux-3.14.17/drivers/net/phy/phy_device.c linux-imx6-3.14/drivers/net/phy/phy_device.c --- linux-3.14.17/drivers/net/phy/phy_device.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/phy/phy_device.c 2014-09-09 10:13:50.008963597 +0200 ++++ linux-imx6-3.14/drivers/net/phy/phy_device.c 2014-09-11 18:06:03.750044960 +0200 @@ -353,7 +353,7 @@ phydev->bus->phy_map[phydev->addr] = phydev; @@ -198903,7 +198903,7 @@ diff -Nur linux-3.14.17/drivers/net/phy/phy_device.c linux-imx6-3.14/drivers/net /* Temporarily just say we support everything */ diff -Nur linux-3.14.17/drivers/net/phy/smsc.c linux-imx6-3.14/drivers/net/phy/smsc.c --- linux-3.14.17/drivers/net/phy/smsc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/phy/smsc.c 2014-09-09 10:13:50.008963597 +0200 ++++ linux-imx6-3.14/drivers/net/phy/smsc.c 2014-09-11 18:06:03.750044960 +0200 @@ -249,8 +249,7 @@ static void __exit smsc_exit(void) @@ -198916,7 +198916,7 @@ diff -Nur linux-3.14.17/drivers/net/phy/smsc.c linux-imx6-3.14/drivers/net/phy/s MODULE_DESCRIPTION("SMSC PHY driver"); diff -Nur linux-3.14.17/drivers/net/phy/vitesse.c linux-imx6-3.14/drivers/net/phy/vitesse.c --- linux-3.14.17/drivers/net/phy/vitesse.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/phy/vitesse.c 2014-09-09 10:13:50.008963597 +0200 ++++ linux-imx6-3.14/drivers/net/phy/vitesse.c 2014-09-11 18:06:03.750044960 +0200 @@ -319,8 +319,7 @@ static void __exit vsc82xx_exit(void) @@ -198929,7 +198929,7 @@ diff -Nur linux-3.14.17/drivers/net/phy/vitesse.c linux-imx6-3.14/drivers/net/ph module_init(vsc82xx_init); diff -Nur linux-3.14.17/drivers/net/ppp/pptp.c linux-imx6-3.14/drivers/net/ppp/pptp.c --- linux-3.14.17/drivers/net/ppp/pptp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/ppp/pptp.c 2014-09-09 10:13:50.012963629 +0200 ++++ linux-imx6-3.14/drivers/net/ppp/pptp.c 2014-09-11 18:06:03.754044975 +0200 @@ -281,7 +281,7 @@ nf_reset(skb); @@ -198941,7 +198941,7 @@ diff -Nur linux-3.14.17/drivers/net/ppp/pptp.c linux-imx6-3.14/drivers/net/ppp/p ip_local_out(skb); diff -Nur linux-3.14.17/drivers/net/veth.c linux-imx6-3.14/drivers/net/veth.c --- linux-3.14.17/drivers/net/veth.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/veth.c 2014-09-09 10:13:50.020963696 +0200 ++++ linux-imx6-3.14/drivers/net/veth.c 2014-09-11 18:06:03.790045119 +0200 @@ -14,6 +14,7 @@ #include <linux/etherdevice.h> #include <linux/u64_stats_sync.h> @@ -198966,7 +198966,7 @@ diff -Nur linux-3.14.17/drivers/net/veth.c linux-imx6-3.14/drivers/net/veth.c diff -Nur linux-3.14.17/drivers/net/wireless/ath/ar5523/ar5523.c linux-imx6-3.14/drivers/net/wireless/ath/ar5523/ar5523.c --- linux-3.14.17/drivers/net/wireless/ath/ar5523/ar5523.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ar5523/ar5523.c 2014-09-09 10:13:50.036963825 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ar5523/ar5523.c 2014-09-11 18:06:03.806045183 +0200 @@ -1090,7 +1090,8 @@ return ret; } @@ -198979,7 +198979,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ar5523/ar5523.c linux-imx6-3.14 diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath10k/mac.c linux-imx6-3.14/drivers/net/wireless/ath/ath10k/mac.c --- linux-3.14.17/drivers/net/wireless/ath/ath10k/mac.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath10k/mac.c 2014-09-09 10:13:50.040963859 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath10k/mac.c 2014-09-11 18:06:03.818045231 +0200 @@ -3183,7 +3183,8 @@ return ret; } @@ -198992,7 +198992,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath10k/mac.c linux-imx6-3.14/dr bool skip; diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/cfg80211.c linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/cfg80211.c --- linux-3.14.17/drivers/net/wireless/ath/ath6kl/cfg80211.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/cfg80211.c 2014-09-09 10:13:50.048963923 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/cfg80211.c 2014-09-11 18:06:03.850045358 +0200 @@ -790,7 +790,7 @@ if (nw_type & ADHOC_NETWORK) { ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "ad-hoc %s selected\n", @@ -199019,7 +199019,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/cfg80211.c linux-imx6-3. diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/hif.h linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/hif.h --- linux-3.14.17/drivers/net/wireless/ath/ath6kl/hif.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/hif.h 2014-09-09 10:13:50.052963956 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/hif.h 2014-09-11 18:06:03.850045358 +0200 @@ -197,9 +197,9 @@ /* bounce buffer for upper layers to copy to/from */ u8 *virt_dma_buf; @@ -199034,7 +199034,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/hif.h linux-imx6-3.14/dr struct ath6kl_irq_proc_registers { diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/sdio.c linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/sdio.c --- linux-3.14.17/drivers/net/wireless/ath/ath6kl/sdio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/sdio.c 2014-09-09 10:13:50.052963956 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath6kl/sdio.c 2014-09-11 18:06:03.850045358 +0200 @@ -222,6 +222,7 @@ struct mmc_data *data) { @@ -199074,7 +199074,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath6kl/sdio.c linux-imx6-3.14/d if (!virt_scat) diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath9k/main.c linux-imx6-3.14/drivers/net/wireless/ath/ath9k/main.c --- linux-3.14.17/drivers/net/wireless/ath/ath9k/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath9k/main.c 2014-09-09 10:13:50.072964119 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath9k/main.c 2014-09-11 18:06:03.870045438 +0200 @@ -1883,7 +1883,8 @@ return !!npend; } @@ -199087,7 +199087,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath9k/main.c linux-imx6-3.14/dr struct ath_hw *ah = sc->sc_ah; diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath9k/xmit.c linux-imx6-3.14/drivers/net/wireless/ath/ath9k/xmit.c --- linux-3.14.17/drivers/net/wireless/ath/ath9k/xmit.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/ath9k/xmit.c 2014-09-09 10:13:50.072964119 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/ath9k/xmit.c 2014-09-11 18:06:03.874045454 +0200 @@ -890,15 +890,6 @@ tx_info = IEEE80211_SKB_CB(skb); @@ -199106,7 +199106,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/ath9k/xmit.c linux-imx6-3.14/dr return bf; diff -Nur linux-3.14.17/drivers/net/wireless/ath/carl9170/main.c linux-imx6-3.14/drivers/net/wireless/ath/carl9170/main.c --- linux-3.14.17/drivers/net/wireless/ath/carl9170/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ath/carl9170/main.c 2014-09-09 10:13:50.076964152 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ath/carl9170/main.c 2014-09-11 18:06:03.878045470 +0200 @@ -1707,7 +1707,9 @@ return 0; } @@ -199120,7 +199120,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ath/carl9170/main.c linux-imx6-3.14 unsigned int vid; diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c 2014-09-11 18:06:03.902045566 +0200 @@ -43,7 +43,6 @@ #include "dhd_bus.h" #include "dhd_dbg.h" @@ -199381,7 +199381,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c linux-i diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.c 2014-09-11 18:06:03.902045566 +0200 @@ -0,0 +1,1035 @@ +/* + * Copyright (c) 2014 Broadcom Corporation @@ -200420,7 +200420,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.c linux-imx +} diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/chip.h 2014-09-11 18:06:03.902045566 +0200 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014 Broadcom Corporation @@ -200515,7 +200515,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/chip.h linux-imx +#endif /* BRCMF_AXIDMP_H */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h 2014-09-11 18:06:03.902045566 +0200 @@ -63,7 +63,6 @@ */ struct brcmf_bus_ops { @@ -200546,7 +200546,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h linux- bus->ops->stop(bus->dev); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c 2014-09-11 18:06:03.902045566 +0200 @@ -32,6 +32,9 @@ #define BRCMF_DEFAULT_SCAN_UNASSOC_TIME 40 #define BRCMF_DEFAULT_PACKET_FILTER "100 0 0 0 0x01 0x00" @@ -200588,7 +200588,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c lin BRCMF_EVENTING_MASK_LEN); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd.h 2014-09-11 18:06:03.902045566 +0200 @@ -186,7 +186,7 @@ void brcmf_txflowblock_if(struct brcmf_if *ifp, enum brcmf_netif_stop_reason reason, bool state); @@ -200600,7 +200600,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd.h linux-imx6 /* Sets dongle media info (drv_version, mac address). */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c 2014-09-11 18:06:03.902045566 +0200 @@ -190,7 +190,7 @@ int ret; struct brcmf_if *ifp = netdev_priv(ndev); @@ -200711,7 +200711,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c linu kfree(drvr); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c 2014-09-11 18:06:03.906045582 +0200 @@ -23,6 +23,7 @@ #include <linux/interrupt.h> #include <linux/sched.h> @@ -202588,7 +202588,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c linux kfree(bus->rxbuf); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.c 2014-09-11 18:06:03.906045582 +0200 @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2013 Broadcom Corporation @@ -202924,7 +202924,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.c linux +} diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/firmware.h 2014-09-11 18:06:03.906045582 +0200 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2013 Broadcom Corporation @@ -202964,7 +202964,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/firmware.h linux +#endif /* BRCMFMAC_FIRMWARE_H */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.c 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.c 2014-09-11 18:06:03.906045582 +0200 @@ -124,7 +124,8 @@ } @@ -202986,7 +202986,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.c linux-imx struct brcmf_pub *drvr = ifp->drvr; diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil.h 2014-09-11 18:06:03.906045582 +0200 @@ -83,7 +83,7 @@ s32 brcmf_fil_cmd_int_set(struct brcmf_if *ifp, u32 cmd, u32 data); s32 brcmf_fil_cmd_int_get(struct brcmf_if *ifp, u32 cmd, u32 *data); @@ -202998,7 +202998,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil.h linux-imx u32 len); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h 2014-09-11 18:06:03.906045582 +0200 @@ -48,6 +48,19 @@ #define BRCMF_MAXRATES_IN_SET 16 /* max # of rates in rateset */ @@ -203056,7 +203056,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h lin struct brcmf_ssid_le ssid_le; diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c 2014-09-11 18:06:03.906045582 +0200 @@ -476,6 +476,7 @@ bool bus_flow_blocked; bool creditmap_received; @@ -203221,7 +203221,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c linux brcmf_err("workqueue creation failed\n"); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/Makefile linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/Makefile --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/Makefile 2014-09-09 10:13:50.100964348 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/Makefile 2014-09-11 18:06:03.902045566 +0200 @@ -24,6 +24,7 @@ obj-$(CONFIG_BRCMFMAC) += brcmfmac.o brcmfmac-objs += \ @@ -203373,7 +203373,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/nvram.h linux-im -#endif /* BRCMFMAC_NVRAM_H */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/p2p.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/p2p.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/p2p.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/p2p.c 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/p2p.c 2014-09-11 18:06:03.906045582 +0200 @@ -797,7 +797,8 @@ /* SOCIAL CHANNELS 1, 6, 11 */ search_state = WL_P2P_DISC_ST_SEARCH; @@ -204618,7 +204618,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h linu -#endif /* _BRCMFMAC_SDIO_CHIP_H_ */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h 2014-09-11 18:06:03.906045582 +0200 @@ -180,6 +180,97 @@ uint max_request_size; ushort max_segment_count; @@ -204719,7 +204719,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h linu /* Register/deregister interrupt handler. */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/usb.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/usb.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2014-09-11 18:06:03.906045582 +0200 @@ -25,6 +25,7 @@ #include <dhd_bus.h> #include <dhd_dbg.h> @@ -205173,7 +205173,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/usb.c linux-imx6 } diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c 2014-09-11 18:06:03.910045599 +0200 @@ -18,6 +18,7 @@ #include <linux/kernel.h> @@ -206087,7 +206087,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c li err = brcmf_cfg80211_change_iface(wdev->wiphy, ndev, wdev->iftype, diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h 2014-09-09 10:13:50.104964380 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h 2014-09-11 18:06:03.910045599 +0200 @@ -89,21 +89,6 @@ BRCMF_SCAN_STATUS_SUPPRESS, }; @@ -206146,7 +206146,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h li u32 wl_get_vif_state_all(struct brcmf_cfg80211_info *cfg, unsigned long state); diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c 2014-09-09 10:13:50.108964412 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c 2014-09-11 18:06:03.914045614 +0200 @@ -897,7 +897,8 @@ return result; } @@ -206172,7 +206172,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c li static struct brcms_info *brcms_attach(struct bcma_device *pdev) diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/main.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/main.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/main.c 2014-09-09 10:13:50.108964412 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmsmac/main.c 2014-09-11 18:06:03.914045614 +0200 @@ -4870,14 +4870,11 @@ /* * low level detach @@ -206219,7 +206219,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmsmac/main.c linux-imx diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmutil/d11.c linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmutil/d11.c --- linux-3.14.17/drivers/net/wireless/brcm80211/brcmutil/d11.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmutil/d11.c 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/brcmutil/d11.c 2014-09-11 18:06:03.922045646 +0200 @@ -21,19 +21,46 @@ #include <brcmu_wifi.h> #include <brcmu_d11.h> @@ -206363,7 +206363,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/brcmutil/d11.c linux-imx6 case BRCMU_CHSPEC_D11AC_BW_160: diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h --- linux-3.14.17/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h 2014-09-11 18:06:03.926045662 +0200 @@ -43,5 +43,6 @@ #define BCM4335_CHIP_ID 0x4335 #define BCM43362_CHIP_ID 43362 @@ -206373,7 +206373,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcm_hw_ids.h lin #endif /* _BRCM_HW_IDS_H_ */ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_d11.h linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_d11.h --- linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_d11.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_d11.h 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_d11.h 2014-09-11 18:06:03.926045662 +0200 @@ -108,13 +108,7 @@ }; @@ -206404,7 +206404,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_d11.h linux struct brcmu_chan { diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_wifi.h linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_wifi.h --- linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_wifi.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_wifi.h 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/brcm80211/include/brcmu_wifi.h 2014-09-11 18:06:03.926045662 +0200 @@ -29,6 +29,7 @@ #define CH_UPPER_SB 0x01 #define CH_LOWER_SB 0x02 @@ -206425,7 +206425,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/brcm80211/include/brcmu_wifi.h linu #define WPA_AUTH_DISABLED 0x0000 /* Legacy (i.e., non-WPA) */ diff -Nur linux-3.14.17/drivers/net/wireless/cw1200/sta.c linux-imx6-3.14/drivers/net/wireless/cw1200/sta.c --- linux-3.14.17/drivers/net/wireless/cw1200/sta.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/cw1200/sta.c 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/cw1200/sta.c 2014-09-11 18:06:03.926045662 +0200 @@ -936,7 +936,8 @@ return ret; } @@ -206438,7 +206438,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/cw1200/sta.c linux-imx6-3.14/driver diff -Nur linux-3.14.17/drivers/net/wireless/cw1200/sta.h linux-imx6-3.14/drivers/net/wireless/cw1200/sta.h --- linux-3.14.17/drivers/net/wireless/cw1200/sta.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/cw1200/sta.h 2014-09-09 10:13:50.120964511 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/cw1200/sta.h 2014-09-11 18:06:03.926045662 +0200 @@ -40,7 +40,8 @@ int cw1200_set_rts_threshold(struct ieee80211_hw *hw, u32 value); @@ -206451,7 +206451,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/cw1200/sta.h linux-imx6-3.14/driver struct netdev_hw_addr_list *mc_list); diff -Nur linux-3.14.17/drivers/net/wireless/iwlegacy/common.c linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.c --- linux-3.14.17/drivers/net/wireless/iwlegacy/common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.c 2014-09-09 10:13:50.140964674 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.c 2014-09-11 18:06:03.942045725 +0200 @@ -4701,7 +4701,8 @@ } EXPORT_SYMBOL(il_mac_change_interface); @@ -206464,7 +206464,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/iwlegacy/common.c linux-imx6-3.14/d unsigned long timeout = jiffies + msecs_to_jiffies(500); diff -Nur linux-3.14.17/drivers/net/wireless/iwlegacy/common.h linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.h --- linux-3.14.17/drivers/net/wireless/iwlegacy/common.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.h 2014-09-09 10:13:50.140964674 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/iwlegacy/common.h 2014-09-11 18:06:03.946045742 +0200 @@ -1722,7 +1722,8 @@ struct ieee80211_vif *vif); int il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -206477,7 +206477,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/iwlegacy/common.h linux-imx6-3.14/d diff -Nur linux-3.14.17/drivers/net/wireless/iwlwifi/dvm/mac80211.c linux-imx6-3.14/drivers/net/wireless/iwlwifi/dvm/mac80211.c --- linux-3.14.17/drivers/net/wireless/iwlwifi/dvm/mac80211.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/iwlwifi/dvm/mac80211.c 2014-09-09 10:13:50.144964706 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/iwlwifi/dvm/mac80211.c 2014-09-11 18:06:03.950045758 +0200 @@ -1091,7 +1091,8 @@ FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL; } @@ -206490,7 +206490,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/iwlwifi/dvm/mac80211.c linux-imx6-3 diff -Nur linux-3.14.17/drivers/net/wireless/libertas/cfg.c linux-imx6-3.14/drivers/net/wireless/libertas/cfg.c --- linux-3.14.17/drivers/net/wireless/libertas/cfg.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/libertas/cfg.c 2014-09-09 10:13:50.160964836 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/libertas/cfg.c 2014-09-11 18:06:04.002045966 +0200 @@ -1766,7 +1766,8 @@ memcpy(priv->wdev->ssid, params->ssid, params->ssid_len); priv->wdev->ssid_len = params->ssid_len; @@ -206503,7 +206503,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/libertas/cfg.c linux-imx6-3.14/driv priv->connect_status = LBS_CONNECTED; diff -Nur linux-3.14.17/drivers/net/wireless/mac80211_hwsim.c linux-imx6-3.14/drivers/net/wireless/mac80211_hwsim.c --- linux-3.14.17/drivers/net/wireless/mac80211_hwsim.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/mac80211_hwsim.c 2014-09-09 10:13:50.164964869 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/mac80211_hwsim.c 2014-09-11 18:06:04.014046014 +0200 @@ -1671,7 +1671,9 @@ return 0; } @@ -206517,7 +206517,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/mac80211_hwsim.c linux-imx6-3.14/dr } diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/cfg80211.c linux-imx6-3.14/drivers/net/wireless/mwifiex/cfg80211.c --- linux-3.14.17/drivers/net/wireless/mwifiex/cfg80211.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/mwifiex/cfg80211.c 2014-09-09 10:13:50.164964869 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/mwifiex/cfg80211.c 2014-09-11 18:06:04.014046014 +0200 @@ -1881,7 +1881,8 @@ params->privacy); done: @@ -206530,7 +206530,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/cfg80211.c linux-imx6-3.14/ " %pM successfully\n", priv->cfg_bssid); diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/main.h linux-imx6-3.14/drivers/net/wireless/mwifiex/main.h --- linux-3.14.17/drivers/net/wireless/mwifiex/main.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/mwifiex/main.h 2014-09-09 10:13:50.168964901 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/mwifiex/main.h 2014-09-11 18:06:04.026046061 +0200 @@ -1078,7 +1078,7 @@ const u8 *key, int key_len, u8 key_index, const u8 *mac_addr, int disable); @@ -206542,7 +206542,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/main.h linux-imx6-3.14/driv diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/sta_ioctl.c linux-imx6-3.14/drivers/net/wireless/mwifiex/sta_ioctl.c --- linux-3.14.17/drivers/net/wireless/mwifiex/sta_ioctl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/mwifiex/sta_ioctl.c 2014-09-09 10:13:50.172964934 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/mwifiex/sta_ioctl.c 2014-09-11 18:06:04.034046094 +0200 @@ -1391,7 +1391,7 @@ * with requisite parameters and calls the IOCTL handler. */ @@ -206554,7 +206554,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/mwifiex/sta_ioctl.c linux-imx6-3.14 diff -Nur linux-3.14.17/drivers/net/wireless/p54/main.c linux-imx6-3.14/drivers/net/wireless/p54/main.c --- linux-3.14.17/drivers/net/wireless/p54/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/p54/main.c 2014-09-09 10:13:50.180964999 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/p54/main.c 2014-09-11 18:06:04.054046173 +0200 @@ -669,7 +669,8 @@ return total; } @@ -206567,7 +206567,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/p54/main.c linux-imx6-3.14/drivers/ unsigned int total, i; diff -Nur linux-3.14.17/drivers/net/wireless/rndis_wlan.c linux-imx6-3.14/drivers/net/wireless/rndis_wlan.c --- linux-3.14.17/drivers/net/wireless/rndis_wlan.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/rndis_wlan.c 2014-09-09 10:13:50.184965032 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/rndis_wlan.c 2014-09-11 18:06:04.062046206 +0200 @@ -2835,7 +2835,9 @@ bssid, req_ie, req_ie_len, resp_ie, resp_ie_len, GFP_KERNEL); @@ -206581,7 +206581,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/rndis_wlan.c linux-imx6-3.14/driver diff -Nur linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00.h linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00.h --- linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00.h 2014-09-09 10:13:50.188965064 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00.h 2014-09-11 18:06:04.086046302 +0200 @@ -1449,7 +1449,8 @@ struct ieee80211_vif *vif, u16 queue, const struct ieee80211_tx_queue_params *params); @@ -206594,7 +206594,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00.h linux-imx6-3.14/dri void rt2x00mac_get_ringparam(struct ieee80211_hw *hw, diff -Nur linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00mac.c linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00mac.c --- linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00mac.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00mac.c 2014-09-09 10:13:50.192965097 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/rt2x00/rt2x00mac.c 2014-09-11 18:06:04.086046302 +0200 @@ -751,7 +751,8 @@ } EXPORT_SYMBOL_GPL(rt2x00mac_rfkill_poll); @@ -206607,7 +206607,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/rt2x00/rt2x00mac.c linux-imx6-3.14/ struct data_queue *queue; diff -Nur linux-3.14.17/drivers/net/wireless/rtl818x/rtl8187/dev.c linux-imx6-3.14/drivers/net/wireless/rtl818x/rtl8187/dev.c --- linux-3.14.17/drivers/net/wireless/rtl818x/rtl8187/dev.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/rtl818x/rtl8187/dev.c 2014-09-09 10:13:50.196965130 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/rtl818x/rtl8187/dev.c 2014-09-11 18:06:04.110046397 +0200 @@ -1636,10 +1636,10 @@ err_free_dmabuf: @@ -206623,7 +206623,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/rtl818x/rtl8187/dev.c linux-imx6-3. diff -Nur linux-3.14.17/drivers/net/wireless/rtlwifi/core.c linux-imx6-3.14/drivers/net/wireless/rtlwifi/core.c --- linux-3.14.17/drivers/net/wireless/rtlwifi/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/rtlwifi/core.c 2014-09-09 10:13:50.196965130 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/rtlwifi/core.c 2014-09-11 18:06:04.110046397 +0200 @@ -1309,7 +1309,8 @@ * before switch channel or power save, or tx buffer packet * maybe send after offchannel or rf sleep, this may cause @@ -206636,7 +206636,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/rtlwifi/core.c linux-imx6-3.14/driv diff -Nur linux-3.14.17/drivers/net/wireless/ti/wlcore/main.c linux-imx6-3.14/drivers/net/wireless/ti/wlcore/main.c --- linux-3.14.17/drivers/net/wireless/ti/wlcore/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/net/wireless/ti/wlcore/main.c 2014-09-09 10:13:50.228965390 +0200 ++++ linux-imx6-3.14/drivers/net/wireless/ti/wlcore/main.c 2014-09-11 18:06:04.150046556 +0200 @@ -5156,7 +5156,8 @@ mutex_unlock(&wl->mutex); } @@ -206649,7 +206649,7 @@ diff -Nur linux-3.14.17/drivers/net/wireless/ti/wlcore/main.c linux-imx6-3.14/dr diff -Nur linux-3.14.17/drivers/parport/Kconfig linux-imx6-3.14/drivers/parport/Kconfig --- linux-3.14.17/drivers/parport/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/parport/Kconfig 2014-09-09 10:13:50.244965520 +0200 ++++ linux-imx6-3.14/drivers/parport/Kconfig 2014-09-11 18:06:04.270047036 +0200 @@ -5,12 +5,6 @@ # Parport configuration. # @@ -206678,7 +206678,7 @@ diff -Nur linux-3.14.17/drivers/parport/Kconfig linux-imx6-3.14/drivers/parport/ config PARPORT_PC diff -Nur linux-3.14.17/drivers/pci/host/Kconfig linux-imx6-3.14/drivers/pci/host/Kconfig --- linux-3.14.17/drivers/pci/host/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pci/host/Kconfig 2014-09-09 10:13:50.248965553 +0200 ++++ linux-imx6-3.14/drivers/pci/host/Kconfig 2014-09-11 18:06:04.274047051 +0200 @@ -21,6 +21,23 @@ select PCIEPORTBUS select PCIE_DW @@ -206705,7 +206705,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/Kconfig linux-imx6-3.14/drivers/pci/hos depends on ARCH_TEGRA diff -Nur linux-3.14.17/drivers/pci/host/Makefile linux-imx6-3.14/drivers/pci/host/Makefile --- linux-3.14.17/drivers/pci/host/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pci/host/Makefile 2014-09-09 10:13:50.248965553 +0200 ++++ linux-imx6-3.14/drivers/pci/host/Makefile 2014-09-11 18:06:04.274047051 +0200 @@ -1,6 +1,7 @@ obj-$(CONFIG_PCIE_DW) += pcie-designware.o obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o @@ -206716,7 +206716,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/Makefile linux-imx6-3.14/drivers/pci/ho obj-$(CONFIG_PCI_RCAR_GEN2) += pci-rcar-gen2.o diff -Nur linux-3.14.17/drivers/pci/host/pcie-designware.c linux-imx6-3.14/drivers/pci/host/pcie-designware.c --- linux-3.14.17/drivers/pci/host/pcie-designware.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pci/host/pcie-designware.c 2014-09-09 10:13:50.252965587 +0200 ++++ linux-imx6-3.14/drivers/pci/host/pcie-designware.c 2014-09-11 18:06:04.274047051 +0200 @@ -23,48 +23,6 @@ #include "pcie-designware.h" @@ -206925,7 +206925,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/pcie-designware.c linux-imx6-3.14/drive static void dw_pcie_add_bus(struct pci_bus *bus) diff -Nur linux-3.14.17/drivers/pci/host/pcie-designware.h linux-imx6-3.14/drivers/pci/host/pcie-designware.h --- linux-3.14.17/drivers/pci/host/pcie-designware.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pci/host/pcie-designware.h 2014-09-09 10:13:50.252965587 +0200 ++++ linux-imx6-3.14/drivers/pci/host/pcie-designware.h 2014-09-11 18:06:04.274047051 +0200 @@ -14,6 +14,48 @@ #ifndef _PCIE_DESIGNWARE_H #define _PCIE_DESIGNWARE_H @@ -206989,7 +206989,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/pcie-designware.h linux-imx6-3.14/drive unsigned long msi_data; diff -Nur linux-3.14.17/drivers/pci/host/pci-imx6.c linux-imx6-3.14/drivers/pci/host/pci-imx6.c --- linux-3.14.17/drivers/pci/host/pci-imx6.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pci/host/pci-imx6.c 2014-09-09 10:13:50.248965553 +0200 ++++ linux-imx6-3.14/drivers/pci/host/pci-imx6.c 2014-09-11 18:06:04.274047051 +0200 @@ -1,6 +1,7 @@ /* * PCIe host controller driver for Freescale i.MX6 SoCs @@ -207668,7 +207668,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/pci-imx6.c linux-imx6-3.14/drivers/pci/ /* Freescale PCIe driver does not allow module unload */ diff -Nur linux-3.14.17/drivers/pci/host/pci-imx6-ep-driver.c linux-imx6-3.14/drivers/pci/host/pci-imx6-ep-driver.c --- linux-3.14.17/drivers/pci/host/pci-imx6-ep-driver.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/pci/host/pci-imx6-ep-driver.c 2014-09-09 10:13:50.248965553 +0200 ++++ linux-imx6-3.14/drivers/pci/host/pci-imx6-ep-driver.c 2014-09-11 18:06:04.274047051 +0200 @@ -0,0 +1,159 @@ +/* + * PCIe endpoint skeleton driver for IMX6 SOCs @@ -207831,7 +207831,7 @@ diff -Nur linux-3.14.17/drivers/pci/host/pci-imx6-ep-driver.c linux-imx6-3.14/dr +MODULE_ALIAS("imx_pcie_ep"); diff -Nur linux-3.14.17/drivers/pinctrl/devicetree.c linux-imx6-3.14/drivers/pinctrl/devicetree.c --- linux-3.14.17/drivers/pinctrl/devicetree.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pinctrl/devicetree.c 2014-09-09 10:13:50.276965782 +0200 ++++ linux-imx6-3.14/drivers/pinctrl/devicetree.c 2014-09-11 18:06:04.358047388 +0200 @@ -18,6 +18,7 @@ #include <linux/device.h> @@ -207899,7 +207899,7 @@ diff -Nur linux-3.14.17/drivers/pinctrl/devicetree.c linux-imx6-3.14/drivers/pin diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx6sl.c linux-imx6-3.14/drivers/pinctrl/pinctrl-imx6sl.c --- linux-3.14.17/drivers/pinctrl/pinctrl-imx6sl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx6sl.c 2014-09-09 10:13:50.280965814 +0200 ++++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx6sl.c 2014-09-11 18:06:04.390047515 +0200 @@ -384,6 +384,10 @@ }, .probe = imx6sl_pinctrl_probe, @@ -207913,7 +207913,7 @@ diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx6sl.c linux-imx6-3.14/drivers static int __init imx6sl_pinctrl_init(void) diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx.c linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.c --- linux-3.14.17/drivers/pinctrl/pinctrl-imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.c 2014-09-09 10:13:50.280965814 +0200 ++++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.c 2014-09-11 18:06:04.370047435 +0200 @@ -1,7 +1,7 @@ /* * Core driver for the imx pin controller @@ -207951,7 +207951,7 @@ diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx.c linux-imx6-3.14/drivers/pi +#endif diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx.h linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.h --- linux-3.14.17/drivers/pinctrl/pinctrl-imx.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.h 2014-09-09 10:13:50.280965814 +0200 ++++ linux-imx6-3.14/drivers/pinctrl/pinctrl-imx.h 2014-09-11 18:06:04.370047435 +0200 @@ -1,7 +1,7 @@ /* * IMX pinmux core definitions @@ -207972,7 +207972,7 @@ diff -Nur linux-3.14.17/drivers/pinctrl/pinctrl-imx.h linux-imx6-3.14/drivers/pi #endif /* __DRIVERS_PINCTRL_IMX_H */ diff -Nur linux-3.14.17/drivers/pnp/pnpacpi/core.c linux-imx6-3.14/drivers/pnp/pnpacpi/core.c --- linux-3.14.17/drivers/pnp/pnpacpi/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pnp/pnpacpi/core.c 2014-09-09 10:13:50.316966108 +0200 ++++ linux-imx6-3.14/drivers/pnp/pnpacpi/core.c 2014-09-11 18:06:04.434047691 +0200 @@ -339,7 +339,8 @@ struct pnp_dev *pnp = _pnp; @@ -207985,7 +207985,7 @@ diff -Nur linux-3.14.17/drivers/pnp/pnpacpi/core.c linux-imx6-3.14/drivers/pnp/p static struct acpi_device * __init acpi_pnp_find_companion(struct device *dev) diff -Nur linux-3.14.17/drivers/power/imx6_usb_charger.c linux-imx6-3.14/drivers/power/imx6_usb_charger.c --- linux-3.14.17/drivers/power/imx6_usb_charger.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/power/imx6_usb_charger.c 2014-09-09 10:13:50.320966140 +0200 ++++ linux-imx6-3.14/drivers/power/imx6_usb_charger.c 2014-09-11 18:06:04.446047739 +0200 @@ -0,0 +1,294 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -208283,7 +208283,7 @@ diff -Nur linux-3.14.17/drivers/power/imx6_usb_charger.c linux-imx6-3.14/drivers +EXPORT_SYMBOL(imx6_usb_remove_charger); diff -Nur linux-3.14.17/drivers/power/Kconfig linux-imx6-3.14/drivers/power/Kconfig --- linux-3.14.17/drivers/power/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/power/Kconfig 2014-09-09 10:13:50.316966108 +0200 ++++ linux-imx6-3.14/drivers/power/Kconfig 2014-09-11 18:06:04.438047706 +0200 @@ -389,6 +389,12 @@ Say Y to enable support for the battery and AC power in the Goldfish emulator. @@ -208299,7 +208299,7 @@ diff -Nur linux-3.14.17/drivers/power/Kconfig linux-imx6-3.14/drivers/power/Kcon endif # POWER_SUPPLY diff -Nur linux-3.14.17/drivers/power/Makefile linux-imx6-3.14/drivers/power/Makefile --- linux-3.14.17/drivers/power/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/power/Makefile 2014-09-09 10:13:50.316966108 +0200 ++++ linux-imx6-3.14/drivers/power/Makefile 2014-09-11 18:06:04.438047706 +0200 @@ -58,3 +58,4 @@ obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o @@ -208307,7 +208307,7 @@ diff -Nur linux-3.14.17/drivers/power/Makefile linux-imx6-3.14/drivers/power/Mak +obj-$(CONFIG_IMX6_USB_CHARGER) += imx6_usb_charger.o diff -Nur linux-3.14.17/drivers/ptp/ptp_chardev.c linux-imx6-3.14/drivers/ptp/ptp_chardev.c --- linux-3.14.17/drivers/ptp/ptp_chardev.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ptp/ptp_chardev.c 2014-09-09 10:13:50.328966205 +0200 ++++ linux-imx6-3.14/drivers/ptp/ptp_chardev.c 2014-09-11 18:06:04.482047883 +0200 @@ -25,6 +25,96 @@ #include "ptp_private.h" @@ -208471,7 +208471,7 @@ diff -Nur linux-3.14.17/drivers/ptp/ptp_chardev.c linux-imx6-3.14/drivers/ptp/pt break; diff -Nur linux-3.14.17/drivers/ptp/ptp_clock.c linux-imx6-3.14/drivers/ptp/ptp_clock.c --- linux-3.14.17/drivers/ptp/ptp_clock.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ptp/ptp_clock.c 2014-09-09 10:13:50.328966205 +0200 ++++ linux-imx6-3.14/drivers/ptp/ptp_clock.c 2014-09-11 18:06:04.482047883 +0200 @@ -169,6 +169,7 @@ struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); @@ -208525,7 +208525,7 @@ diff -Nur linux-3.14.17/drivers/ptp/ptp_clock.c linux-imx6-3.14/drivers/ptp/ptp_ static void __exit ptp_exit(void) diff -Nur linux-3.14.17/drivers/ptp/ptp_ixp46x.c linux-imx6-3.14/drivers/ptp/ptp_ixp46x.c --- linux-3.14.17/drivers/ptp/ptp_ixp46x.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ptp/ptp_ixp46x.c 2014-09-09 10:13:50.328966205 +0200 ++++ linux-imx6-3.14/drivers/ptp/ptp_ixp46x.c 2014-09-11 18:06:04.482047883 +0200 @@ -244,6 +244,7 @@ .name = "IXP46X timer", .max_adj = 66666655, @@ -208536,7 +208536,7 @@ diff -Nur linux-3.14.17/drivers/ptp/ptp_ixp46x.c linux-imx6-3.14/drivers/ptp/ptp .adjtime = ptp_ixp_adjtime, diff -Nur linux-3.14.17/drivers/ptp/ptp_pch.c linux-imx6-3.14/drivers/ptp/ptp_pch.c --- linux-3.14.17/drivers/ptp/ptp_pch.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ptp/ptp_pch.c 2014-09-09 10:13:50.328966205 +0200 ++++ linux-imx6-3.14/drivers/ptp/ptp_pch.c 2014-09-11 18:06:04.482047883 +0200 @@ -514,6 +514,7 @@ .name = "PCH timer", .max_adj = 50000000, @@ -208547,7 +208547,7 @@ diff -Nur linux-3.14.17/drivers/ptp/ptp_pch.c linux-imx6-3.14/drivers/ptp/ptp_pc .adjtime = ptp_pch_adjtime, diff -Nur linux-3.14.17/drivers/ptp/ptp_private.h linux-imx6-3.14/drivers/ptp/ptp_private.h --- linux-3.14.17/drivers/ptp/ptp_private.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/ptp/ptp_private.h 2014-09-09 10:13:50.332966239 +0200 ++++ linux-imx6-3.14/drivers/ptp/ptp_private.h 2014-09-11 18:06:04.482047883 +0200 @@ -48,6 +48,7 @@ long dialed_frequency; /* remembers the frequency adjustment */ struct timestamp_event_queue tsevq; /* simple fifo for time stamps */ @@ -208569,7 +208569,7 @@ diff -Nur linux-3.14.17/drivers/ptp/ptp_private.h linux-imx6-3.14/drivers/ptp/pt diff -Nur linux-3.14.17/drivers/pwm/pwm-imx.c linux-imx6-3.14/drivers/pwm/pwm-imx.c --- linux-3.14.17/drivers/pwm/pwm-imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/pwm/pwm-imx.c 2014-09-09 10:13:50.332966239 +0200 ++++ linux-imx6-3.14/drivers/pwm/pwm-imx.c 2014-09-11 18:06:04.482047883 +0200 @@ -1,4 +1,5 @@ /* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -208613,7 +208613,7 @@ diff -Nur linux-3.14.17/drivers/pwm/pwm-imx.c linux-imx6-3.14/drivers/pwm/pwm-im .remove = imx_pwm_remove, diff -Nur linux-3.14.17/drivers/rapidio/devices/tsi721_dma.c linux-imx6-3.14/drivers/rapidio/devices/tsi721_dma.c --- linux-3.14.17/drivers/rapidio/devices/tsi721_dma.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/rapidio/devices/tsi721_dma.c 2014-09-09 10:13:50.332966239 +0200 ++++ linux-imx6-3.14/drivers/rapidio/devices/tsi721_dma.c 2014-09-11 18:06:04.486047898 +0200 @@ -287,12 +287,6 @@ "desc %p not ACKed\n", tx_desc); } @@ -208638,7 +208638,7 @@ diff -Nur linux-3.14.17/drivers/rapidio/devices/tsi721_dma.c linux-imx6-3.14/dri return ret; diff -Nur linux-3.14.17/drivers/regulator/anatop-regulator.c linux-imx6-3.14/drivers/regulator/anatop-regulator.c --- linux-3.14.17/drivers/regulator/anatop-regulator.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/regulator/anatop-regulator.c 2014-09-09 10:13:50.336966271 +0200 ++++ linux-imx6-3.14/drivers/regulator/anatop-regulator.c 2014-09-11 18:06:04.490047915 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. @@ -208766,7 +208766,7 @@ diff -Nur linux-3.14.17/drivers/regulator/anatop-regulator.c linux-imx6-3.14/dri rdev = devm_regulator_register(dev, rdesc, &config); diff -Nur linux-3.14.17/drivers/regulator/core.c linux-imx6-3.14/drivers/regulator/core.c --- linux-3.14.17/drivers/regulator/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/regulator/core.c 2014-09-09 10:13:50.336966271 +0200 ++++ linux-imx6-3.14/drivers/regulator/core.c 2014-09-11 18:06:04.490047915 +0200 @@ -3,6 +3,7 @@ * * Copyright 2007, 2008 Wolfson Microelectronics PLC. @@ -208887,7 +208887,7 @@ diff -Nur linux-3.14.17/drivers/regulator/core.c linux-imx6-3.14/drivers/regulat rdev_err(rdev, "Failed to request enable GPIO%d: %d\n", diff -Nur linux-3.14.17/drivers/regulator/dummy.c linux-imx6-3.14/drivers/regulator/dummy.c --- linux-3.14.17/drivers/regulator/dummy.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/regulator/dummy.c 2014-09-09 10:13:50.340966303 +0200 ++++ linux-imx6-3.14/drivers/regulator/dummy.c 2014-09-11 18:06:04.510047994 +0200 @@ -44,6 +44,7 @@ config.dev = &pdev->dev; @@ -208898,7 +208898,7 @@ diff -Nur linux-3.14.17/drivers/regulator/dummy.c linux-imx6-3.14/drivers/regula if (IS_ERR(dummy_regulator_rdev)) { diff -Nur linux-3.14.17/drivers/regulator/fixed.c linux-imx6-3.14/drivers/regulator/fixed.c --- linux-3.14.17/drivers/regulator/fixed.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/regulator/fixed.c 2014-09-09 10:13:50.340966303 +0200 ++++ linux-imx6-3.14/drivers/regulator/fixed.c 2014-09-11 18:06:04.510047994 +0200 @@ -163,9 +163,7 @@ drvdata->desc.n_voltages = 1; @@ -208912,7 +208912,7 @@ diff -Nur linux-3.14.17/drivers/regulator/fixed.c linux-imx6-3.14/drivers/regula if (config->enable_high) diff -Nur linux-3.14.17/drivers/reset/gpio-reset.c linux-imx6-3.14/drivers/reset/gpio-reset.c --- linux-3.14.17/drivers/reset/gpio-reset.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/reset/gpio-reset.c 2014-09-09 10:13:50.348966368 +0200 ++++ linux-imx6-3.14/drivers/reset/gpio-reset.c 2014-09-11 18:06:04.530048075 +0200 @@ -0,0 +1,187 @@ +/* + * GPIO Reset Controller driver @@ -209103,7 +209103,7 @@ diff -Nur linux-3.14.17/drivers/reset/gpio-reset.c linux-imx6-3.14/drivers/reset +MODULE_DEVICE_TABLE(of, gpio_reset_dt_ids); diff -Nur linux-3.14.17/drivers/reset/Kconfig linux-imx6-3.14/drivers/reset/Kconfig --- linux-3.14.17/drivers/reset/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/reset/Kconfig 2014-09-09 10:13:50.348966368 +0200 ++++ linux-imx6-3.14/drivers/reset/Kconfig 2014-09-11 18:06:04.530048075 +0200 @@ -11,3 +11,15 @@ via GPIOs or SoC-internal reset controller modules. @@ -209122,14 +209122,14 @@ diff -Nur linux-3.14.17/drivers/reset/Kconfig linux-imx6-3.14/drivers/reset/Kcon +endif diff -Nur linux-3.14.17/drivers/reset/Makefile linux-imx6-3.14/drivers/reset/Makefile --- linux-3.14.17/drivers/reset/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/reset/Makefile 2014-09-09 10:13:50.348966368 +0200 ++++ linux-imx6-3.14/drivers/reset/Makefile 2014-09-11 18:06:04.530048075 +0200 @@ -1,2 +1,3 @@ obj-$(CONFIG_RESET_CONTROLLER) += core.o +obj-$(CONFIG_RESET_GPIO) += gpio-reset.o obj-$(CONFIG_ARCH_SUNXI) += reset-sunxi.o diff -Nur linux-3.14.17/drivers/rtc/rtc-pcf8523.c linux-imx6-3.14/drivers/rtc/rtc-pcf8523.c --- linux-3.14.17/drivers/rtc/rtc-pcf8523.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/rtc/rtc-pcf8523.c 2014-09-09 10:13:50.356966434 +0200 ++++ linux-imx6-3.14/drivers/rtc/rtc-pcf8523.c 2014-09-11 18:06:04.546048138 +0200 @@ -7,6 +7,7 @@ */ @@ -209263,7 +209263,7 @@ diff -Nur linux-3.14.17/drivers/rtc/rtc-pcf8523.c linux-imx6-3.14/drivers/rtc/rt return err; diff -Nur linux-3.14.17/drivers/rtc/rtc-snvs.c linux-imx6-3.14/drivers/rtc/rtc-snvs.c --- linux-3.14.17/drivers/rtc/rtc-snvs.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/rtc/rtc-snvs.c 2014-09-09 10:13:50.360966466 +0200 ++++ linux-imx6-3.14/drivers/rtc/rtc-snvs.c 2014-09-11 18:06:04.550048154 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2012 Freescale Semiconductor, Inc. @@ -209328,7 +209328,7 @@ diff -Nur linux-3.14.17/drivers/rtc/rtc-snvs.c linux-imx6-3.14/drivers/rtc/rtc-s } diff -Nur linux-3.14.17/drivers/sbus/char/bbc_envctrl.c linux-imx6-3.14/drivers/sbus/char/bbc_envctrl.c --- linux-3.14.17/drivers/sbus/char/bbc_envctrl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/sbus/char/bbc_envctrl.c 2014-09-09 10:13:50.416966923 +0200 ++++ linux-imx6-3.14/drivers/sbus/char/bbc_envctrl.c 2014-09-11 18:06:04.622048441 +0200 @@ -452,9 +452,6 @@ if (!tp) return; @@ -209351,7 +209351,7 @@ diff -Nur linux-3.14.17/drivers/sbus/char/bbc_envctrl.c linux-imx6-3.14/drivers/ kfree(fp); diff -Nur linux-3.14.17/drivers/sbus/char/bbc_i2c.c linux-imx6-3.14/drivers/sbus/char/bbc_i2c.c --- linux-3.14.17/drivers/sbus/char/bbc_i2c.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/sbus/char/bbc_i2c.c 2014-09-09 10:13:50.416966923 +0200 ++++ linux-imx6-3.14/drivers/sbus/char/bbc_i2c.c 2014-09-11 18:06:04.622048441 +0200 @@ -300,18 +300,13 @@ if (!bp) return NULL; @@ -209376,7 +209376,7 @@ diff -Nur linux-3.14.17/drivers/sbus/char/bbc_i2c.c linux-imx6-3.14/drivers/sbus init_waitqueue_head(&bp->wq); diff -Nur linux-3.14.17/drivers/scsi/scsi_lib.c linux-imx6-3.14/drivers/scsi/scsi_lib.c --- linux-3.14.17/drivers/scsi/scsi_lib.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/scsi/scsi_lib.c 2014-09-09 10:13:50.584968292 +0200 ++++ linux-imx6-3.14/drivers/scsi/scsi_lib.c 2014-09-11 18:06:07.698060725 +0200 @@ -831,14 +831,6 @@ scsi_next_command(cmd); return; @@ -209394,7 +209394,7 @@ diff -Nur linux-3.14.17/drivers/scsi/scsi_lib.c linux-imx6-3.14/drivers/scsi/scs /* no bidi support for !REQ_TYPE_BLOCK_PC yet */ diff -Nur linux-3.14.17/drivers/scsi/scsi_transport_iscsi.c linux-imx6-3.14/drivers/scsi/scsi_transport_iscsi.c --- linux-3.14.17/drivers/scsi/scsi_transport_iscsi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/scsi/scsi_transport_iscsi.c 2014-09-09 10:13:50.628968651 +0200 ++++ linux-imx6-3.14/drivers/scsi/scsi_transport_iscsi.c 2014-09-11 18:06:07.698060725 +0200 @@ -1225,7 +1225,7 @@ * Adds a sysfs entry for the flashnode session attributes * @@ -209424,7 +209424,7 @@ diff -Nur linux-3.14.17/drivers/scsi/scsi_transport_iscsi.c linux-imx6-3.14/driv * Destroys all the flashnode session entries and all corresponding children diff -Nur linux-3.14.17/drivers/staging/bcm/Typedefs.h linux-imx6-3.14/drivers/staging/bcm/Typedefs.h --- linux-3.14.17/drivers/staging/bcm/Typedefs.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/bcm/Typedefs.h 2014-09-09 10:13:50.924971058 +0200 ++++ linux-imx6-3.14/drivers/staging/bcm/Typedefs.h 2014-09-11 18:06:08.118062401 +0200 @@ -25,16 +25,16 @@ typedef unsigned long ULONG; typedef unsigned long DWORD; @@ -209453,7 +209453,7 @@ diff -Nur linux-3.14.17/drivers/staging/bcm/Typedefs.h linux-imx6-3.14/drivers/s typedef unsigned int UINT32; diff -Nur linux-3.14.17/drivers/staging/media/omap4iss/Kconfig linux-imx6-3.14/drivers/staging/media/omap4iss/Kconfig --- linux-3.14.17/drivers/staging/media/omap4iss/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/media/omap4iss/Kconfig 2014-09-09 10:13:51.084972368 +0200 ++++ linux-imx6-3.14/drivers/staging/media/omap4iss/Kconfig 2014-09-11 18:06:08.558064158 +0200 @@ -1,6 +1,6 @@ config VIDEO_OMAP4 bool "OMAP 4 Camera support" @@ -209464,7 +209464,7 @@ diff -Nur linux-3.14.17/drivers/staging/media/omap4iss/Kconfig linux-imx6-3.14/d Driver for an OMAP 4 ISS controller. diff -Nur linux-3.14.17/drivers/staging/octeon/ethernet-rgmii.c linux-imx6-3.14/drivers/staging/octeon/ethernet-rgmii.c --- linux-3.14.17/drivers/staging/octeon/ethernet-rgmii.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/octeon/ethernet-rgmii.c 2014-09-09 10:13:51.096972466 +0200 ++++ linux-imx6-3.14/drivers/staging/octeon/ethernet-rgmii.c 2014-09-11 18:06:08.570064206 +0200 @@ -166,9 +166,8 @@ if (use_global_register_lock) @@ -209478,7 +209478,7 @@ diff -Nur linux-3.14.17/drivers/staging/octeon/ethernet-rgmii.c linux-imx6-3.14/ /* Tell core. */ diff -Nur linux-3.14.17/drivers/staging/rtl8821ae/core.c linux-imx6-3.14/drivers/staging/rtl8821ae/core.c --- linux-3.14.17/drivers/staging/rtl8821ae/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/rtl8821ae/core.c 2014-09-09 10:13:51.168973052 +0200 ++++ linux-imx6-3.14/drivers/staging/rtl8821ae/core.c 2014-09-11 18:06:08.650064525 +0200 @@ -1414,23 +1414,15 @@ * before switch channle or power save, or tx buffer packet * maybe send after offchannel or rf sleep, this may cause @@ -209508,7 +209508,7 @@ diff -Nur linux-3.14.17/drivers/staging/rtl8821ae/core.c linux-imx6-3.14/drivers .start = rtl_op_start, diff -Nur linux-3.14.17/drivers/staging/vt6655/bssdb.c linux-imx6-3.14/drivers/staging/vt6655/bssdb.c --- linux-3.14.17/drivers/staging/vt6655/bssdb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/vt6655/bssdb.c 2014-09-09 10:13:51.224973509 +0200 ++++ linux-imx6-3.14/drivers/staging/vt6655/bssdb.c 2014-09-11 18:06:08.798065116 +0200 @@ -983,7 +983,7 @@ pDevice->byERPFlag &= ~(WLAN_SET_ERP_USE_PROTECTION(1)); } @@ -209520,7 +209520,7 @@ diff -Nur linux-3.14.17/drivers/staging/vt6655/bssdb.c linux-imx6-3.14/drivers/s if ((pDevice->byReAssocCount > 10) && (!pDevice->bLinkPass)) { diff -Nur linux-3.14.17/drivers/staging/vt6655/device_main.c linux-imx6-3.14/drivers/staging/vt6655/device_main.c --- linux-3.14.17/drivers/staging/vt6655/device_main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/staging/vt6655/device_main.c 2014-09-09 10:13:51.224973509 +0200 ++++ linux-imx6-3.14/drivers/staging/vt6655/device_main.c 2014-09-11 18:06:08.802065132 +0200 @@ -2430,7 +2430,6 @@ int handled = 0; unsigned char byData = 0; @@ -209551,7 +209551,7 @@ diff -Nur linux-3.14.17/drivers/staging/vt6655/device_main.c linux-imx6-3.14/dri return IRQ_RETVAL(handled); diff -Nur linux-3.14.17/drivers/thermal/device_cooling.c linux-imx6-3.14/drivers/thermal/device_cooling.c --- linux-3.14.17/drivers/thermal/device_cooling.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/thermal/device_cooling.c 2014-09-09 10:13:51.292974062 +0200 ++++ linux-imx6-3.14/drivers/thermal/device_cooling.c 2014-09-11 18:06:08.970065802 +0200 @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -209706,7 +209706,7 @@ diff -Nur linux-3.14.17/drivers/thermal/device_cooling.c linux-imx6-3.14/drivers +EXPORT_SYMBOL_GPL(devfreq_cooling_unregister); diff -Nur linux-3.14.17/drivers/thermal/imx_thermal.c linux-imx6-3.14/drivers/thermal/imx_thermal.c --- linux-3.14.17/drivers/thermal/imx_thermal.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/thermal/imx_thermal.c 2014-09-09 10:13:51.292974062 +0200 ++++ linux-imx6-3.14/drivers/thermal/imx_thermal.c 2014-09-11 18:06:08.970065802 +0200 @@ -12,6 +12,7 @@ #include <linux/cpufreq.h> #include <linux/delay.h> @@ -209807,7 +209807,7 @@ diff -Nur linux-3.14.17/drivers/thermal/imx_thermal.c linux-imx6-3.14/drivers/th } diff -Nur linux-3.14.17/drivers/thermal/Kconfig linux-imx6-3.14/drivers/thermal/Kconfig --- linux-3.14.17/drivers/thermal/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/thermal/Kconfig 2014-09-09 10:13:51.292974062 +0200 ++++ linux-imx6-3.14/drivers/thermal/Kconfig 2014-09-11 18:06:08.966065786 +0200 @@ -125,6 +125,13 @@ cpufreq is used as the cooling device to throttle CPUs when the passive trip is crossed. @@ -209824,7 +209824,7 @@ diff -Nur linux-3.14.17/drivers/thermal/Kconfig linux-imx6-3.14/drivers/thermal/ depends on PLAT_SPEAR diff -Nur linux-3.14.17/drivers/thermal/Makefile linux-imx6-3.14/drivers/thermal/Makefile --- linux-3.14.17/drivers/thermal/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/thermal/Makefile 2014-09-09 10:13:51.292974062 +0200 ++++ linux-imx6-3.14/drivers/thermal/Makefile 2014-09-11 18:06:08.966065786 +0200 @@ -26,6 +26,7 @@ obj-$(CONFIG_DB8500_THERMAL) += db8500_thermal.o obj-$(CONFIG_ARMADA_THERMAL) += armada_thermal.o @@ -209835,7 +209835,7 @@ diff -Nur linux-3.14.17/drivers/thermal/Makefile linux-imx6-3.14/drivers/thermal obj-$(CONFIG_X86_PKG_TEMP_THERMAL) += x86_pkg_temp_thermal.o diff -Nur linux-3.14.17/drivers/tty/serial/earlycon.c linux-imx6-3.14/drivers/tty/serial/earlycon.c --- linux-3.14.17/drivers/tty/serial/earlycon.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/tty/serial/earlycon.c 2014-09-09 10:13:51.312974225 +0200 ++++ linux-imx6-3.14/drivers/tty/serial/earlycon.c 2014-09-11 18:06:09.002065930 +0200 @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2014 Linaro Ltd. @@ -209991,7 +209991,7 @@ diff -Nur linux-3.14.17/drivers/tty/serial/earlycon.c linux-imx6-3.14/drivers/tt +} diff -Nur linux-3.14.17/drivers/tty/serial/Kconfig linux-imx6-3.14/drivers/tty/serial/Kconfig --- linux-3.14.17/drivers/tty/serial/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/tty/serial/Kconfig 2014-09-09 10:13:51.308974193 +0200 ++++ linux-imx6-3.14/drivers/tty/serial/Kconfig 2014-09-11 18:06:08.994065898 +0200 @@ -7,6 +7,13 @@ menu "Serial drivers" depends on HAS_IOMEM @@ -210008,7 +210008,7 @@ diff -Nur linux-3.14.17/drivers/tty/serial/Kconfig linux-imx6-3.14/drivers/tty/s comment "Non-8250 serial port support" diff -Nur linux-3.14.17/drivers/tty/serial/Makefile linux-imx6-3.14/drivers/tty/serial/Makefile --- linux-3.14.17/drivers/tty/serial/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/tty/serial/Makefile 2014-09-09 10:13:51.308974193 +0200 ++++ linux-imx6-3.14/drivers/tty/serial/Makefile 2014-09-11 18:06:08.994065898 +0200 @@ -5,6 +5,8 @@ obj-$(CONFIG_SERIAL_CORE) += serial_core.o obj-$(CONFIG_SERIAL_21285) += 21285.o @@ -210020,7 +210020,7 @@ diff -Nur linux-3.14.17/drivers/tty/serial/Makefile linux-imx6-3.14/drivers/tty/ # names change and other unplesantries. diff -Nur linux-3.14.17/drivers/tty/serial/sunsab.c linux-imx6-3.14/drivers/tty/serial/sunsab.c --- linux-3.14.17/drivers/tty/serial/sunsab.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/tty/serial/sunsab.c 2014-09-09 10:13:51.328974356 +0200 ++++ linux-imx6-3.14/drivers/tty/serial/sunsab.c 2014-09-11 18:06:09.018065994 +0200 @@ -157,15 +157,6 @@ (up->port.line == up->port.cons->index)) saw_console_brk = 1; @@ -210039,7 +210039,7 @@ diff -Nur linux-3.14.17/drivers/tty/serial/sunsab.c linux-imx6-3.14/drivers/tty/ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci.h linux-imx6-3.14/drivers/usb/chipidea/ci.h --- linux-3.14.17/drivers/usb/chipidea/ci.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/ci.h 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/ci.h 2014-09-11 18:06:09.078066233 +0200 @@ -139,8 +139,8 @@ * @roles: array of supported roles for this controller * @role: current role @@ -210086,7 +210086,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci.h linux-imx6-3.14/drivers/usb/ch static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci) diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.c linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.c --- linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.c 2014-09-11 18:06:09.078066233 +0200 @@ -19,11 +19,14 @@ #include <linux/dma-mapping.h> #include <linux/usb/chipidea.h> @@ -210346,7 +210346,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.c linux-imx6-3.14/drive diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.h linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.h --- linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.h 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_imx.h 2014-09-11 18:06:09.078066233 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012 Freescale Semiconductor, Inc. @@ -210375,7 +210375,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_imx.h linux-imx6-3.14/drive #endif /* __DRIVER_USB_CHIPIDEA_CI_HDRC_IMX_H */ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_msm.c linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_msm.c --- linux-3.14.17/drivers/usb/chipidea/ci_hdrc_msm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_msm.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/ci_hdrc_msm.c 2014-09-11 18:06:09.078066233 +0200 @@ -17,7 +17,7 @@ #define MSM_USB_BASE (ci->hw_bank.abs) @@ -210396,7 +210396,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/ci_hdrc_msm.c linux-imx6-3.14/drive static struct ci_hdrc_platform_data ci_hdrc_msm_platdata = { diff -Nur linux-3.14.17/drivers/usb/chipidea/core.c linux-imx6-3.14/drivers/usb/chipidea/core.c --- linux-3.14.17/drivers/usb/chipidea/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/core.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/core.c 2014-09-11 18:06:09.078066233 +0200 @@ -165,25 +165,30 @@ return hw_read(ci, OP_PORTSC, PORTSC_PTC) >> __ffs(PORTSC_PTC); } @@ -210707,7 +210707,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/core.c linux-imx6-3.14/drivers/usb/ diff -Nur linux-3.14.17/drivers/usb/chipidea/host.c linux-imx6-3.14/drivers/usb/chipidea/host.c --- linux-3.14.17/drivers/usb/chipidea/host.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/host.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/host.c 2014-09-11 18:06:09.078066233 +0200 @@ -33,6 +33,176 @@ #include "host.h" @@ -210911,7 +210911,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/host.c linux-imx6-3.14/drivers/usb/ } diff -Nur linux-3.14.17/drivers/usb/chipidea/otg.c linux-imx6-3.14/drivers/usb/chipidea/otg.c --- linux-3.14.17/drivers/usb/chipidea/otg.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/otg.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/otg.c 2014-09-11 18:06:09.078066233 +0200 @@ -18,6 +18,8 @@ #include <linux/usb/otg.h> #include <linux/usb/gadget.h> @@ -211012,7 +211012,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/otg.c linux-imx6-3.14/drivers/usb/c } diff -Nur linux-3.14.17/drivers/usb/chipidea/udc.c linux-imx6-3.14/drivers/usb/chipidea/udc.c --- linux-3.14.17/drivers/usb/chipidea/udc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/udc.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/udc.c 2014-09-11 18:06:09.134066455 +0200 @@ -681,12 +681,6 @@ struct ci_hdrc *ci = container_of(gadget, struct ci_hdrc, gadget); unsigned long flags; @@ -211107,7 +211107,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/udc.c linux-imx6-3.14/drivers/usb/c goto out; diff -Nur linux-3.14.17/drivers/usb/chipidea/usbmisc_imx.c linux-imx6-3.14/drivers/usb/chipidea/usbmisc_imx.c --- linux-3.14.17/drivers/usb/chipidea/usbmisc_imx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/chipidea/usbmisc_imx.c 2014-09-09 10:13:51.340974454 +0200 ++++ linux-imx6-3.14/drivers/usb/chipidea/usbmisc_imx.c 2014-09-11 18:06:09.134066455 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012 Freescale Semiconductor, Inc. @@ -211284,7 +211284,7 @@ diff -Nur linux-3.14.17/drivers/usb/chipidea/usbmisc_imx.c linux-imx6-3.14/drive } diff -Nur linux-3.14.17/drivers/usb/core/hub.c linux-imx6-3.14/drivers/usb/core/hub.c --- linux-3.14.17/drivers/usb/core/hub.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/core/hub.c 2014-09-09 10:13:51.344974487 +0200 ++++ linux-imx6-3.14/drivers/usb/core/hub.c 2014-09-11 18:06:09.138066472 +0200 @@ -3867,6 +3867,12 @@ void usb_enable_ltm(struct usb_device *udev) { } EXPORT_SYMBOL_GPL(usb_enable_ltm); @@ -211310,7 +211310,7 @@ diff -Nur linux-3.14.17/drivers/usb/core/hub.c linux-imx6-3.14/drivers/usb/core/ } diff -Nur linux-3.14.17/drivers/usb/core/message.c linux-imx6-3.14/drivers/usb/core/message.c --- linux-3.14.17/drivers/usb/core/message.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/core/message.c 2014-09-09 10:13:51.344974487 +0200 ++++ linux-imx6-3.14/drivers/usb/core/message.c 2014-09-11 18:06:09.138066472 +0200 @@ -178,7 +178,7 @@ * * Return: @@ -211322,7 +211322,7 @@ diff -Nur linux-3.14.17/drivers/usb/core/message.c linux-imx6-3.14/drivers/usb/c void *data, int len, int *actual_length, int timeout) diff -Nur linux-3.14.17/drivers/usb/core/urb.c linux-imx6-3.14/drivers/usb/core/urb.c --- linux-3.14.17/drivers/usb/core/urb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/core/urb.c 2014-09-09 10:13:51.348974519 +0200 ++++ linux-imx6-3.14/drivers/usb/core/urb.c 2014-09-11 18:06:09.142066489 +0200 @@ -831,7 +831,7 @@ * * this allows all outstanding URBs to be unlinked starting @@ -211334,7 +211334,7 @@ diff -Nur linux-3.14.17/drivers/usb/core/urb.c linux-imx6-3.14/drivers/usb/core/ * This routine should not be called by a driver after its disconnect diff -Nur linux-3.14.17/drivers/usb/gadget/f_mass_storage.c linux-imx6-3.14/drivers/usb/gadget/f_mass_storage.c --- linux-3.14.17/drivers/usb/gadget/f_mass_storage.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/gadget/f_mass_storage.c 2014-09-09 10:13:51.360974617 +0200 ++++ linux-imx6-3.14/drivers/usb/gadget/f_mass_storage.c 2014-09-11 18:06:09.154066537 +0200 @@ -336,8 +336,15 @@ struct usb_ep *bulk_in; @@ -211458,7 +211458,7 @@ diff -Nur linux-3.14.17/drivers/usb/gadget/f_mass_storage.c linux-imx6-3.14/driv static inline struct fsg_lun_opts *to_fsg_lun_opts(struct config_item *item) diff -Nur linux-3.14.17/drivers/usb/gadget/fsl_updater.c linux-imx6-3.14/drivers/usb/gadget/fsl_updater.c --- linux-3.14.17/drivers/usb/gadget/fsl_updater.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/usb/gadget/fsl_updater.c 2014-09-09 10:13:51.364974650 +0200 ++++ linux-imx6-3.14/drivers/usb/gadget/fsl_updater.c 2014-09-11 18:06:09.158066553 +0200 @@ -0,0 +1,594 @@ +/* + * Freescale UUT driver @@ -212056,7 +212056,7 @@ diff -Nur linux-3.14.17/drivers/usb/gadget/fsl_updater.c linux-imx6-3.14/drivers +} diff -Nur linux-3.14.17/drivers/usb/gadget/fsl_updater.h linux-imx6-3.14/drivers/usb/gadget/fsl_updater.h --- linux-3.14.17/drivers/usb/gadget/fsl_updater.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/usb/gadget/fsl_updater.h 2014-09-09 10:13:51.364974650 +0200 ++++ linux-imx6-3.14/drivers/usb/gadget/fsl_updater.h 2014-09-11 18:06:09.158066553 +0200 @@ -0,0 +1,150 @@ +/* + * Freescale UUT driver @@ -212210,7 +212210,7 @@ diff -Nur linux-3.14.17/drivers/usb/gadget/fsl_updater.h linux-imx6-3.14/drivers + diff -Nur linux-3.14.17/drivers/usb/gadget/Kconfig linux-imx6-3.14/drivers/usb/gadget/Kconfig --- linux-3.14.17/drivers/usb/gadget/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/gadget/Kconfig 2014-09-09 10:13:51.352974551 +0200 ++++ linux-imx6-3.14/drivers/usb/gadget/Kconfig 2014-09-11 18:06:09.146066506 +0200 @@ -952,6 +952,12 @@ Say "y" to link the driver statically, or "m" to build a dynamically linked module called "g_mass_storage". @@ -212226,7 +212226,7 @@ diff -Nur linux-3.14.17/drivers/usb/gadget/Kconfig linux-imx6-3.14/drivers/usb/g depends on TARGET_CORE diff -Nur linux-3.14.17/drivers/usb/gadget/mass_storage.c linux-imx6-3.14/drivers/usb/gadget/mass_storage.c --- linux-3.14.17/drivers/usb/gadget/mass_storage.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/gadget/mass_storage.c 2014-09-09 10:13:51.368974682 +0200 ++++ linux-imx6-3.14/drivers/usb/gadget/mass_storage.c 2014-09-11 18:06:09.162066569 +0200 @@ -266,7 +266,7 @@ { return usb_composite_probe(&msg_driver); @@ -212238,7 +212238,7 @@ diff -Nur linux-3.14.17/drivers/usb/gadget/mass_storage.c linux-imx6-3.14/driver { diff -Nur linux-3.14.17/drivers/usb/host/ehci-h20ahb.c linux-imx6-3.14/drivers/usb/host/ehci-h20ahb.c --- linux-3.14.17/drivers/usb/host/ehci-h20ahb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/usb/host/ehci-h20ahb.c 2014-09-09 10:13:51.380974780 +0200 ++++ linux-imx6-3.14/drivers/usb/host/ehci-h20ahb.c 2014-09-11 18:06:09.170066601 +0200 @@ -0,0 +1,341 @@ +/* + * Copyright (C) 2007-2013 Texas Instruments, Inc. @@ -212583,7 +212583,7 @@ diff -Nur linux-3.14.17/drivers/usb/host/ehci-h20ahb.c linux-imx6-3.14/drivers/u +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/usb/host/ehci-hcd.c linux-imx6-3.14/drivers/usb/host/ehci-hcd.c --- linux-3.14.17/drivers/usb/host/ehci-hcd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/host/ehci-hcd.c 2014-09-09 10:13:51.380974780 +0200 ++++ linux-imx6-3.14/drivers/usb/host/ehci-hcd.c 2014-09-11 18:06:09.174066617 +0200 @@ -590,11 +590,16 @@ */ hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params); @@ -212606,7 +212606,7 @@ diff -Nur linux-3.14.17/drivers/usb/host/ehci-hcd.c linux-imx6-3.14/drivers/usb/ diff -Nur linux-3.14.17/drivers/usb/host/ehci-hub.c linux-imx6-3.14/drivers/usb/host/ehci-hub.c --- linux-3.14.17/drivers/usb/host/ehci-hub.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/host/ehci-hub.c 2014-09-09 10:13:51.380974780 +0200 ++++ linux-imx6-3.14/drivers/usb/host/ehci-hub.c 2014-09-11 18:06:09.174066617 +0200 @@ -313,6 +313,15 @@ USB_PORT_STAT_HIGH_SPEED) fs_idle_delay = true; @@ -212625,7 +212625,7 @@ diff -Nur linux-3.14.17/drivers/usb/host/ehci-hub.c linux-imx6-3.14/drivers/usb/ } diff -Nur linux-3.14.17/drivers/usb/host/Kconfig linux-imx6-3.14/drivers/usb/host/Kconfig --- linux-3.14.17/drivers/usb/host/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/host/Kconfig 2014-09-09 10:13:51.376974747 +0200 ++++ linux-imx6-3.14/drivers/usb/host/Kconfig 2014-09-11 18:06:09.170066601 +0200 @@ -158,6 +158,13 @@ Enables support for the on-chip EHCI controller on ST SPEAr chips. @@ -212642,7 +212642,7 @@ diff -Nur linux-3.14.17/drivers/usb/host/Kconfig linux-imx6-3.14/drivers/usb/hos depends on USB_EHCI_HCD && ARCH_AT91 diff -Nur linux-3.14.17/drivers/usb/host/Makefile linux-imx6-3.14/drivers/usb/host/Makefile --- linux-3.14.17/drivers/usb/host/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/host/Makefile 2014-09-09 10:13:51.376974747 +0200 ++++ linux-imx6-3.14/drivers/usb/host/Makefile 2014-09-11 18:06:09.170066601 +0200 @@ -33,6 +33,8 @@ obj-$(CONFIG_USB_EHCI_HCD_ORION) += ehci-orion.o obj-$(CONFIG_USB_EHCI_HCD_SPEAR) += ehci-spear.o @@ -212654,7 +212654,7 @@ diff -Nur linux-3.14.17/drivers/usb/host/Makefile linux-imx6-3.14/drivers/usb/ho obj-$(CONFIG_USB_EHCI_TEGRA) += ehci-tegra.o diff -Nur linux-3.14.17/drivers/usb/phy/Kconfig linux-imx6-3.14/drivers/usb/phy/Kconfig --- linux-3.14.17/drivers/usb/phy/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/phy/Kconfig 2014-09-09 10:13:51.412975040 +0200 ++++ linux-imx6-3.14/drivers/usb/phy/Kconfig 2014-09-11 18:06:09.250066921 +0200 @@ -253,7 +253,7 @@ config USB_ULPI @@ -212666,7 +212666,7 @@ diff -Nur linux-3.14.17/drivers/usb/phy/Kconfig linux-imx6-3.14/drivers/usb/phy/ are likely found on embedded boards. diff -Nur linux-3.14.17/drivers/usb/phy/phy-mxs-usb.c linux-imx6-3.14/drivers/usb/phy/phy-mxs-usb.c --- linux-3.14.17/drivers/usb/phy/phy-mxs-usb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/phy/phy-mxs-usb.c 2014-09-09 10:13:51.416975072 +0200 ++++ linux-imx6-3.14/drivers/usb/phy/phy-mxs-usb.c 2014-09-11 18:06:09.254066936 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2012 Freescale Semiconductor, Inc. @@ -213201,7 +213201,7 @@ diff -Nur linux-3.14.17/drivers/usb/phy/phy-mxs-usb.c linux-imx6-3.14/drivers/us diff -Nur linux-3.14.17/drivers/usb/phy/phy-ulpi.c linux-imx6-3.14/drivers/usb/phy/phy-ulpi.c --- linux-3.14.17/drivers/usb/phy/phy-ulpi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/phy/phy-ulpi.c 2014-09-09 10:13:51.416975072 +0200 ++++ linux-imx6-3.14/drivers/usb/phy/phy-ulpi.c 2014-09-11 18:06:09.254066936 +0200 @@ -48,6 +48,7 @@ ULPI_INFO(ULPI_ID(0x04cc, 0x1504), "NXP ISP1504"), ULPI_INFO(ULPI_ID(0x0424, 0x0006), "SMSC USB331x"), @@ -213212,7 +213212,7 @@ diff -Nur linux-3.14.17/drivers/usb/phy/phy-ulpi.c linux-imx6-3.14/drivers/usb/p diff -Nur linux-3.14.17/drivers/usb/serial/option.c linux-imx6-3.14/drivers/usb/serial/option.c --- linux-3.14.17/drivers/usb/serial/option.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/usb/serial/option.c 2014-09-09 10:13:51.432975203 +0200 ++++ linux-imx6-3.14/drivers/usb/serial/option.c 2014-09-11 18:06:09.274067016 +0200 @@ -1917,6 +1917,8 @@ dev_dbg(dev, "%s: type %x req %x\n", __func__, req_pkt->bRequestType, req_pkt->bRequest); @@ -213224,7 +213224,7 @@ diff -Nur linux-3.14.17/drivers/usb/serial/option.c linux-imx6-3.14/drivers/usb/ diff -Nur linux-3.14.17/drivers/video/amba-clcd.c linux-imx6-3.14/drivers/video/amba-clcd.c --- linux-3.14.17/drivers/video/amba-clcd.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/video/amba-clcd.c 2014-09-09 10:13:51.452975366 +0200 ++++ linux-imx6-3.14/drivers/video/amba-clcd.c 2014-09-11 18:06:09.354067336 +0200 @@ -17,7 +17,10 @@ #include <linux/string.h> #include <linux/slab.h> @@ -213572,7 +213572,7 @@ diff -Nur linux-3.14.17/drivers/video/amba-clcd.c linux-imx6-3.14/drivers/video/ if (ret) diff -Nur linux-3.14.17/drivers/video/arm-hdlcd.c linux-imx6-3.14/drivers/video/arm-hdlcd.c --- linux-3.14.17/drivers/video/arm-hdlcd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/arm-hdlcd.c 2014-09-09 10:13:51.452975366 +0200 ++++ linux-imx6-3.14/drivers/video/arm-hdlcd.c 2014-09-11 18:06:09.354067336 +0200 @@ -0,0 +1,844 @@ +/* + * drivers/video/arm-hdlcd.c @@ -214420,7 +214420,7 @@ diff -Nur linux-3.14.17/drivers/video/arm-hdlcd.c linux-imx6-3.14/drivers/video/ +MODULE_LICENSE("GPL v2"); diff -Nur linux-3.14.17/drivers/video/backlight/backlight.c linux-imx6-3.14/drivers/video/backlight/backlight.c --- linux-3.14.17/drivers/video/backlight/backlight.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/video/backlight/backlight.c 2014-09-09 10:13:51.460975431 +0200 ++++ linux-imx6-3.14/drivers/video/backlight/backlight.c 2014-09-11 18:06:09.362067367 +0200 @@ -41,6 +41,8 @@ { struct backlight_device *bd; @@ -214463,7 +214463,7 @@ diff -Nur linux-3.14.17/drivers/video/backlight/backlight.c linux-imx6-3.14/driv return 0; diff -Nur linux-3.14.17/drivers/video/Kconfig linux-imx6-3.14/drivers/video/Kconfig --- linux-3.14.17/drivers/video/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/video/Kconfig 2014-09-09 10:13:51.452975366 +0200 ++++ linux-imx6-3.14/drivers/video/Kconfig 2014-09-11 18:06:09.354067336 +0200 @@ -39,6 +39,11 @@ config HDMI bool @@ -214511,7 +214511,7 @@ diff -Nur linux-3.14.17/drivers/video/Kconfig linux-imx6-3.14/drivers/video/Kcon endif diff -Nur linux-3.14.17/drivers/video/Makefile linux-imx6-3.14/drivers/video/Makefile --- linux-3.14.17/drivers/video/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/video/Makefile 2014-09-09 10:13:51.452975366 +0200 ++++ linux-imx6-3.14/drivers/video/Makefile 2014-09-11 18:06:09.354067336 +0200 @@ -53,6 +53,7 @@ obj-$(CONFIG_FB_SAVAGE) += savage/ obj-$(CONFIG_FB_GEODE) += geode/ @@ -214537,7 +214537,7 @@ diff -Nur linux-3.14.17/drivers/video/Makefile linux-imx6-3.14/drivers/video/Mak +obj-$(CONFIG_VEXPRESS_DVI_CONTROL) += vexpress-dvi.o diff -Nur linux-3.14.17/drivers/video/mxc/Kconfig linux-imx6-3.14/drivers/video/mxc/Kconfig --- linux-3.14.17/drivers/video/mxc/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/Kconfig 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/Kconfig 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,48 @@ +config FB_MXC + tristate "MXC Framebuffer support" @@ -214589,7 +214589,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/Kconfig linux-imx6-3.14/drivers/video/ + default y diff -Nur linux-3.14.17/drivers/video/mxc/ldb.c linux-imx6-3.14/drivers/video/mxc/ldb.c --- linux-3.14.17/drivers/video/mxc/ldb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/ldb.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/ldb.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,1036 @@ +/* + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -215629,7 +215629,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/ldb.c linux-imx6-3.14/drivers/video/mx +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/video/mxc/Makefile linux-imx6-3.14/drivers/video/mxc/Makefile --- linux-3.14.17/drivers/video/mxc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/Makefile 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/Makefile 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,6 @@ +obj-$(CONFIG_FB_MXC_LDB) += ldb.o +obj-$(CONFIG_FB_MXC_MIPI_DSI) += mipi_dsi.o @@ -215639,7 +215639,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/Makefile linux-imx6-3.14/drivers/video +obj-$(CONFIG_FB_MXC_SYNC_PANEL) += mxc_dispdrv.o mxc_lcdif.o mxc_ipuv3_fb.o diff -Nur linux-3.14.17/drivers/video/mxc/mipi_dsi.c linux-imx6-3.14/drivers/video/mxc/mipi_dsi.c --- linux-3.14.17/drivers/video/mxc/mipi_dsi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mipi_dsi.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mipi_dsi.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,953 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -216596,7 +216596,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mipi_dsi.c linux-imx6-3.14/drivers/vid +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/video/mxc/mipi_dsi.h linux-imx6-3.14/drivers/video/mxc/mipi_dsi.h --- linux-3.14.17/drivers/video/mxc/mipi_dsi.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mipi_dsi.h 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mipi_dsi.h 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -216712,7 +216712,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mipi_dsi.h linux-imx6-3.14/drivers/vid +#endif diff -Nur linux-3.14.17/drivers/video/mxc/mxc_dispdrv.c linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.c --- linux-3.14.17/drivers/video/mxc/mxc_dispdrv.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -216866,7 +216866,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_dispdrv.c linux-imx6-3.14/drivers/ +EXPORT_SYMBOL_GPL(mxc_dispdrv_getdata); diff -Nur linux-3.14.17/drivers/video/mxc/mxc_dispdrv.h linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.h --- linux-3.14.17/drivers/video/mxc/mxc_dispdrv.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.h 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_dispdrv.h 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -216924,7 +216924,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_dispdrv.h linux-imx6-3.14/drivers/ +#endif diff -Nur linux-3.14.17/drivers/video/mxc/mxc_edid.c linux-imx6-3.14/drivers/video/mxc/mxc_edid.c --- linux-3.14.17/drivers/video/mxc/mxc_edid.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_edid.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_edid.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,762 @@ +/* + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -217690,7 +217690,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_edid.c linux-imx6-3.14/drivers/vid + diff -Nur linux-3.14.17/drivers/video/mxc/mxcfb_hx8369_wvga.c linux-imx6-3.14/drivers/video/mxc/mxcfb_hx8369_wvga.c --- linux-3.14.17/drivers/video/mxc/mxcfb_hx8369_wvga.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxcfb_hx8369_wvga.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxcfb_hx8369_wvga.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,449 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -218143,7 +218143,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxcfb_hx8369_wvga.c linux-imx6-3.14/dr +} diff -Nur linux-3.14.17/drivers/video/mxc/mxc_hdmi.c linux-imx6-3.14/drivers/video/mxc/mxc_hdmi.c --- linux-3.14.17/drivers/video/mxc/mxc_hdmi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_hdmi.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_hdmi.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,3022 @@ +/* + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. @@ -221169,7 +221169,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_hdmi.c linux-imx6-3.14/drivers/vid +MODULE_AUTHOR("Freescale Semiconductor, Inc."); diff -Nur linux-3.14.17/drivers/video/mxc/mxc_ipuv3_fb.c linux-imx6-3.14/drivers/video/mxc/mxc_ipuv3_fb.c --- linux-3.14.17/drivers/video/mxc/mxc_ipuv3_fb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_ipuv3_fb.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_ipuv3_fb.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,2578 @@ +/* + * Copyright 2004-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -223751,7 +223751,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_ipuv3_fb.c linux-imx6-3.14/drivers +MODULE_SUPPORTED_DEVICE("fb"); diff -Nur linux-3.14.17/drivers/video/mxc/mxc_lcdif.c linux-imx6-3.14/drivers/video/mxc/mxc_lcdif.c --- linux-3.14.17/drivers/video/mxc/mxc_lcdif.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/mxc/mxc_lcdif.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxc/mxc_lcdif.c 2014-09-11 18:06:09.534068054 +0200 @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -223990,7 +223990,7 @@ diff -Nur linux-3.14.17/drivers/video/mxc/mxc_lcdif.c linux-imx6-3.14/drivers/vi +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/drivers/video/mxsfb.c linux-imx6-3.14/drivers/video/mxsfb.c --- linux-3.14.17/drivers/video/mxsfb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/drivers/video/mxsfb.c 2014-09-09 10:13:51.496975724 +0200 ++++ linux-imx6-3.14/drivers/video/mxsfb.c 2014-09-11 18:06:09.534068054 +0200 @@ -96,9 +96,10 @@ #define CTRL_DF24 (1 << 1) #define CTRL_RUN (1 << 0) @@ -224208,7 +224208,7 @@ diff -Nur linux-3.14.17/drivers/video/mxsfb.c linux-imx6-3.14/drivers/video/mxsf static struct platform_device_id mxsfb_devtype[] = { diff -Nur linux-3.14.17/drivers/video/vexpress-dvi.c linux-imx6-3.14/drivers/video/vexpress-dvi.c --- linux-3.14.17/drivers/video/vexpress-dvi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/drivers/video/vexpress-dvi.c 2014-09-09 10:13:51.532976018 +0200 ++++ linux-imx6-3.14/drivers/video/vexpress-dvi.c 2014-09-11 18:06:09.850069315 +0200 @@ -0,0 +1,220 @@ +/* + * This program is free software; you can redistribute it and/or modify @@ -224432,7 +224432,7 @@ diff -Nur linux-3.14.17/drivers/video/vexpress-dvi.c linux-imx6-3.14/drivers/vid +device_initcall(vexpress_dvi_init); diff -Nur linux-3.14.17/firmware/imx/sdma/sdma-imx6q.bin.ihex linux-imx6-3.14/firmware/imx/sdma/sdma-imx6q.bin.ihex --- linux-3.14.17/firmware/imx/sdma/sdma-imx6q.bin.ihex 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/firmware/imx/sdma/sdma-imx6q.bin.ihex 2014-09-09 10:13:51.592976507 +0200 ++++ linux-imx6-3.14/firmware/imx/sdma/sdma-imx6q.bin.ihex 2014-09-11 18:06:10.050070113 +0200 @@ -0,0 +1,116 @@ +:1000000053444D4101000000010000001C000000AD +:1000100026000000B40000007A0600008202000002 @@ -224552,7 +224552,7 @@ diff -Nur linux-3.14.17/firmware/imx/sdma/sdma-imx6q.bin.ihex linux-imx6-3.14/fi +:00000001FF diff -Nur linux-3.14.17/firmware/Makefile linux-imx6-3.14/firmware/Makefile --- linux-3.14.17/firmware/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/firmware/Makefile 2014-09-09 10:13:51.568976312 +0200 ++++ linux-imx6-3.14/firmware/Makefile 2014-09-11 18:06:09.998069907 +0200 @@ -61,6 +61,7 @@ radeon/RV770_pfp.bin radeon/RV770_me.bin \ radeon/RV730_pfp.bin radeon/RV730_me.bin \ @@ -224572,7 +224572,7 @@ diff -Nur linux-3.14.17/firmware/Makefile linux-imx6-3.14/firmware/Makefile # we're installing after a cross-compile, because ihex2fw has dependencies diff -Nur linux-3.14.17/fs/btrfs/Kconfig linux-imx6-3.14/fs/btrfs/Kconfig --- linux-3.14.17/fs/btrfs/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/btrfs/Kconfig 2014-09-09 10:13:51.624976767 +0200 ++++ linux-imx6-3.14/fs/btrfs/Kconfig 2014-09-11 18:06:10.122070401 +0200 @@ -1,5 +1,6 @@ config BTRFS_FS tristate "Btrfs filesystem support" @@ -224582,7 +224582,7 @@ diff -Nur linux-3.14.17/fs/btrfs/Kconfig linux-imx6-3.14/fs/btrfs/Kconfig select ZLIB_INFLATE diff -Nur linux-3.14.17/fs/buffer.c linux-imx6-3.14/fs/buffer.c --- linux-3.14.17/fs/buffer.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/buffer.c 2014-09-09 10:13:51.644976930 +0200 ++++ linux-imx6-3.14/fs/buffer.c 2014-09-11 18:06:10.218070784 +0200 @@ -3088,7 +3088,7 @@ * until the buffer gets unlocked). * @@ -224594,7 +224594,7 @@ diff -Nur linux-3.14.17/fs/buffer.c linux-imx6-3.14/fs/buffer.c * All of the buffers must be for the same device, and must also be a diff -Nur linux-3.14.17/fs/compat_binfmt_elf.c linux-imx6-3.14/fs/compat_binfmt_elf.c --- linux-3.14.17/fs/compat_binfmt_elf.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/compat_binfmt_elf.c 2014-09-09 10:13:51.664977093 +0200 ++++ linux-imx6-3.14/fs/compat_binfmt_elf.c 2014-09-11 18:06:10.286071055 +0200 @@ -88,6 +88,11 @@ #define ELF_HWCAP COMPAT_ELF_HWCAP #endif @@ -224609,7 +224609,7 @@ diff -Nur linux-3.14.17/fs/compat_binfmt_elf.c linux-imx6-3.14/fs/compat_binfmt_ #define ARCH_DLINFO COMPAT_ARCH_DLINFO diff -Nur linux-3.14.17/fs/coredump.c linux-imx6-3.14/fs/coredump.c --- linux-3.14.17/fs/coredump.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/coredump.c 2014-09-09 10:13:51.664977093 +0200 ++++ linux-imx6-3.14/fs/coredump.c 2014-09-11 18:06:10.290071071 +0200 @@ -306,7 +306,7 @@ if (unlikely(nr < 0)) return nr; @@ -224621,7 +224621,7 @@ diff -Nur linux-3.14.17/fs/coredump.c linux-imx6-3.14/fs/coredump.c /* diff -Nur linux-3.14.17/fs/debugfs/inode.c linux-imx6-3.14/fs/debugfs/inode.c --- linux-3.14.17/fs/debugfs/inode.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/debugfs/inode.c 2014-09-09 10:13:51.668977127 +0200 ++++ linux-imx6-3.14/fs/debugfs/inode.c 2014-09-11 18:06:10.294071087 +0200 @@ -358,7 +358,7 @@ * @name: a pointer to a string containing the name of the file to create. * @mode: the permission that the file should have. @@ -224651,7 +224651,7 @@ diff -Nur linux-3.14.17/fs/debugfs/inode.c linux-imx6-3.14/fs/debugfs/inode.c * @target: a pointer to a string containing the path to the target of the diff -Nur linux-3.14.17/fs/namei.c linux-imx6-3.14/fs/namei.c --- linux-3.14.17/fs/namei.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/namei.c 2014-09-09 10:13:51.748977779 +0200 ++++ linux-imx6-3.14/fs/namei.c 2014-09-11 18:06:10.446071695 +0200 @@ -2247,10 +2247,9 @@ goto out; } @@ -224666,7 +224666,7 @@ diff -Nur linux-3.14.17/fs/namei.c linux-imx6-3.14/fs/namei.c out: diff -Nur linux-3.14.17/fs/nfs/nfs3acl.c linux-imx6-3.14/fs/nfs/nfs3acl.c --- linux-3.14.17/fs/nfs/nfs3acl.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/nfs/nfs3acl.c 2014-09-09 10:13:51.756977843 +0200 ++++ linux-imx6-3.14/fs/nfs/nfs3acl.c 2014-09-11 18:06:10.458071742 +0200 @@ -247,46 +247,3 @@ &posix_acl_default_xattr_handler, NULL, @@ -224716,7 +224716,7 @@ diff -Nur linux-3.14.17/fs/nfs/nfs3acl.c linux-imx6-3.14/fs/nfs/nfs3acl.c -} diff -Nur linux-3.14.17/fs/nfs/nfs3proc.c linux-imx6-3.14/fs/nfs/nfs3proc.c --- linux-3.14.17/fs/nfs/nfs3proc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/nfs/nfs3proc.c 2014-09-09 10:13:51.756977843 +0200 ++++ linux-imx6-3.14/fs/nfs/nfs3proc.c 2014-09-11 18:06:10.458071742 +0200 @@ -926,7 +926,7 @@ .getattr = nfs_getattr, .setattr = nfs_setattr, @@ -224737,7 +224737,7 @@ diff -Nur linux-3.14.17/fs/nfs/nfs3proc.c linux-imx6-3.14/fs/nfs/nfs3proc.c .removexattr = generic_removexattr, diff -Nur linux-3.14.17/fs/xfs/xfs_log_cil.c linux-imx6-3.14/fs/xfs/xfs_log_cil.c --- linux-3.14.17/fs/xfs/xfs_log_cil.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/xfs/xfs_log_cil.c 2014-09-09 10:13:51.880978853 +0200 ++++ linux-imx6-3.14/fs/xfs/xfs_log_cil.c 2014-09-11 18:06:10.606072333 +0200 @@ -97,7 +97,7 @@ { /* Account for the new LV being passed in */ @@ -224775,7 +224775,7 @@ diff -Nur linux-3.14.17/fs/xfs/xfs_log_cil.c linux-imx6-3.14/fs/xfs/xfs_log_cil. diff -Nur linux-3.14.17/fs/xfs/xfs_log.h linux-imx6-3.14/fs/xfs/xfs_log.h --- linux-3.14.17/fs/xfs/xfs_log.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/fs/xfs/xfs_log.h 2014-09-09 10:13:51.880978853 +0200 ++++ linux-imx6-3.14/fs/xfs/xfs_log.h 2014-09-11 18:06:10.602072317 +0200 @@ -24,8 +24,7 @@ struct xfs_log_iovec *lv_iovecp; /* iovec array */ struct xfs_log_item *lv_item; /* owner */ @@ -224815,7 +224815,7 @@ diff -Nur linux-3.14.17/fs/xfs/xfs_log.h linux-imx6-3.14/fs/xfs/xfs_log.h diff -Nur linux-3.14.17/include/asm-generic/word-at-a-time.h linux-imx6-3.14/include/asm-generic/word-at-a-time.h --- linux-3.14.17/include/asm-generic/word-at-a-time.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/asm-generic/word-at-a-time.h 2014-09-09 10:13:51.900979016 +0200 ++++ linux-imx6-3.14/include/asm-generic/word-at-a-time.h 2014-09-11 18:06:10.650072508 +0200 @@ -50,7 +50,7 @@ } @@ -224827,7 +224827,7 @@ diff -Nur linux-3.14.17/include/asm-generic/word-at-a-time.h linux-imx6-3.14/inc #endif /* _ASM_WORD_AT_A_TIME_H */ diff -Nur linux-3.14.17/include/crypto/algapi.h linux-imx6-3.14/include/crypto/algapi.h --- linux-3.14.17/include/crypto/algapi.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/crypto/algapi.h 2014-09-09 10:13:51.900979016 +0200 ++++ linux-imx6-3.14/include/crypto/algapi.h 2014-09-11 18:06:10.650072508 +0200 @@ -100,9 +100,12 @@ void *page; u8 *buffer; @@ -224855,7 +224855,7 @@ diff -Nur linux-3.14.17/include/crypto/algapi.h linux-imx6-3.14/include/crypto/a struct ablkcipher_walk *walk, int err); diff -Nur linux-3.14.17/include/drm/drm_fb_helper.h linux-imx6-3.14/include/drm/drm_fb_helper.h --- linux-3.14.17/include/drm/drm_fb_helper.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/drm/drm_fb_helper.h 2014-09-09 10:13:51.904979048 +0200 ++++ linux-imx6-3.14/include/drm/drm_fb_helper.h 2014-09-11 18:06:10.674072603 +0200 @@ -55,7 +55,7 @@ * save the current lut when force-restoring the fbdev for e.g. * kdbg. @@ -224867,7 +224867,7 @@ diff -Nur linux-3.14.17/include/drm/drm_fb_helper.h linux-imx6-3.14/include/drm/ * diff -Nur linux-3.14.17/include/dt-bindings/clock/imx6sl-clock.h linux-imx6-3.14/include/dt-bindings/clock/imx6sl-clock.h --- linux-3.14.17/include/dt-bindings/clock/imx6sl-clock.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/dt-bindings/clock/imx6sl-clock.h 2014-09-09 10:13:51.908979081 +0200 ++++ linux-imx6-3.14/include/dt-bindings/clock/imx6sl-clock.h 2014-09-11 18:06:10.686072652 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2013 Freescale Semiconductor, Inc. @@ -224897,7 +224897,7 @@ diff -Nur linux-3.14.17/include/dt-bindings/clock/imx6sl-clock.h linux-imx6-3.14 #endif /* __DT_BINDINGS_CLOCK_IMX6SL_H */ diff -Nur linux-3.14.17/include/dt-bindings/pinctrl/dra.h linux-imx6-3.14/include/dt-bindings/pinctrl/dra.h --- linux-3.14.17/include/dt-bindings/pinctrl/dra.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/dt-bindings/pinctrl/dra.h 2014-09-09 10:13:51.912979115 +0200 ++++ linux-imx6-3.14/include/dt-bindings/pinctrl/dra.h 2014-09-11 18:06:10.702072715 +0200 @@ -30,8 +30,7 @@ #define MUX_MODE14 0xe #define MUX_MODE15 0xf @@ -224923,7 +224923,7 @@ diff -Nur linux-3.14.17/include/dt-bindings/pinctrl/dra.h linux-imx6-3.14/includ #define PIN_INPUT_PULLDOWN (PULL_ENA | INPUT_EN) diff -Nur linux-3.14.17/include/linux/ahci_platform.h linux-imx6-3.14/include/linux/ahci_platform.h --- linux-3.14.17/include/linux/ahci_platform.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/ahci_platform.h 2014-09-09 10:13:51.912979115 +0200 ++++ linux-imx6-3.14/include/linux/ahci_platform.h 2014-09-11 18:06:10.706072732 +0200 @@ -19,15 +19,38 @@ struct device; @@ -224968,7 +224968,7 @@ diff -Nur linux-3.14.17/include/linux/ahci_platform.h linux-imx6-3.14/include/li #endif /* _AHCI_PLATFORM_H */ diff -Nur linux-3.14.17/include/linux/amba/clcd.h linux-imx6-3.14/include/linux/amba/clcd.h --- linux-3.14.17/include/linux/amba/clcd.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/amba/clcd.h 2014-09-09 10:13:51.912979115 +0200 ++++ linux-imx6-3.14/include/linux/amba/clcd.h 2014-09-11 18:06:10.706072732 +0200 @@ -243,6 +243,9 @@ val |= CNTL_BGR; } @@ -225000,7 +225000,7 @@ diff -Nur linux-3.14.17/include/linux/amba/clcd.h linux-imx6-3.14/include/linux/ diff -Nur linux-3.14.17/include/linux/arm-hdlcd.h linux-imx6-3.14/include/linux/arm-hdlcd.h --- linux-3.14.17/include/linux/arm-hdlcd.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/arm-hdlcd.h 2014-09-09 10:13:51.916979147 +0200 ++++ linux-imx6-3.14/include/linux/arm-hdlcd.h 2014-09-11 18:06:10.710072748 +0200 @@ -0,0 +1,122 @@ +/* + * include/linux/arm-hdlcd.h @@ -225126,7 +225126,7 @@ diff -Nur linux-3.14.17/include/linux/arm-hdlcd.h linux-imx6-3.14/include/linux/ +}; diff -Nur linux-3.14.17/include/linux/backlight.h linux-imx6-3.14/include/linux/backlight.h --- linux-3.14.17/include/linux/backlight.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/backlight.h 2014-09-09 10:13:51.916979147 +0200 ++++ linux-imx6-3.14/include/linux/backlight.h 2014-09-11 18:06:10.722072796 +0200 @@ -9,6 +9,7 @@ #define _LINUX_BACKLIGHT_H @@ -225149,7 +225149,7 @@ diff -Nur linux-3.14.17/include/linux/backlight.h linux-imx6-3.14/include/linux/ static inline void backlight_update_status(struct backlight_device *bd) diff -Nur linux-3.14.17/include/linux/busfreq-imx6.h linux-imx6-3.14/include/linux/busfreq-imx6.h --- linux-3.14.17/include/linux/busfreq-imx6.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/busfreq-imx6.h 2014-09-09 10:13:51.920979179 +0200 ++++ linux-imx6-3.14/include/linux/busfreq-imx6.h 2014-09-11 18:06:10.730072828 +0200 @@ -0,0 +1,23 @@ +/* + * Copyright 2012-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -225176,7 +225176,7 @@ diff -Nur linux-3.14.17/include/linux/busfreq-imx6.h linux-imx6-3.14/include/lin +#endif diff -Nur linux-3.14.17/include/linux/cgroup_subsys.h linux-imx6-3.14/include/linux/cgroup_subsys.h --- linux-3.14.17/include/linux/cgroup_subsys.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/cgroup_subsys.h 2014-09-09 10:13:51.924979211 +0200 ++++ linux-imx6-3.14/include/linux/cgroup_subsys.h 2014-09-11 18:06:10.734072844 +0200 @@ -39,6 +39,10 @@ SUBSYS(blkio) #endif @@ -225190,7 +225190,7 @@ diff -Nur linux-3.14.17/include/linux/cgroup_subsys.h linux-imx6-3.14/include/li #endif diff -Nur linux-3.14.17/include/linux/clk-provider.h linux-imx6-3.14/include/linux/clk-provider.h --- linux-3.14.17/include/linux/clk-provider.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/clk-provider.h 2014-09-09 10:13:51.924979211 +0200 ++++ linux-imx6-3.14/include/linux/clk-provider.h 2014-09-11 18:06:10.734072844 +0200 @@ -30,6 +30,13 @@ #define CLK_GET_RATE_NOCACHE BIT(6) /* do not use the cached clk rate */ #define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */ @@ -225207,7 +225207,7 @@ diff -Nur linux-3.14.17/include/linux/clk-provider.h linux-imx6-3.14/include/lin diff -Nur linux-3.14.17/include/linux/cma.h linux-imx6-3.14/include/linux/cma.h --- linux-3.14.17/include/linux/cma.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/cma.h 2014-09-09 10:13:51.924979211 +0200 ++++ linux-imx6-3.14/include/linux/cma.h 2014-09-11 18:06:10.758072940 +0200 @@ -0,0 +1,27 @@ +#ifndef __CMA_H__ +#define __CMA_H__ @@ -225238,7 +225238,7 @@ diff -Nur linux-3.14.17/include/linux/cma.h linux-imx6-3.14/include/linux/cma.h +#endif diff -Nur linux-3.14.17/include/linux/cpufeature.h linux-imx6-3.14/include/linux/cpufeature.h --- linux-3.14.17/include/linux/cpufeature.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/cpufeature.h 2014-09-09 10:13:51.988979735 +0200 ++++ linux-imx6-3.14/include/linux/cpufeature.h 2014-09-11 18:06:10.762072955 +0200 @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org> @@ -225302,7 +225302,7 @@ diff -Nur linux-3.14.17/include/linux/cpufeature.h linux-imx6-3.14/include/linux +#endif diff -Nur linux-3.14.17/include/linux/cpufreq.h linux-imx6-3.14/include/linux/cpufreq.h --- linux-3.14.17/include/linux/cpufreq.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/cpufreq.h 2014-09-09 10:13:51.988979735 +0200 ++++ linux-imx6-3.14/include/linux/cpufreq.h 2014-09-11 18:06:10.762072955 +0200 @@ -429,6 +429,9 @@ #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND) extern struct cpufreq_governor cpufreq_gov_ondemand; @@ -225315,7 +225315,7 @@ diff -Nur linux-3.14.17/include/linux/cpufreq.h linux-imx6-3.14/include/linux/cp #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_conservative) diff -Nur linux-3.14.17/include/linux/cpu.h linux-imx6-3.14/include/linux/cpu.h --- linux-3.14.17/include/linux/cpu.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/cpu.h 2014-09-09 10:13:51.988979735 +0200 ++++ linux-imx6-3.14/include/linux/cpu.h 2014-09-11 18:06:10.762072955 +0200 @@ -226,4 +226,11 @@ void arch_cpu_idle_exit(void); void arch_cpu_idle_dead(void); @@ -225330,7 +225330,7 @@ diff -Nur linux-3.14.17/include/linux/cpu.h linux-imx6-3.14/include/linux/cpu.h #endif /* _LINUX_CPU_H_ */ diff -Nur linux-3.14.17/include/linux/device_cooling.h linux-imx6-3.14/include/linux/device_cooling.h --- linux-3.14.17/include/linux/device_cooling.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/device_cooling.h 2014-09-09 10:13:51.996979800 +0200 ++++ linux-imx6-3.14/include/linux/device_cooling.h 2014-09-11 18:06:10.770072987 +0200 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. @@ -225379,7 +225379,7 @@ diff -Nur linux-3.14.17/include/linux/device_cooling.h linux-imx6-3.14/include/l +#endif /* __DEVICE_THERMAL_H__ */ diff -Nur linux-3.14.17/include/linux/dma-contiguous.h linux-imx6-3.14/include/linux/dma-contiguous.h --- linux-3.14.17/include/linux/dma-contiguous.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/dma-contiguous.h 2014-09-09 10:13:52.000979831 +0200 ++++ linux-imx6-3.14/include/linux/dma-contiguous.h 2014-09-11 18:06:10.770072987 +0200 @@ -53,18 +53,13 @@ #ifdef __KERNEL__ @@ -225442,7 +225442,7 @@ diff -Nur linux-3.14.17/include/linux/dma-contiguous.h linux-imx6-3.14/include/l diff -Nur linux-3.14.17/include/linux/dmaengine.h linux-imx6-3.14/include/linux/dmaengine.h --- linux-3.14.17/include/linux/dmaengine.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/dmaengine.h 2014-09-09 10:13:52.000979831 +0200 ++++ linux-imx6-3.14/include/linux/dmaengine.h 2014-09-11 18:06:10.774073003 +0200 @@ -333,6 +333,8 @@ * @slave_id: Slave requester id. Only valid for slave channels. The dma * slave peripheral will have unique id as dma requester which need to be @@ -225463,7 +225463,7 @@ diff -Nur linux-3.14.17/include/linux/dmaengine.h linux-imx6-3.14/include/linux/ /** diff -Nur linux-3.14.17/include/linux/ftrace.h linux-imx6-3.14/include/linux/ftrace.h --- linux-3.14.17/include/linux/ftrace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/ftrace.h 2014-09-09 10:13:52.012979929 +0200 ++++ linux-imx6-3.14/include/linux/ftrace.h 2014-09-11 18:06:10.794073083 +0200 @@ -605,25 +605,27 @@ #endif } @@ -225510,7 +225510,7 @@ diff -Nur linux-3.14.17/include/linux/ftrace.h linux-imx6-3.14/include/linux/ftr extern void time_hardirqs_on(unsigned long a0, unsigned long a1); diff -Nur linux-3.14.17/include/linux/hardirq.h linux-imx6-3.14/include/linux/hardirq.h --- linux-3.14.17/include/linux/hardirq.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/hardirq.h 2014-09-09 10:13:52.012979929 +0200 ++++ linux-imx6-3.14/include/linux/hardirq.h 2014-09-11 18:06:10.794073083 +0200 @@ -9,6 +9,7 @@ @@ -225521,7 +225521,7 @@ diff -Nur linux-3.14.17/include/linux/hardirq.h linux-imx6-3.14/include/linux/ha diff -Nur linux-3.14.17/include/linux/hsi/hsi.h linux-imx6-3.14/include/linux/hsi/hsi.h --- linux-3.14.17/include/linux/hsi/hsi.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/hsi/hsi.h 2014-09-09 10:13:52.016979963 +0200 ++++ linux-imx6-3.14/include/linux/hsi/hsi.h 2014-09-11 18:06:10.798073099 +0200 @@ -178,7 +178,7 @@ * @complete: Transfer completion callback * @destructor: Destructor to free resources when flushing @@ -225533,7 +225533,7 @@ diff -Nur linux-3.14.17/include/linux/hsi/hsi.h linux-imx6-3.14/include/linux/hs * @break_frame: if true HSI will send/receive a break frame. Data buffers are diff -Nur linux-3.14.17/include/linux/ipu.h linux-imx6-3.14/include/linux/ipu.h --- linux-3.14.17/include/linux/ipu.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/ipu.h 2014-09-09 10:13:52.028980058 +0200 ++++ linux-imx6-3.14/include/linux/ipu.h 2014-09-11 18:06:10.850073307 +0200 @@ -0,0 +1,38 @@ +/* + * Copyright 2005-2013 Freescale Semiconductor, Inc. @@ -225575,7 +225575,7 @@ diff -Nur linux-3.14.17/include/linux/ipu.h linux-imx6-3.14/include/linux/ipu.h +#endif diff -Nur linux-3.14.17/include/linux/ipu-v3.h linux-imx6-3.14/include/linux/ipu-v3.h --- linux-3.14.17/include/linux/ipu-v3.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/ipu-v3.h 2014-09-09 10:13:52.028980058 +0200 ++++ linux-imx6-3.14/include/linux/ipu-v3.h 2014-09-11 18:06:10.850073307 +0200 @@ -0,0 +1,752 @@ +/* + * Copyright (c) 2010 Sascha Hauer <s.hauer@pengutronix.de> @@ -226331,7 +226331,7 @@ diff -Nur linux-3.14.17/include/linux/ipu-v3.h linux-imx6-3.14/include/linux/ipu +#endif /* __LINUX_IPU_V3_H_ */ diff -Nur linux-3.14.17/include/linux/isl29023.h linux-imx6-3.14/include/linux/isl29023.h --- linux-3.14.17/include/linux/isl29023.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/isl29023.h 2014-09-09 10:13:52.032980091 +0200 ++++ linux-imx6-3.14/include/linux/isl29023.h 2014-09-11 18:06:10.854073322 +0200 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -226382,7 +226382,7 @@ diff -Nur linux-3.14.17/include/linux/isl29023.h linux-imx6-3.14/include/linux/i +#endif diff -Nur linux-3.14.17/include/linux/kfifo.h linux-imx6-3.14/include/linux/kfifo.h --- linux-3.14.17/include/linux/kfifo.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/kfifo.h 2014-09-09 10:13:52.032980091 +0200 ++++ linux-imx6-3.14/include/linux/kfifo.h 2014-09-11 18:06:10.858073338 +0200 @@ -722,7 +722,7 @@ /** * kfifo_dma_out_finish - finish a DMA OUT operation @@ -226394,7 +226394,7 @@ diff -Nur linux-3.14.17/include/linux/kfifo.h linux-imx6-3.14/include/linux/kfif * the len parameter. No error checking will be done. diff -Nur linux-3.14.17/include/linux/libata.h linux-imx6-3.14/include/linux/libata.h --- linux-3.14.17/include/linux/libata.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/libata.h 2014-09-09 10:13:52.036980125 +0200 ++++ linux-imx6-3.14/include/linux/libata.h 2014-09-11 18:06:10.862073355 +0200 @@ -593,7 +593,6 @@ struct device *dev; void __iomem * const *iomap; @@ -226405,7 +226405,7 @@ diff -Nur linux-3.14.17/include/linux/libata.h linux-imx6-3.14/include/linux/lib unsigned long flags; diff -Nur linux-3.14.17/include/linux/mailbox_client.h linux-imx6-3.14/include/linux/mailbox_client.h --- linux-3.14.17/include/linux/mailbox_client.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mailbox_client.h 2014-09-09 10:13:52.040980157 +0200 ++++ linux-imx6-3.14/include/linux/mailbox_client.h 2014-09-11 18:06:10.866073370 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2014 Linaro Ltd. @@ -226455,7 +226455,7 @@ diff -Nur linux-3.14.17/include/linux/mailbox_client.h linux-imx6-3.14/include/l +#endif /* __MAILBOX_CLIENT_H */ diff -Nur linux-3.14.17/include/linux/mailbox_controller.h linux-imx6-3.14/include/linux/mailbox_controller.h --- linux-3.14.17/include/linux/mailbox_controller.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mailbox_controller.h 2014-09-09 10:13:52.040980157 +0200 ++++ linux-imx6-3.14/include/linux/mailbox_controller.h 2014-09-11 18:06:10.866073370 +0200 @@ -0,0 +1,121 @@ +/* + * This program is free software; you can redistribute it and/or modify @@ -226601,7 +226601,7 @@ diff -Nur linux-3.14.17/include/linux/mailbox.h linux-imx6-3.14/include/linux/ma -int pl320_ipc_unregister_notifier(struct notifier_block *nb); diff -Nur linux-3.14.17/include/linux/memblock.h linux-imx6-3.14/include/linux/memblock.h --- linux-3.14.17/include/linux/memblock.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/memblock.h 2014-09-09 10:13:52.040980157 +0200 ++++ linux-imx6-3.14/include/linux/memblock.h 2014-09-11 18:06:10.866073370 +0200 @@ -221,6 +221,8 @@ #define MEMBLOCK_ALLOC_ANYWHERE (~(phys_addr_t)0) #define MEMBLOCK_ALLOC_ACCESSIBLE 0 @@ -226613,7 +226613,7 @@ diff -Nur linux-3.14.17/include/linux/memblock.h linux-imx6-3.14/include/linux/m phys_addr_t __memblock_alloc_base(phys_addr_t size, phys_addr_t align, diff -Nur linux-3.14.17/include/linux/mfd/abx500/ab8500.h linux-imx6-3.14/include/linux/mfd/abx500/ab8500.h --- linux-3.14.17/include/linux/mfd/abx500/ab8500.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mfd/abx500/ab8500.h 2014-09-09 10:13:52.044980190 +0200 ++++ linux-imx6-3.14/include/linux/mfd/abx500/ab8500.h 2014-09-11 18:06:10.870073386 +0200 @@ -347,7 +347,6 @@ struct mutex lock; struct mutex irq_lock; @@ -226632,7 +226632,7 @@ diff -Nur linux-3.14.17/include/linux/mfd/abx500/ab8500.h linux-imx6-3.14/includ struct ab8500_codec_platform_data *codec; diff -Nur linux-3.14.17/include/linux/mfd/dbx500-prcmu.h linux-imx6-3.14/include/linux/mfd/dbx500-prcmu.h --- linux-3.14.17/include/linux/mfd/dbx500-prcmu.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mfd/dbx500-prcmu.h 2014-09-09 10:13:52.048980221 +0200 ++++ linux-imx6-3.14/include/linux/mfd/dbx500-prcmu.h 2014-09-11 18:06:10.874073403 +0200 @@ -183,8 +183,6 @@ bool enable_set_ddr_opp; bool enable_ape_opp_100_voltage; @@ -226644,7 +226644,7 @@ diff -Nur linux-3.14.17/include/linux/mfd/dbx500-prcmu.h linux-imx6-3.14/include u32 adt_offset; diff -Nur linux-3.14.17/include/linux/mfd/mxc-hdmi-core.h linux-imx6-3.14/include/linux/mfd/mxc-hdmi-core.h --- linux-3.14.17/include/linux/mfd/mxc-hdmi-core.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mfd/mxc-hdmi-core.h 2014-09-09 10:13:52.048980221 +0200 ++++ linux-imx6-3.14/include/linux/mfd/mxc-hdmi-core.h 2014-09-11 18:06:10.878073418 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -226716,7 +226716,7 @@ diff -Nur linux-3.14.17/include/linux/mfd/mxc-hdmi-core.h linux-imx6-3.14/includ +#endif diff -Nur linux-3.14.17/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h linux-imx6-3.14/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h --- linux-3.14.17/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h 2014-09-09 10:13:52.052980254 +0200 ++++ linux-imx6-3.14/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h 2014-09-11 18:06:10.882073433 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Freescale Semiconductor, Inc. @@ -226737,7 +226737,7 @@ diff -Nur linux-3.14.17/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h linux-imx6-3 #define IMX6Q_GPR1_ADDRS3_64MB (0x1 << 10) diff -Nur linux-3.14.17/include/linux/mipi_csi2.h linux-imx6-3.14/include/linux/mipi_csi2.h --- linux-3.14.17/include/linux/mipi_csi2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mipi_csi2.h 2014-09-09 10:13:52.056980288 +0200 ++++ linux-imx6-3.14/include/linux/mipi_csi2.h 2014-09-11 18:06:10.890073466 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -226834,7 +226834,7 @@ diff -Nur linux-3.14.17/include/linux/mipi_csi2.h linux-imx6-3.14/include/linux/ +#endif diff -Nur linux-3.14.17/include/linux/mipi_dsi.h linux-imx6-3.14/include/linux/mipi_dsi.h --- linux-3.14.17/include/linux/mipi_dsi.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mipi_dsi.h 2014-09-09 10:13:52.056980288 +0200 ++++ linux-imx6-3.14/include/linux/mipi_dsi.h 2014-09-11 18:06:10.890073466 +0200 @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227009,7 +227009,7 @@ diff -Nur linux-3.14.17/include/linux/mipi_dsi.h linux-imx6-3.14/include/linux/m +#endif diff -Nur linux-3.14.17/include/linux/mmc/card.h linux-imx6-3.14/include/linux/mmc/card.h --- linux-3.14.17/include/linux/mmc/card.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mmc/card.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mmc/card.h 2014-09-11 18:06:10.890073466 +0200 @@ -86,10 +86,13 @@ unsigned int data_sector_size; /* 512 bytes or 4KB */ unsigned int data_tag_unit_size; /* DATA TAG UNIT size */ @@ -227034,7 +227034,7 @@ diff -Nur linux-3.14.17/include/linux/mmc/card.h linux-imx6-3.14/include/linux/m u8 raw_sec_feature_support;/* 231 */ diff -Nur linux-3.14.17/include/linux/mmc/host.h linux-imx6-3.14/include/linux/mmc/host.h --- linux-3.14.17/include/linux/mmc/host.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mmc/host.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mmc/host.h 2014-09-11 18:06:10.890073466 +0200 @@ -282,6 +282,7 @@ MMC_CAP2_PACKED_WR) #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14) /* Don't power up before scan */ @@ -227066,7 +227066,7 @@ diff -Nur linux-3.14.17/include/linux/mmc/host.h linux-imx6-3.14/include/linux/m int mmc_regulator_set_ocr(struct mmc_host *mmc, diff -Nur linux-3.14.17/include/linux/mmc/mmc.h linux-imx6-3.14/include/linux/mmc/mmc.h --- linux-3.14.17/include/linux/mmc/mmc.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mmc/mmc.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mmc/mmc.h 2014-09-11 18:06:10.890073466 +0200 @@ -292,6 +292,7 @@ #define EXT_CSD_RPMB_MULT 168 /* RO */ #define EXT_CSD_BOOT_WP 173 /* R/W */ @@ -227115,7 +227115,7 @@ diff -Nur linux-3.14.17/include/linux/mmc/mmc.h linux-imx6-3.14/include/linux/mm diff -Nur linux-3.14.17/include/linux/mmc/sdhci.h linux-imx6-3.14/include/linux/mmc/sdhci.h --- linux-3.14.17/include/linux/mmc/sdhci.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mmc/sdhci.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mmc/sdhci.h 2014-09-11 18:06:10.890073466 +0200 @@ -57,12 +57,8 @@ #define SDHCI_QUIRK_BROKEN_CARD_DETECTION (1<<15) /* Controller reports inverted write-protect state */ @@ -227171,7 +227171,7 @@ diff -Nur linux-3.14.17/include/linux/mmc/sdhci.h linux-imx6-3.14/include/linux/ diff -Nur linux-3.14.17/include/linux/mmc/sdio_ids.h linux-imx6-3.14/include/linux/mmc/sdio_ids.h --- linux-3.14.17/include/linux/mmc/sdio_ids.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mmc/sdio_ids.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mmc/sdio_ids.h 2014-09-11 18:06:10.894073482 +0200 @@ -31,6 +31,7 @@ #define SDIO_DEVICE_ID_BROADCOM_4334 0x4334 #define SDIO_DEVICE_ID_BROADCOM_4335_4339 0x4335 @@ -227182,7 +227182,7 @@ diff -Nur linux-3.14.17/include/linux/mmc/sdio_ids.h linux-imx6-3.14/include/lin #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402 diff -Nur linux-3.14.17/include/linux/mod_devicetable.h linux-imx6-3.14/include/linux/mod_devicetable.h --- linux-3.14.17/include/linux/mod_devicetable.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mod_devicetable.h 2014-09-09 10:13:52.060980320 +0200 ++++ linux-imx6-3.14/include/linux/mod_devicetable.h 2014-09-11 18:06:10.894073482 +0200 @@ -564,6 +564,15 @@ #define X86_MODEL_ANY 0 #define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */ @@ -227201,7 +227201,7 @@ diff -Nur linux-3.14.17/include/linux/mod_devicetable.h linux-imx6-3.14/include/ struct ipack_device_id { diff -Nur linux-3.14.17/include/linux/mtd/map.h linux-imx6-3.14/include/linux/mtd/map.h --- linux-3.14.17/include/linux/mtd/map.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/mtd/map.h 2014-09-09 10:13:52.064980353 +0200 ++++ linux-imx6-3.14/include/linux/mtd/map.h 2014-09-11 18:06:10.894073482 +0200 @@ -438,7 +438,7 @@ if (map->cached) memcpy(to, (char *)map->cached + from, len); @@ -227213,7 +227213,7 @@ diff -Nur linux-3.14.17/include/linux/mtd/map.h linux-imx6-3.14/include/linux/mt static inline void inline_map_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) diff -Nur linux-3.14.17/include/linux/mxc_asrc.h linux-imx6-3.14/include/linux/mxc_asrc.h --- linux-3.14.17/include/linux/mxc_asrc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mxc_asrc.h 2014-09-09 10:13:52.068980385 +0200 ++++ linux-imx6-3.14/include/linux/mxc_asrc.h 2014-09-11 18:06:10.898073499 +0200 @@ -0,0 +1,386 @@ +/* + * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227603,7 +227603,7 @@ diff -Nur linux-3.14.17/include/linux/mxc_asrc.h linux-imx6-3.14/include/linux/m +#endif/* __MXC_ASRC_H__ */ diff -Nur linux-3.14.17/include/linux/mxcfb.h linux-imx6-3.14/include/linux/mxcfb.h --- linux-3.14.17/include/linux/mxcfb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mxcfb.h 2014-09-09 10:13:52.068980385 +0200 ++++ linux-imx6-3.14/include/linux/mxcfb.h 2014-09-11 18:06:10.898073499 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227653,7 +227653,7 @@ diff -Nur linux-3.14.17/include/linux/mxcfb.h linux-imx6-3.14/include/linux/mxcf +#endif diff -Nur linux-3.14.17/include/linux/mxc_mlb.h linux-imx6-3.14/include/linux/mxc_mlb.h --- linux-3.14.17/include/linux/mxc_mlb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mxc_mlb.h 2014-09-09 10:13:52.068980385 +0200 ++++ linux-imx6-3.14/include/linux/mxc_mlb.h 2014-09-11 18:06:10.898073499 +0200 @@ -0,0 +1,55 @@ +/* + * mxc_mlb.h @@ -227712,7 +227712,7 @@ diff -Nur linux-3.14.17/include/linux/mxc_mlb.h linux-imx6-3.14/include/linux/mx +#endif /* _MXC_MLB_H */ diff -Nur linux-3.14.17/include/linux/mxc_v4l2.h linux-imx6-3.14/include/linux/mxc_v4l2.h --- linux-3.14.17/include/linux/mxc_v4l2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mxc_v4l2.h 2014-09-09 10:13:52.068980385 +0200 ++++ linux-imx6-3.14/include/linux/mxc_v4l2.h 2014-09-11 18:06:10.898073499 +0200 @@ -0,0 +1,27 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227743,7 +227743,7 @@ diff -Nur linux-3.14.17/include/linux/mxc_v4l2.h linux-imx6-3.14/include/linux/m +#endif diff -Nur linux-3.14.17/include/linux/mxc_vpu.h linux-imx6-3.14/include/linux/mxc_vpu.h --- linux-3.14.17/include/linux/mxc_vpu.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/mxc_vpu.h 2014-09-09 10:13:52.068980385 +0200 ++++ linux-imx6-3.14/include/linux/mxc_vpu.h 2014-09-11 18:06:10.898073499 +0200 @@ -0,0 +1,118 @@ +/* + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227865,7 +227865,7 @@ diff -Nur linux-3.14.17/include/linux/mxc_vpu.h linux-imx6-3.14/include/linux/mx +#endif diff -Nur linux-3.14.17/include/linux/phy.h linux-imx6-3.14/include/linux/phy.h --- linux-3.14.17/include/linux/phy.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/phy.h 2014-09-09 10:13:52.080980483 +0200 ++++ linux-imx6-3.14/include/linux/phy.h 2014-09-11 18:06:10.970073785 +0200 @@ -609,6 +609,7 @@ return phydev->drv->read_status(phydev); } @@ -227876,7 +227876,7 @@ diff -Nur linux-3.14.17/include/linux/phy.h linux-imx6-3.14/include/linux/phy.h int genphy_config_aneg(struct phy_device *phydev); diff -Nur linux-3.14.17/include/linux/pipe_fs_i.h linux-imx6-3.14/include/linux/pipe_fs_i.h --- linux-3.14.17/include/linux/pipe_fs_i.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/pipe_fs_i.h 2014-09-09 10:13:52.080980483 +0200 ++++ linux-imx6-3.14/include/linux/pipe_fs_i.h 2014-09-11 18:06:10.974073802 +0200 @@ -35,7 +35,7 @@ * @tmp_page: cached released page * @readers: number of current readers of this pipe @@ -227888,7 +227888,7 @@ diff -Nur linux-3.14.17/include/linux/pipe_fs_i.h linux-imx6-3.14/include/linux/ * @w_counter: writer counter diff -Nur linux-3.14.17/include/linux/pl320-ipc.h linux-imx6-3.14/include/linux/pl320-ipc.h --- linux-3.14.17/include/linux/pl320-ipc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/pl320-ipc.h 2014-09-09 10:13:52.080980483 +0200 ++++ linux-imx6-3.14/include/linux/pl320-ipc.h 2014-09-11 18:06:10.978073817 +0200 @@ -0,0 +1,17 @@ +/* + * This program is free software; you can redistribute it and/or modify it @@ -227909,7 +227909,7 @@ diff -Nur linux-3.14.17/include/linux/pl320-ipc.h linux-imx6-3.14/include/linux/ +int pl320_ipc_unregister_notifier(struct notifier_block *nb); diff -Nur linux-3.14.17/include/linux/platform_data/dma-imx.h linux-imx6-3.14/include/linux/platform_data/dma-imx.h --- linux-3.14.17/include/linux/platform_data/dma-imx.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/platform_data/dma-imx.h 2014-09-09 10:13:52.084980516 +0200 ++++ linux-imx6-3.14/include/linux/platform_data/dma-imx.h 2014-09-11 18:06:10.982073833 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved. @@ -227952,7 +227952,7 @@ diff -Nur linux-3.14.17/include/linux/platform_data/dma-imx.h linux-imx6-3.14/in return !strcmp(chan->device->dev->driver->name, "imx-sdma") || diff -Nur linux-3.14.17/include/linux/power/imx6_usb_charger.h linux-imx6-3.14/include/linux/power/imx6_usb_charger.h --- linux-3.14.17/include/linux/power/imx6_usb_charger.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/power/imx6_usb_charger.h 2014-09-09 10:13:52.096980613 +0200 ++++ linux-imx6-3.14/include/linux/power/imx6_usb_charger.h 2014-09-11 18:06:10.994073881 +0200 @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -228036,7 +228036,7 @@ diff -Nur linux-3.14.17/include/linux/power/imx6_usb_charger.h linux-imx6-3.14/i +#endif /* __IMXUSB6_CHARGER_H */ diff -Nur linux-3.14.17/include/linux/printk.h linux-imx6-3.14/include/linux/printk.h --- linux-3.14.17/include/linux/printk.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/printk.h 2014-09-09 10:13:52.096980613 +0200 ++++ linux-imx6-3.14/include/linux/printk.h 2014-09-11 18:06:10.994073881 +0200 @@ -132,9 +132,9 @@ int printk(const char *fmt, ...); @@ -228060,7 +228060,7 @@ diff -Nur linux-3.14.17/include/linux/printk.h linux-imx6-3.14/include/linux/pri } diff -Nur linux-3.14.17/include/linux/ptp_clock_kernel.h linux-imx6-3.14/include/linux/ptp_clock_kernel.h --- linux-3.14.17/include/linux/ptp_clock_kernel.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/ptp_clock_kernel.h 2014-09-09 10:13:52.096980613 +0200 ++++ linux-imx6-3.14/include/linux/ptp_clock_kernel.h 2014-09-11 18:06:10.998073898 +0200 @@ -49,7 +49,11 @@ * @n_alarm: The number of programmable alarms. * @n_ext_ts: The number of external time stamp channels. @@ -228130,7 +228130,7 @@ diff -Nur linux-3.14.17/include/linux/ptp_clock_kernel.h linux-imx6-3.14/include #endif diff -Nur linux-3.14.17/include/linux/pxp_device.h linux-imx6-3.14/include/linux/pxp_device.h --- linux-3.14.17/include/linux/pxp_device.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/pxp_device.h 2014-09-09 10:13:52.096980613 +0200 ++++ linux-imx6-3.14/include/linux/pxp_device.h 2014-09-11 18:06:10.998073898 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2013-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -228202,7 +228202,7 @@ diff -Nur linux-3.14.17/include/linux/pxp_device.h linux-imx6-3.14/include/linux +#endif diff -Nur linux-3.14.17/include/linux/pxp_dma.h linux-imx6-3.14/include/linux/pxp_dma.h --- linux-3.14.17/include/linux/pxp_dma.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/linux/pxp_dma.h 2014-09-09 10:13:52.096980613 +0200 ++++ linux-imx6-3.14/include/linux/pxp_dma.h 2014-09-11 18:06:10.998073898 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -228278,7 +228278,7 @@ diff -Nur linux-3.14.17/include/linux/pxp_dma.h linux-imx6-3.14/include/linux/px +#endif diff -Nur linux-3.14.17/include/linux/regulator/consumer.h linux-imx6-3.14/include/linux/regulator/consumer.h --- linux-3.14.17/include/linux/regulator/consumer.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/regulator/consumer.h 2014-09-09 10:13:52.100980646 +0200 ++++ linux-imx6-3.14/include/linux/regulator/consumer.h 2014-09-11 18:06:11.002073913 +0200 @@ -2,6 +2,7 @@ * consumer.h -- SoC Regulator consumer support. * @@ -228298,7 +228298,7 @@ diff -Nur linux-3.14.17/include/linux/regulator/consumer.h linux-imx6-3.14/inclu diff -Nur linux-3.14.17/include/linux/reset.h linux-imx6-3.14/include/linux/reset.h --- linux-3.14.17/include/linux/reset.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/reset.h 2014-09-09 10:13:52.100980646 +0200 ++++ linux-imx6-3.14/include/linux/reset.h 2014-09-11 18:06:11.002073913 +0200 @@ -12,6 +12,13 @@ void reset_control_put(struct reset_control *rstc); struct reset_control *devm_reset_control_get(struct device *dev, const char *id); @@ -228315,7 +228315,7 @@ diff -Nur linux-3.14.17/include/linux/reset.h linux-imx6-3.14/include/linux/rese #endif diff -Nur linux-3.14.17/include/linux/serial_core.h linux-imx6-3.14/include/linux/serial_core.h --- linux-3.14.17/include/linux/serial_core.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/serial_core.h 2014-09-09 10:13:52.108980711 +0200 ++++ linux-imx6-3.14/include/linux/serial_core.h 2014-09-11 18:06:11.010073945 +0200 @@ -285,6 +285,22 @@ /* * Console helpers. @@ -228341,7 +228341,7 @@ diff -Nur linux-3.14.17/include/linux/serial_core.h linux-imx6-3.14/include/linu void uart_parse_options(char *options, int *baud, int *parity, int *bits, diff -Nur linux-3.14.17/include/linux/skbuff.h linux-imx6-3.14/include/linux/skbuff.h --- linux-3.14.17/include/linux/skbuff.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/skbuff.h 2014-09-09 10:13:52.112980743 +0200 ++++ linux-imx6-3.14/include/linux/skbuff.h 2014-09-11 18:06:11.010073945 +0200 @@ -2038,7 +2038,7 @@ } @@ -228353,7 +228353,7 @@ diff -Nur linux-3.14.17/include/linux/skbuff.h linux-imx6-3.14/include/linux/skb * Returns the &struct page associated with @frag. diff -Nur linux-3.14.17/include/linux/spi/spi.h linux-imx6-3.14/include/linux/spi/spi.h --- linux-3.14.17/include/linux/spi/spi.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/spi/spi.h 2014-09-09 10:13:52.116980776 +0200 ++++ linux-imx6-3.14/include/linux/spi/spi.h 2014-09-11 18:06:11.014073961 +0200 @@ -234,7 +234,7 @@ * @mode_bits: flags understood by this controller driver * @bits_per_word_mask: A mask indicating which values of bits_per_word are @@ -228392,7 +228392,7 @@ diff -Nur linux-3.14.17/include/linux/spi/spi.h linux-imx6-3.14/include/linux/sp * SPI_NBITS_DUAL(2x) and SPI_NBITS_QUAD(4x) to support these three transfer. diff -Nur linux-3.14.17/include/linux/syscalls.h linux-imx6-3.14/include/linux/syscalls.h --- linux-3.14.17/include/linux/syscalls.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/syscalls.h 2014-09-09 10:13:52.120980809 +0200 ++++ linux-imx6-3.14/include/linux/syscalls.h 2014-09-11 18:06:11.022073994 +0200 @@ -744,6 +744,9 @@ int newdfd, const char __user *newname, int flags); asmlinkage long sys_renameat(int olddfd, const char __user * oldname, @@ -228405,7 +228405,7 @@ diff -Nur linux-3.14.17/include/linux/syscalls.h linux-imx6-3.14/include/linux/s asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode); diff -Nur linux-3.14.17/include/linux/usb/chipidea.h linux-imx6-3.14/include/linux/usb/chipidea.h --- linux-3.14.17/include/linux/usb/chipidea.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/usb/chipidea.h 2014-09-09 10:13:52.128980874 +0200 ++++ linux-imx6-3.14/include/linux/usb/chipidea.h 2014-09-11 18:06:11.030074024 +0200 @@ -18,6 +18,7 @@ unsigned long flags; #define CI_HDRC_REGS_SHARED BIT(0) @@ -228431,7 +228431,7 @@ diff -Nur linux-3.14.17/include/linux/usb/chipidea.h linux-imx6-3.14/include/lin #endif diff -Nur linux-3.14.17/include/linux/usb/composite.h linux-imx6-3.14/include/linux/usb/composite.h --- linux-3.14.17/include/linux/usb/composite.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/usb/composite.h 2014-09-09 10:13:52.128980874 +0200 ++++ linux-imx6-3.14/include/linux/usb/composite.h 2014-09-11 18:06:11.034074040 +0200 @@ -92,7 +92,7 @@ * @suspend: Notifies functions when the host stops sending USB traffic. * @resume: Notifies functions when the host restarts USB traffic. @@ -228443,7 +228443,7 @@ diff -Nur linux-3.14.17/include/linux/usb/composite.h linux-imx6-3.14/include/li * diff -Nur linux-3.14.17/include/linux/usb/phy.h linux-imx6-3.14/include/linux/usb/phy.h --- linux-3.14.17/include/linux/usb/phy.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/linux/usb/phy.h 2014-09-09 10:13:52.132980906 +0200 ++++ linux-imx6-3.14/include/linux/usb/phy.h 2014-09-11 18:06:11.034074040 +0200 @@ -111,11 +111,23 @@ int (*set_suspend)(struct usb_phy *x, int suspend); @@ -228511,7 +228511,7 @@ diff -Nur linux-3.14.17/include/linux/usb/phy.h linux-imx6-3.14/include/linux/us static inline int diff -Nur linux-3.14.17/include/net/cfg80211.h linux-imx6-3.14/include/net/cfg80211.h --- linux-3.14.17/include/net/cfg80211.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/cfg80211.h 2014-09-09 10:13:52.152981069 +0200 ++++ linux-imx6-3.14/include/net/cfg80211.h 2014-09-11 18:06:14.058086106 +0200 @@ -1729,7 +1729,7 @@ u8 *ssid; size_t ssid_len; @@ -228541,7 +228541,7 @@ diff -Nur linux-3.14.17/include/net/cfg80211.h linux-imx6-3.14/include/net/cfg80 * cfg80211_notify_new_candidate - notify cfg80211 of a new mesh peer candidate diff -Nur linux-3.14.17/include/net/inetpeer.h linux-imx6-3.14/include/net/inetpeer.h --- linux-3.14.17/include/net/inetpeer.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/inetpeer.h 2014-09-09 10:13:52.156981101 +0200 ++++ linux-imx6-3.14/include/net/inetpeer.h 2014-09-11 18:06:14.066086140 +0200 @@ -41,13 +41,14 @@ struct rcu_head gc_rcu; }; @@ -228584,7 +228584,7 @@ diff -Nur linux-3.14.17/include/net/inetpeer.h linux-imx6-3.14/include/net/inetp #endif /* _NET_INETPEER_H */ diff -Nur linux-3.14.17/include/net/ip.h linux-imx6-3.14/include/net/ip.h --- linux-3.14.17/include/net/ip.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/ip.h 2014-09-09 10:13:52.156981101 +0200 ++++ linux-imx6-3.14/include/net/ip.h 2014-09-11 18:06:14.066086140 +0200 @@ -297,10 +297,9 @@ } } @@ -228636,7 +228636,7 @@ diff -Nur linux-3.14.17/include/net/ip.h linux-imx6-3.14/include/net/ip.h /* diff -Nur linux-3.14.17/include/net/ip_tunnels.h linux-imx6-3.14/include/net/ip_tunnels.h --- linux-3.14.17/include/net/ip_tunnels.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/ip_tunnels.h 2014-09-09 10:13:52.156981101 +0200 ++++ linux-imx6-3.14/include/net/ip_tunnels.h 2014-09-11 18:06:14.066086140 +0200 @@ -40,7 +40,6 @@ struct ip_tunnel_dst { @@ -228647,7 +228647,7 @@ diff -Nur linux-3.14.17/include/net/ip_tunnels.h linux-imx6-3.14/include/net/ip_ struct ip_tunnel { diff -Nur linux-3.14.17/include/net/ipv6.h linux-imx6-3.14/include/net/ipv6.h --- linux-3.14.17/include/net/ipv6.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/ipv6.h 2014-09-09 10:13:52.160981134 +0200 ++++ linux-imx6-3.14/include/net/ipv6.h 2014-09-11 18:06:14.066086140 +0200 @@ -660,6 +660,8 @@ return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); } @@ -228659,7 +228659,7 @@ diff -Nur linux-3.14.17/include/net/ipv6.h linux-imx6-3.14/include/net/ipv6.h /* diff -Nur linux-3.14.17/include/net/mac80211.h linux-imx6-3.14/include/net/mac80211.h --- linux-3.14.17/include/net/mac80211.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/mac80211.h 2014-09-09 10:13:52.164981167 +0200 ++++ linux-imx6-3.14/include/net/mac80211.h 2014-09-11 18:06:14.082086204 +0200 @@ -1895,7 +1895,7 @@ * * Driver informs U-APSD client support by enabling @@ -228707,7 +228707,7 @@ diff -Nur linux-3.14.17/include/net/mac80211.h linux-imx6-3.14/include/net/mac80 int (*napi_poll)(struct ieee80211_hw *hw, int budget); diff -Nur linux-3.14.17/include/net/rtnetlink.h linux-imx6-3.14/include/net/rtnetlink.h --- linux-3.14.17/include/net/rtnetlink.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/rtnetlink.h 2014-09-09 10:13:52.168981200 +0200 ++++ linux-imx6-3.14/include/net/rtnetlink.h 2014-09-11 18:06:14.118086347 +0200 @@ -140,7 +140,7 @@ struct nlattr *tb[]); int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); @@ -228719,7 +228719,7 @@ diff -Nur linux-3.14.17/include/net/rtnetlink.h linux-imx6-3.14/include/net/rtne diff -Nur linux-3.14.17/include/net/secure_seq.h linux-imx6-3.14/include/net/secure_seq.h --- linux-3.14.17/include/net/secure_seq.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/net/secure_seq.h 2014-09-09 10:13:52.172981232 +0200 ++++ linux-imx6-3.14/include/net/secure_seq.h 2014-09-11 18:06:14.142086442 +0200 @@ -3,6 +3,8 @@ #include <linux/types.h> @@ -228731,7 +228731,7 @@ diff -Nur linux-3.14.17/include/net/secure_seq.h linux-imx6-3.14/include/net/sec __be16 dport); diff -Nur linux-3.14.17/include/net/tso.h linux-imx6-3.14/include/net/tso.h --- linux-3.14.17/include/net/tso.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/net/tso.h 2014-09-09 10:13:52.172981232 +0200 ++++ linux-imx6-3.14/include/net/tso.h 2014-09-11 18:06:14.142086442 +0200 @@ -0,0 +1,20 @@ +#ifndef _TSO_H +#define _TSO_H @@ -228755,7 +228755,7 @@ diff -Nur linux-3.14.17/include/net/tso.h linux-imx6-3.14/include/net/tso.h +#endif /* _TSO_H */ diff -Nur linux-3.14.17/include/sound/wm8962.h linux-imx6-3.14/include/sound/wm8962.h --- linux-3.14.17/include/sound/wm8962.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/sound/wm8962.h 2014-09-09 10:13:52.192981395 +0200 ++++ linux-imx6-3.14/include/sound/wm8962.h 2014-09-11 18:06:14.210086714 +0200 @@ -55,6 +55,9 @@ * in a DC measurement configuration. */ @@ -228768,7 +228768,7 @@ diff -Nur linux-3.14.17/include/sound/wm8962.h linux-imx6-3.14/include/sound/wm8 #endif diff -Nur linux-3.14.17/include/trace/events/cpufreq_interactive.h linux-imx6-3.14/include/trace/events/cpufreq_interactive.h --- linux-3.14.17/include/trace/events/cpufreq_interactive.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/trace/events/cpufreq_interactive.h 2014-09-09 10:13:52.192981395 +0200 ++++ linux-imx6-3.14/include/trace/events/cpufreq_interactive.h 2014-09-11 18:06:14.210086714 +0200 @@ -0,0 +1,112 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM cpufreq_interactive @@ -228884,7 +228884,7 @@ diff -Nur linux-3.14.17/include/trace/events/cpufreq_interactive.h linux-imx6-3. +#include <trace/define_trace.h> diff -Nur linux-3.14.17/include/uapi/linux/ipu.h linux-imx6-3.14/include/uapi/linux/ipu.h --- linux-3.14.17/include/uapi/linux/ipu.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/ipu.h 2014-09-09 10:13:52.220981622 +0200 ++++ linux-imx6-3.14/include/uapi/linux/ipu.h 2014-09-11 18:06:14.378087384 +0200 @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved @@ -229170,7 +229170,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/ipu.h linux-imx6-3.14/include/uapi/li +#endif diff -Nur linux-3.14.17/include/uapi/linux/isl29023.h linux-imx6-3.14/include/uapi/linux/isl29023.h --- linux-3.14.17/include/uapi/linux/isl29023.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/isl29023.h 2014-09-09 10:13:52.220981622 +0200 ++++ linux-imx6-3.14/include/uapi/linux/isl29023.h 2014-09-11 18:06:14.378087384 +0200 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -229221,7 +229221,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/isl29023.h linux-imx6-3.14/include/ua +#endif diff -Nur linux-3.14.17/include/uapi/linux/Kbuild linux-imx6-3.14/include/uapi/linux/Kbuild --- linux-3.14.17/include/uapi/linux/Kbuild 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/uapi/linux/Kbuild 2014-09-09 10:13:52.204981492 +0200 ++++ linux-imx6-3.14/include/uapi/linux/Kbuild 2014-09-11 18:06:14.290087032 +0200 @@ -226,6 +226,7 @@ header-y += kvm_para.h endif @@ -229251,7 +229251,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/Kbuild linux-imx6-3.14/include/uapi/l header-y += quota.h diff -Nur linux-3.14.17/include/uapi/linux/mxc_asrc.h linux-imx6-3.14/include/uapi/linux/mxc_asrc.h --- linux-3.14.17/include/uapi/linux/mxc_asrc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/mxc_asrc.h 2014-09-09 10:13:52.224981655 +0200 ++++ linux-imx6-3.14/include/uapi/linux/mxc_asrc.h 2014-09-11 18:06:14.386087416 +0200 @@ -0,0 +1,143 @@ +/* + * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -229398,7 +229398,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/mxc_asrc.h linux-imx6-3.14/include/ua +#endif/* __MXC_ASRC_UAPI_H__ */ diff -Nur linux-3.14.17/include/uapi/linux/mxcfb.h linux-imx6-3.14/include/uapi/linux/mxcfb.h --- linux-3.14.17/include/uapi/linux/mxcfb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/mxcfb.h 2014-09-09 10:13:52.224981655 +0200 ++++ linux-imx6-3.14/include/uapi/linux/mxcfb.h 2014-09-11 18:06:14.386087416 +0200 @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved @@ -229576,7 +229576,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/mxcfb.h linux-imx6-3.14/include/uapi/ +#endif diff -Nur linux-3.14.17/include/uapi/linux/mxc_mlb.h linux-imx6-3.14/include/uapi/linux/mxc_mlb.h --- linux-3.14.17/include/uapi/linux/mxc_mlb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/mxc_mlb.h 2014-09-09 10:13:52.224981655 +0200 ++++ linux-imx6-3.14/include/uapi/linux/mxc_mlb.h 2014-09-11 18:06:14.386087416 +0200 @@ -0,0 +1,55 @@ +/* + * mxc_mlb.h @@ -229635,7 +229635,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/mxc_mlb.h linux-imx6-3.14/include/uap +#endif /* _MXC_MLB_H */ diff -Nur linux-3.14.17/include/uapi/linux/mxc_v4l2.h linux-imx6-3.14/include/uapi/linux/mxc_v4l2.h --- linux-3.14.17/include/uapi/linux/mxc_v4l2.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/mxc_v4l2.h 2014-09-09 10:13:52.224981655 +0200 ++++ linux-imx6-3.14/include/uapi/linux/mxc_v4l2.h 2014-09-11 18:06:14.386087416 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. All Rights Reserved @@ -229695,7 +229695,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/mxc_v4l2.h linux-imx6-3.14/include/ua +#endif diff -Nur linux-3.14.17/include/uapi/linux/ptp_clock.h linux-imx6-3.14/include/uapi/linux/ptp_clock.h --- linux-3.14.17/include/uapi/linux/ptp_clock.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/include/uapi/linux/ptp_clock.h 2014-09-09 10:13:52.236981753 +0200 ++++ linux-imx6-3.14/include/uapi/linux/ptp_clock.h 2014-09-11 18:06:14.414087528 +0200 @@ -50,7 +50,8 @@ int n_ext_ts; /* Number of external time stamp channels. */ int n_per_out; /* Number of programmable periodic signals. */ @@ -229758,7 +229758,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/ptp_clock.h linux-imx6-3.14/include/u struct ptp_clock_time t; /* Time event occured. */ diff -Nur linux-3.14.17/include/uapi/linux/pxp_device.h linux-imx6-3.14/include/uapi/linux/pxp_device.h --- linux-3.14.17/include/uapi/linux/pxp_device.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/pxp_device.h 2014-09-09 10:13:52.236981753 +0200 ++++ linux-imx6-3.14/include/uapi/linux/pxp_device.h 2014-09-11 18:06:14.414087528 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2013-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -229825,7 +229825,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/pxp_device.h linux-imx6-3.14/include/ +#endif diff -Nur linux-3.14.17/include/uapi/linux/pxp_dma.h linux-imx6-3.14/include/uapi/linux/pxp_dma.h --- linux-3.14.17/include/uapi/linux/pxp_dma.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/uapi/linux/pxp_dma.h 2014-09-09 10:13:52.236981753 +0200 ++++ linux-imx6-3.14/include/uapi/linux/pxp_dma.h 2014-09-11 18:06:14.414087528 +0200 @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2013-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -230002,7 +230002,7 @@ diff -Nur linux-3.14.17/include/uapi/linux/pxp_dma.h linux-imx6-3.14/include/uap +#endif diff -Nur linux-3.14.17/include/video/mxc_edid.h linux-imx6-3.14/include/video/mxc_edid.h --- linux-3.14.17/include/video/mxc_edid.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/video/mxc_edid.h 2014-09-09 10:13:52.256981916 +0200 ++++ linux-imx6-3.14/include/video/mxc_edid.h 2014-09-11 18:06:14.438087624 +0200 @@ -0,0 +1,105 @@ +/* + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -230111,7 +230111,7 @@ diff -Nur linux-3.14.17/include/video/mxc_edid.h linux-imx6-3.14/include/video/m +#endif diff -Nur linux-3.14.17/include/video/mxc_hdmi.h linux-imx6-3.14/include/video/mxc_hdmi.h --- linux-3.14.17/include/video/mxc_hdmi.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/include/video/mxc_hdmi.h 2014-09-09 10:13:52.256981916 +0200 ++++ linux-imx6-3.14/include/video/mxc_hdmi.h 2014-09-11 18:06:14.438087624 +0200 @@ -0,0 +1,1027 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. @@ -231142,7 +231142,7 @@ diff -Nur linux-3.14.17/include/video/mxc_hdmi.h linux-imx6-3.14/include/video/m +#endif /* __MXC_HDMI_H__ */ diff -Nur linux-3.14.17/init/main.c linux-imx6-3.14/init/main.c --- linux-3.14.17/init/main.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/init/main.c 2014-09-09 10:13:52.264981980 +0200 ++++ linux-imx6-3.14/init/main.c 2014-09-11 18:06:14.446087655 +0200 @@ -617,10 +617,6 @@ if (efi_enabled(EFI_RUNTIME_SERVICES)) efi_enter_virtual_mode(); @@ -231156,7 +231156,7 @@ diff -Nur linux-3.14.17/init/main.c linux-imx6-3.14/init/main.c fork_init(totalram_pages); diff -Nur linux-3.14.17/kernel/cpu.c linux-imx6-3.14/kernel/cpu.c --- linux-3.14.17/kernel/cpu.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/cpu.c 2014-09-09 10:13:52.272982047 +0200 ++++ linux-imx6-3.14/kernel/cpu.c 2014-09-11 18:06:14.486087815 +0200 @@ -722,3 +722,22 @@ { cpumask_copy(to_cpumask(cpu_online_bits), src); @@ -231182,7 +231182,7 @@ diff -Nur linux-3.14.17/kernel/cpu.c linux-imx6-3.14/kernel/cpu.c +EXPORT_SYMBOL_GPL(idle_notifier_call_chain); diff -Nur linux-3.14.17/kernel/irq/manage.c linux-imx6-3.14/kernel/irq/manage.c --- linux-3.14.17/kernel/irq/manage.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/irq/manage.c 2014-09-09 10:13:52.284982143 +0200 ++++ linux-imx6-3.14/kernel/irq/manage.c 2014-09-11 18:06:14.630088390 +0200 @@ -32,24 +32,10 @@ early_param("threadirqs", setup_forced_irqthreads); #endif @@ -231273,7 +231273,7 @@ diff -Nur linux-3.14.17/kernel/irq/manage.c linux-imx6-3.14/kernel/irq/manage.c diff -Nur linux-3.14.17/kernel/printk/printk.c linux-imx6-3.14/kernel/printk/printk.c --- linux-3.14.17/kernel/printk/printk.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/printk/printk.c 2014-09-09 10:13:52.296982242 +0200 ++++ linux-imx6-3.14/kernel/printk/printk.c 2014-09-11 18:06:14.678088581 +0200 @@ -2468,7 +2468,7 @@ preempt_enable(); } @@ -231285,7 +231285,7 @@ diff -Nur linux-3.14.17/kernel/printk/printk.c linux-imx6-3.14/kernel/printk/pri va_list args; diff -Nur linux-3.14.17/kernel/relay.c linux-imx6-3.14/kernel/relay.c --- linux-3.14.17/kernel/relay.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/relay.c 2014-09-09 10:13:52.300982275 +0200 ++++ linux-imx6-3.14/kernel/relay.c 2014-09-11 18:06:14.746088855 +0200 @@ -227,7 +227,7 @@ * relay_remove_buf - remove a channel buffer * @kref: target kernel reference that contains the relay buffer @@ -231297,7 +231297,7 @@ diff -Nur linux-3.14.17/kernel/relay.c linux-imx6-3.14/kernel/relay.c */ diff -Nur linux-3.14.17/kernel/sched/core.c linux-imx6-3.14/kernel/sched/core.c --- linux-3.14.17/kernel/sched/core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/sched/core.c 2014-09-09 10:13:52.300982275 +0200 ++++ linux-imx6-3.14/kernel/sched/core.c 2014-09-11 18:06:14.750088870 +0200 @@ -1322,7 +1322,7 @@ * leave kernel. */ @@ -231309,7 +231309,7 @@ diff -Nur linux-3.14.17/kernel/sched/core.c linux-imx6-3.14/kernel/sched/core.c } diff -Nur linux-3.14.17/kernel/sched/deadline.c linux-imx6-3.14/kernel/sched/deadline.c --- linux-3.14.17/kernel/sched/deadline.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/sched/deadline.c 2014-09-09 10:13:52.300982275 +0200 ++++ linux-imx6-3.14/kernel/sched/deadline.c 2014-09-11 18:06:14.754088885 +0200 @@ -329,7 +329,7 @@ if (!lag_once) { @@ -231321,7 +231321,7 @@ diff -Nur linux-3.14.17/kernel/sched/deadline.c linux-imx6-3.14/kernel/sched/dea dl_se->runtime = pi_se->dl_runtime; diff -Nur linux-3.14.17/kernel/sched/rt.c linux-imx6-3.14/kernel/sched/rt.c --- linux-3.14.17/kernel/sched/rt.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/sched/rt.c 2014-09-09 10:13:52.304982306 +0200 ++++ linux-imx6-3.14/kernel/sched/rt.c 2014-09-11 18:06:14.754088885 +0200 @@ -837,7 +837,7 @@ if (!once) { @@ -231333,7 +231333,7 @@ diff -Nur linux-3.14.17/kernel/sched/rt.c linux-imx6-3.14/kernel/sched/rt.c /* diff -Nur linux-3.14.17/kernel/signal.c linux-imx6-3.14/kernel/signal.c --- linux-3.14.17/kernel/signal.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/signal.c 2014-09-09 10:13:52.304982306 +0200 ++++ linux-imx6-3.14/kernel/signal.c 2014-09-11 18:06:14.754088885 +0200 @@ -2382,7 +2382,7 @@ * @regs: user register state * @stepping: nonzero if debugger single-step or block-step in use @@ -231345,7 +231345,7 @@ diff -Nur linux-3.14.17/kernel/signal.c linux-imx6-3.14/kernel/signal.c * is set in @ka->sa.sa_flags. Tracing is notified. diff -Nur linux-3.14.17/kernel/time/clockevents.c linux-imx6-3.14/kernel/time/clockevents.c --- linux-3.14.17/kernel/time/clockevents.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/time/clockevents.c 2014-09-09 10:13:52.308982339 +0200 ++++ linux-imx6-3.14/kernel/time/clockevents.c 2014-09-11 18:06:14.758088900 +0200 @@ -146,8 +146,7 @@ { /* Nothing to do if we already reached the limit */ @@ -231372,7 +231372,7 @@ diff -Nur linux-3.14.17/kernel/time/clockevents.c linux-imx6-3.14/kernel/time/cl diff -Nur linux-3.14.17/kernel/time/sched_clock.c linux-imx6-3.14/kernel/time/sched_clock.c --- linux-3.14.17/kernel/time/sched_clock.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/time/sched_clock.c 2014-09-09 10:13:52.308982339 +0200 ++++ linux-imx6-3.14/kernel/time/sched_clock.c 2014-09-11 18:06:15.154090207 +0200 @@ -204,8 +204,7 @@ static int sched_clock_suspend(void) @@ -231393,7 +231393,7 @@ diff -Nur linux-3.14.17/kernel/time/sched_clock.c linux-imx6-3.14/kernel/time/sc diff -Nur linux-3.14.17/kernel/trace/trace.c linux-imx6-3.14/kernel/trace/trace.c --- linux-3.14.17/kernel/trace/trace.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/trace/trace.c 2014-09-09 10:13:52.316982405 +0200 ++++ linux-imx6-3.14/kernel/trace/trace.c 2014-09-11 18:06:15.162090371 +0200 @@ -811,7 +811,7 @@ { trace_clock_local, "local", 1 }, { trace_clock_global, "global", 1 }, @@ -231405,7 +231405,7 @@ diff -Nur linux-3.14.17/kernel/trace/trace.c linux-imx6-3.14/kernel/trace/trace. }; diff -Nur linux-3.14.17/kernel/trace/trace_clock.c linux-imx6-3.14/kernel/trace/trace_clock.c --- linux-3.14.17/kernel/trace/trace_clock.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/kernel/trace/trace_clock.c 2014-09-09 10:13:52.316982405 +0200 ++++ linux-imx6-3.14/kernel/trace/trace_clock.c 2014-09-11 18:06:15.162090371 +0200 @@ -59,14 +59,13 @@ /* @@ -231427,7 +231427,7 @@ diff -Nur linux-3.14.17/kernel/trace/trace_clock.c linux-imx6-3.14/kernel/trace/ /* diff -Nur linux-3.14.17/lib/btree.c linux-imx6-3.14/lib/btree.c --- linux-3.14.17/lib/btree.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/lib/btree.c 2014-09-09 10:13:52.324982470 +0200 ++++ linux-imx6-3.14/lib/btree.c 2014-09-11 18:06:15.278090964 +0200 @@ -198,7 +198,6 @@ void btree_destroy(struct btree_head *head) @@ -231438,7 +231438,7 @@ diff -Nur linux-3.14.17/lib/btree.c linux-imx6-3.14/lib/btree.c } diff -Nur linux-3.14.17/linaro/configs/android.conf linux-imx6-3.14/linaro/configs/android.conf --- linux-3.14.17/linaro/configs/android.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/android.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/android.conf 2014-09-11 18:06:15.338091214 +0200 @@ -0,0 +1,42 @@ +CONFIG_IPV6=y +# CONFIG_IPV6_SIT is not set @@ -231484,7 +231484,7 @@ diff -Nur linux-3.14.17/linaro/configs/android.conf linux-imx6-3.14/linaro/confi +CONFIG_TUN=y diff -Nur linux-3.14.17/linaro/configs/arndale.conf linux-imx6-3.14/linaro/configs/arndale.conf --- linux-3.14.17/linaro/configs/arndale.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/arndale.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/arndale.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,66 @@ +CONFIG_KALLSYMS_ALL=y +CONFIG_PARTITION_ADVANCED=y @@ -231554,7 +231554,7 @@ diff -Nur linux-3.14.17/linaro/configs/arndale.conf linux-imx6-3.14/linaro/confi +CONFIG_TUN=y diff -Nur linux-3.14.17/linaro/configs/bigendian.conf linux-imx6-3.14/linaro/configs/bigendian.conf --- linux-3.14.17/linaro/configs/bigendian.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/bigendian.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/bigendian.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,4 @@ +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_CPU_ENDIAN_BE8=y @@ -231562,7 +231562,7 @@ diff -Nur linux-3.14.17/linaro/configs/bigendian.conf linux-imx6-3.14/linaro/con +# CONFIG_MMC_DW_IDMAC is not set diff -Nur linux-3.14.17/linaro/configs/big-LITTLE-IKS.conf linux-imx6-3.14/linaro/configs/big-LITTLE-IKS.conf --- linux-3.14.17/linaro/configs/big-LITTLE-IKS.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/big-LITTLE-IKS.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/big-LITTLE-IKS.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,5 @@ +CONFIG_BIG_LITTLE=y +CONFIG_BL_SWITCHER=y @@ -231571,12 +231571,12 @@ diff -Nur linux-3.14.17/linaro/configs/big-LITTLE-IKS.conf linux-imx6-3.14/linar +CONFIG_CPU_FREQ_GOV_USERSPACE=y diff -Nur linux-3.14.17/linaro/configs/debug.conf linux-imx6-3.14/linaro/configs/debug.conf --- linux-3.14.17/linaro/configs/debug.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/debug.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/debug.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1 @@ +CONFIG_PROVE_LOCKING=y diff -Nur linux-3.14.17/linaro/configs/distribution.conf linux-imx6-3.14/linaro/configs/distribution.conf --- linux-3.14.17/linaro/configs/distribution.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/distribution.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/distribution.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,49 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_CGROUPS=y @@ -231629,7 +231629,7 @@ diff -Nur linux-3.14.17/linaro/configs/distribution.conf linux-imx6-3.14/linaro/ +CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y diff -Nur linux-3.14.17/linaro/configs/highbank.conf linux-imx6-3.14/linaro/configs/highbank.conf --- linux-3.14.17/linaro/configs/highbank.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/highbank.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/highbank.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,40 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_NO_HZ=y @@ -231673,7 +231673,7 @@ diff -Nur linux-3.14.17/linaro/configs/highbank.conf linux-imx6-3.14/linaro/conf +CONFIG_PL330_DMA=y diff -Nur linux-3.14.17/linaro/configs/kvm-guest.conf linux-imx6-3.14/linaro/configs/kvm-guest.conf --- linux-3.14.17/linaro/configs/kvm-guest.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/kvm-guest.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/kvm-guest.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,11 @@ +CONFIG_BALLOON_COMPACTION=y +CONFIG_VIRTIO_BLK=y @@ -231688,7 +231688,7 @@ diff -Nur linux-3.14.17/linaro/configs/kvm-guest.conf linux-imx6-3.14/linaro/con +# CONFIG_THUMB2_KERNEL is not set diff -Nur linux-3.14.17/linaro/configs/kvm-host.conf linux-imx6-3.14/linaro/configs/kvm-host.conf --- linux-3.14.17/linaro/configs/kvm-host.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/kvm-host.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/kvm-host.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,11 @@ +CONFIG_VIRTUALIZATION=y +CONFIG_ARM_LPAE=y @@ -231703,7 +231703,7 @@ diff -Nur linux-3.14.17/linaro/configs/kvm-host.conf linux-imx6-3.14/linaro/conf +CONFIG_BLK_DEV_NBD=m diff -Nur linux-3.14.17/linaro/configs/linaro-base.conf linux-imx6-3.14/linaro/configs/linaro-base.conf --- linux-3.14.17/linaro/configs/linaro-base.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/linaro-base.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/linaro-base.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,115 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y @@ -231822,7 +231822,7 @@ diff -Nur linux-3.14.17/linaro/configs/linaro-base.conf linux-imx6-3.14/linaro/c +CONFIG_EXT4_FS_SECURITY=y diff -Nur linux-3.14.17/linaro/configs/omap4.conf linux-imx6-3.14/linaro/configs/omap4.conf --- linux-3.14.17/linaro/configs/omap4.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/omap4.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/omap4.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,196 @@ +CONFIG_EXPERT=y +CONFIG_KPROBES=y @@ -232022,7 +232022,7 @@ diff -Nur linux-3.14.17/linaro/configs/omap4.conf linux-imx6-3.14/linaro/configs +# CONFIG_CPU_FREQ is not set diff -Nur linux-3.14.17/linaro/configs/preempt-rt.conf linux-imx6-3.14/linaro/configs/preempt-rt.conf --- linux-3.14.17/linaro/configs/preempt-rt.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/preempt-rt.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/preempt-rt.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,4 @@ +CONFIG_PREEMPT=y +CONFIG_PREEMPT_RT_FULL=y @@ -232030,7 +232030,7 @@ diff -Nur linux-3.14.17/linaro/configs/preempt-rt.conf linux-imx6-3.14/linaro/co +# CONFIG_CPU_FREQ is not set diff -Nur linux-3.14.17/linaro/configs/vexpress64.conf linux-imx6-3.14/linaro/configs/vexpress64.conf --- linux-3.14.17/linaro/configs/vexpress64.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/vexpress64.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/vexpress64.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,56 @@ +CONFIG_ARCH_VEXPRESS=y +CONFIG_SMP=y @@ -232090,7 +232090,7 @@ diff -Nur linux-3.14.17/linaro/configs/vexpress64.conf linux-imx6-3.14/linaro/co +CONFIG_ARM64_CRYPTO=y diff -Nur linux-3.14.17/linaro/configs/vexpress.conf linux-imx6-3.14/linaro/configs/vexpress.conf --- linux-3.14.17/linaro/configs/vexpress.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/vexpress.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/vexpress.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,64 @@ +CONFIG_ARCH_VEXPRESS=y +CONFIG_ARCH_VEXPRESS_CA9X4=y @@ -232158,12 +232158,12 @@ diff -Nur linux-3.14.17/linaro/configs/vexpress.conf linux-imx6-3.14/linaro/conf +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y diff -Nur linux-3.14.17/linaro/configs/vexpress-tuning.conf linux-imx6-3.14/linaro/configs/vexpress-tuning.conf --- linux-3.14.17/linaro/configs/vexpress-tuning.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/vexpress-tuning.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/vexpress-tuning.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1 @@ +# CONFIG_PROVE_LOCKING is not set diff -Nur linux-3.14.17/linaro/configs/xen.conf linux-imx6-3.14/linaro/configs/xen.conf --- linux-3.14.17/linaro/configs/xen.conf 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/linaro/configs/xen.conf 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/linaro/configs/xen.conf 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,7 @@ +CONFIG_XEN=y +CONFIG_XEN_NETDEV_FRONTEND=y @@ -232174,7 +232174,7 @@ diff -Nur linux-3.14.17/linaro/configs/xen.conf linux-imx6-3.14/linaro/configs/x +CONFIG_XEN_COMPAT_XENFS=y diff -Nur linux-3.14.17/MAINTAINERS linux-imx6-3.14/MAINTAINERS --- linux-3.14.17/MAINTAINERS 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/MAINTAINERS 2014-09-09 10:13:47.124940070 +0200 ++++ linux-imx6-3.14/MAINTAINERS 2014-09-11 18:05:52.461999847 +0200 @@ -5511,6 +5511,14 @@ F: drivers/net/macvlan.c F: include/linux/if_macvlan.h @@ -232192,7 +232192,7 @@ diff -Nur linux-3.14.17/MAINTAINERS linux-imx6-3.14/MAINTAINERS W: http://www.kernel.org/doc/man-pages diff -Nur linux-3.14.17/Makefile linux-imx6-3.14/Makefile --- linux-3.14.17/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/Makefile 2014-09-09 10:20:45.272103604 +0200 ++++ linux-imx6-3.14/Makefile 2014-09-11 18:09:02.718753157 +0200 @@ -639,8 +639,6 @@ endif endif @@ -232204,7 +232204,7 @@ diff -Nur linux-3.14.17/Makefile linux-imx6-3.14/Makefile KBUILD_AFLAGS += -Wa,--gdwarf-2 diff -Nur linux-3.14.17/mm/cma.c linux-imx6-3.14/mm/cma.c --- linux-3.14.17/mm/cma.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/mm/cma.c 2014-09-09 10:13:52.348982665 +0200 ++++ linux-imx6-3.14/mm/cma.c 2014-09-11 18:06:15.342091230 +0200 @@ -0,0 +1,356 @@ +/* + * Contiguous Memory Allocator @@ -232564,7 +232564,7 @@ diff -Nur linux-3.14.17/mm/cma.c linux-imx6-3.14/mm/cma.c +} diff -Nur linux-3.14.17/mm/hugetlb.c linux-imx6-3.14/mm/hugetlb.c --- linux-3.14.17/mm/hugetlb.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/hugetlb.c 2014-09-09 10:13:52.348982665 +0200 ++++ linux-imx6-3.14/mm/hugetlb.c 2014-09-11 18:06:15.346091247 +0200 @@ -2422,7 +2422,6 @@ } else { if (cow) @@ -232575,7 +232575,7 @@ diff -Nur linux-3.14.17/mm/hugetlb.c linux-imx6-3.14/mm/hugetlb.c page_dup_rmap(ptepage); diff -Nur linux-3.14.17/mm/Kconfig linux-imx6-3.14/mm/Kconfig --- linux-3.14.17/mm/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/Kconfig 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/mm/Kconfig 2014-09-11 18:06:15.342091230 +0200 @@ -514,6 +514,17 @@ processing calls such as dma_alloc_from_contiguous(). This option does not affect warning and error messages. @@ -232596,7 +232596,7 @@ diff -Nur linux-3.14.17/mm/Kconfig linux-imx6-3.14/mm/Kconfig default n diff -Nur linux-3.14.17/mm/Makefile linux-imx6-3.14/mm/Makefile --- linux-3.14.17/mm/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/Makefile 2014-09-09 10:13:52.344982633 +0200 ++++ linux-imx6-3.14/mm/Makefile 2014-09-11 18:06:15.342091230 +0200 @@ -61,3 +61,4 @@ obj-$(CONFIG_MEMORY_ISOLATION) += page_isolation.o obj-$(CONFIG_ZBUD) += zbud.o @@ -232604,7 +232604,7 @@ diff -Nur linux-3.14.17/mm/Makefile linux-imx6-3.14/mm/Makefile +obj-$(CONFIG_CMA) += cma.o diff -Nur linux-3.14.17/mm/memblock.c linux-imx6-3.14/mm/memblock.c --- linux-3.14.17/mm/memblock.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/memblock.c 2014-09-09 10:13:52.352982698 +0200 ++++ linux-imx6-3.14/mm/memblock.c 2014-09-11 18:06:15.346091247 +0200 @@ -975,22 +975,35 @@ } #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ @@ -232647,7 +232647,7 @@ diff -Nur linux-3.14.17/mm/memblock.c linux-imx6-3.14/mm/memblock.c return memblock_alloc_base_nid(size, align, MEMBLOCK_ALLOC_ACCESSIBLE, nid); diff -Nur linux-3.14.17/mm/memcontrol.c linux-imx6-3.14/mm/memcontrol.c --- linux-3.14.17/mm/memcontrol.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/memcontrol.c 2014-09-09 10:13:52.352982698 +0200 ++++ linux-imx6-3.14/mm/memcontrol.c 2014-09-11 18:06:15.346091247 +0200 @@ -5670,12 +5670,8 @@ { struct mem_cgroup_eventfd_list *ev; @@ -232663,7 +232663,7 @@ diff -Nur linux-3.14.17/mm/memcontrol.c linux-imx6-3.14/mm/memcontrol.c diff -Nur linux-3.14.17/mm/page_alloc.c linux-imx6-3.14/mm/page_alloc.c --- linux-3.14.17/mm/page_alloc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/page_alloc.c 2014-09-09 10:13:52.360982764 +0200 ++++ linux-imx6-3.14/mm/page_alloc.c 2014-09-11 18:06:15.354091278 +0200 @@ -2434,7 +2434,7 @@ gfp_to_alloc_flags(gfp_t gfp_mask) { @@ -232703,7 +232703,7 @@ diff -Nur linux-3.14.17/mm/page_alloc.c linux-imx6-3.14/mm/page_alloc.c } else if (unlikely(rt_task(current)) && !in_interrupt()) diff -Nur linux-3.14.17/mm/page-writeback.c linux-imx6-3.14/mm/page-writeback.c --- linux-3.14.17/mm/page-writeback.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/page-writeback.c 2014-09-09 10:13:52.356982731 +0200 ++++ linux-imx6-3.14/mm/page-writeback.c 2014-09-11 18:06:15.354091278 +0200 @@ -1324,9 +1324,9 @@ *bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh); @@ -232719,7 +232719,7 @@ diff -Nur linux-3.14.17/mm/page-writeback.c linux-imx6-3.14/mm/page-writeback.c * In order to avoid the stacked BDI deadlock we need diff -Nur linux-3.14.17/mm/slab_common.c linux-imx6-3.14/mm/slab_common.c --- linux-3.14.17/mm/slab_common.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/mm/slab_common.c 2014-09-09 10:13:52.364982796 +0200 ++++ linux-imx6-3.14/mm/slab_common.c 2014-09-11 18:06:15.358091295 +0200 @@ -56,7 +56,7 @@ continue; } @@ -232731,7 +232731,7 @@ diff -Nur linux-3.14.17/mm/slab_common.c linux-imx6-3.14/mm/slab_common.c * caches. We have control over memcg naming, and if there diff -Nur linux-3.14.17/net/atm/svc.c linux-imx6-3.14/net/atm/svc.c --- linux-3.14.17/net/atm/svc.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/atm/svc.c 2014-09-09 10:13:52.376982894 +0200 ++++ linux-imx6-3.14/net/atm/svc.c 2014-09-11 18:06:15.426091565 +0200 @@ -263,17 +263,11 @@ goto out; } @@ -232754,7 +232754,7 @@ diff -Nur linux-3.14.17/net/atm/svc.c linux-imx6-3.14/net/atm/svc.c sock->state = SS_CONNECTED; diff -Nur linux-3.14.17/net/batman-adv/fragmentation.c linux-imx6-3.14/net/batman-adv/fragmentation.c --- linux-3.14.17/net/batman-adv/fragmentation.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/batman-adv/fragmentation.c 2014-09-09 10:13:52.380982927 +0200 ++++ linux-imx6-3.14/net/batman-adv/fragmentation.c 2014-09-11 18:06:15.434091598 +0200 @@ -128,7 +128,6 @@ { struct batadv_frag_table_entry *chain; @@ -232783,7 +232783,7 @@ diff -Nur linux-3.14.17/net/batman-adv/fragmentation.c linux-imx6-3.14/net/batma ret = true; diff -Nur linux-3.14.17/net/compat.c linux-imx6-3.14/net/compat.c --- linux-3.14.17/net/compat.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/compat.c 2014-09-09 10:13:52.404983122 +0200 ++++ linux-imx6-3.14/net/compat.c 2014-09-11 18:06:15.510091900 +0200 @@ -85,7 +85,7 @@ { int tot_len; @@ -232810,7 +232810,7 @@ diff -Nur linux-3.14.17/net/compat.c linux-imx6-3.14/net/compat.c (struct compat_iovec __user *)kern_msg->msg_iov, diff -Nur linux-3.14.17/net/core/dev.c linux-imx6-3.14/net/core/dev.c --- linux-3.14.17/net/core/dev.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/dev.c 2014-09-09 10:13:52.404983122 +0200 ++++ linux-imx6-3.14/net/core/dev.c 2014-09-11 18:06:15.510091900 +0200 @@ -3453,7 +3453,7 @@ * @rx_handler: receive handler to register * @rx_handler_data: data pointer that is used by rx handler @@ -232822,7 +232822,7 @@ diff -Nur linux-3.14.17/net/core/dev.c linux-imx6-3.14/net/core/dev.c * diff -Nur linux-3.14.17/net/core/iovec.c linux-imx6-3.14/net/core/iovec.c --- linux-3.14.17/net/core/iovec.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/iovec.c 2014-09-09 10:13:52.404983122 +0200 ++++ linux-imx6-3.14/net/core/iovec.c 2014-09-11 18:06:15.514091916 +0200 @@ -39,7 +39,7 @@ { int size, ct, err; @@ -232858,7 +232858,7 @@ diff -Nur linux-3.14.17/net/core/iovec.c linux-imx6-3.14/net/core/iovec.c offset -= iov->iov_len; diff -Nur linux-3.14.17/net/core/Makefile linux-imx6-3.14/net/core/Makefile --- linux-3.14.17/net/core/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/Makefile 2014-09-09 10:13:52.404983122 +0200 ++++ linux-imx6-3.14/net/core/Makefile 2014-09-11 18:06:15.510091900 +0200 @@ -9,7 +9,7 @@ obj-y += dev.o ethtool.o dev_addr_lists.o dst.o netevent.o \ @@ -232870,7 +232870,7 @@ diff -Nur linux-3.14.17/net/core/Makefile linux-imx6-3.14/net/core/Makefile obj-y += net-sysfs.o diff -Nur linux-3.14.17/net/core/rtnetlink.c linux-imx6-3.14/net/core/rtnetlink.c --- linux-3.14.17/net/core/rtnetlink.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/rtnetlink.c 2014-09-09 10:13:52.408983154 +0200 ++++ linux-imx6-3.14/net/core/rtnetlink.c 2014-09-11 18:06:15.518091933 +0200 @@ -1156,73 +1156,7 @@ return -EMSGSIZE; } @@ -233018,7 +233018,7 @@ diff -Nur linux-3.14.17/net/core/rtnetlink.c linux-imx6-3.14/net/core/rtnetlink. struct net *net; diff -Nur linux-3.14.17/net/core/secure_seq.c linux-imx6-3.14/net/core/secure_seq.c --- linux-3.14.17/net/core/secure_seq.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/secure_seq.c 2014-09-09 10:13:52.408983154 +0200 ++++ linux-imx6-3.14/net/core/secure_seq.c 2014-09-11 18:06:15.518091933 +0200 @@ -85,6 +85,31 @@ #endif @@ -233053,7 +233053,7 @@ diff -Nur linux-3.14.17/net/core/secure_seq.c linux-imx6-3.14/net/core/secure_se __be16 sport, __be16 dport) diff -Nur linux-3.14.17/net/core/skbuff.c linux-imx6-3.14/net/core/skbuff.c --- linux-3.14.17/net/core/skbuff.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/core/skbuff.c 2014-09-09 10:13:52.408983154 +0200 ++++ linux-imx6-3.14/net/core/skbuff.c 2014-09-11 18:06:15.518091933 +0200 @@ -2968,9 +2968,9 @@ tail = nskb; @@ -233067,7 +233067,7 @@ diff -Nur linux-3.14.17/net/core/skbuff.c linux-imx6-3.14/net/core/skbuff.c nskb->data - tnl_hlen, diff -Nur linux-3.14.17/net/core/tso.c linux-imx6-3.14/net/core/tso.c --- linux-3.14.17/net/core/tso.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/net/core/tso.c 2014-09-09 10:13:52.412983186 +0200 ++++ linux-imx6-3.14/net/core/tso.c 2014-09-11 18:06:15.522091948 +0200 @@ -0,0 +1,72 @@ +#include <net/ip.h> +#include <net/tso.h> @@ -233143,7 +233143,7 @@ diff -Nur linux-3.14.17/net/core/tso.c linux-imx6-3.14/net/core/tso.c +} diff -Nur linux-3.14.17/net/ieee802154/Kconfig linux-imx6-3.14/net/ieee802154/Kconfig --- linux-3.14.17/net/ieee802154/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ieee802154/Kconfig 2014-09-09 10:13:52.420983253 +0200 ++++ linux-imx6-3.14/net/ieee802154/Kconfig 2014-09-11 18:06:15.578092171 +0200 @@ -15,7 +15,7 @@ depends on IEEE802154 && IPV6 select 6LOWPAN_IPHC @@ -233155,7 +233155,7 @@ diff -Nur linux-3.14.17/net/ieee802154/Kconfig linux-imx6-3.14/net/ieee802154/Kc tristate diff -Nur linux-3.14.17/net/ipv4/igmp.c linux-imx6-3.14/net/ipv4/igmp.c --- linux-3.14.17/net/ipv4/igmp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/igmp.c 2014-09-09 10:13:52.428983317 +0200 ++++ linux-imx6-3.14/net/ipv4/igmp.c 2014-09-11 18:06:15.586092204 +0200 @@ -369,7 +369,7 @@ pip->saddr = fl4.saddr; pip->protocol = IPPROTO_IGMP; @@ -233176,7 +233176,7 @@ diff -Nur linux-3.14.17/net/ipv4/igmp.c linux-imx6-3.14/net/ipv4/igmp.c ((u8 *)&iph[1])[2] = 0; diff -Nur linux-3.14.17/net/ipv4/inetpeer.c linux-imx6-3.14/net/ipv4/inetpeer.c --- linux-3.14.17/net/ipv4/inetpeer.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/inetpeer.c 2014-09-09 10:13:52.428983317 +0200 ++++ linux-imx6-3.14/net/ipv4/inetpeer.c 2014-09-11 18:06:15.586092204 +0200 @@ -26,7 +26,20 @@ * Theory of operations. * We keep one entry for each peer IP address. The nodes contains long-living @@ -233219,7 +233219,7 @@ diff -Nur linux-3.14.17/net/ipv4/inetpeer.c linux-imx6-3.14/net/ipv4/inetpeer.c /* 60*HZ is arbitrary, but chosen enough high so that the first diff -Nur linux-3.14.17/net/ipv4/ipmr.c linux-imx6-3.14/net/ipv4/ipmr.c --- linux-3.14.17/net/ipv4/ipmr.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/ipmr.c 2014-09-09 10:13:52.432983349 +0200 ++++ linux-imx6-3.14/net/ipv4/ipmr.c 2014-09-11 18:06:15.590092220 +0200 @@ -1663,7 +1663,7 @@ iph->protocol = IPPROTO_IPIP; iph->ihl = 5; @@ -233231,7 +233231,7 @@ diff -Nur linux-3.14.17/net/ipv4/ipmr.c linux-imx6-3.14/net/ipv4/ipmr.c memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); diff -Nur linux-3.14.17/net/ipv4/ip_output.c linux-imx6-3.14/net/ipv4/ip_output.c --- linux-3.14.17/net/ipv4/ip_output.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/ip_output.c 2014-09-09 10:13:52.428983317 +0200 ++++ linux-imx6-3.14/net/ipv4/ip_output.c 2014-09-11 18:06:15.590092220 +0200 @@ -148,7 +148,7 @@ iph->daddr = (opt && opt->opt.srr ? opt->opt.faddr : daddr); iph->saddr = saddr; @@ -233262,7 +233262,7 @@ diff -Nur linux-3.14.17/net/ipv4/ip_output.c linux-imx6-3.14/net/ipv4/ip_output. iph->ihl += opt->optlen>>2; diff -Nur linux-3.14.17/net/ipv4/ip_tunnel.c linux-imx6-3.14/net/ipv4/ip_tunnel.c --- linux-3.14.17/net/ipv4/ip_tunnel.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/ip_tunnel.c 2014-09-09 10:13:52.428983317 +0200 ++++ linux-imx6-3.14/net/ipv4/ip_tunnel.c 2014-09-11 18:06:15.590092220 +0200 @@ -69,25 +69,23 @@ } @@ -233352,7 +233352,7 @@ diff -Nur linux-3.14.17/net/ipv4/ip_tunnel.c linux-imx6-3.14/net/ipv4/ip_tunnel. if (rt->dst.dev == dev) { diff -Nur linux-3.14.17/net/ipv4/ip_tunnel_core.c linux-imx6-3.14/net/ipv4/ip_tunnel_core.c --- linux-3.14.17/net/ipv4/ip_tunnel_core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/ip_tunnel_core.c 2014-09-09 10:13:52.428983317 +0200 ++++ linux-imx6-3.14/net/ipv4/ip_tunnel_core.c 2014-09-11 18:06:15.590092220 +0200 @@ -74,7 +74,7 @@ iph->daddr = dst; iph->saddr = src; @@ -233364,7 +233364,7 @@ diff -Nur linux-3.14.17/net/ipv4/ip_tunnel_core.c linux-imx6-3.14/net/ipv4/ip_tu if (unlikely(net_xmit_eval(err))) diff -Nur linux-3.14.17/net/ipv4/raw.c linux-imx6-3.14/net/ipv4/raw.c --- linux-3.14.17/net/ipv4/raw.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/raw.c 2014-09-09 10:13:52.436983382 +0200 ++++ linux-imx6-3.14/net/ipv4/raw.c 2014-09-11 18:06:15.626092363 +0200 @@ -389,7 +389,7 @@ iph->check = 0; iph->tot_len = htons(length); @@ -233376,7 +233376,7 @@ diff -Nur linux-3.14.17/net/ipv4/raw.c linux-imx6-3.14/net/ipv4/raw.c } diff -Nur linux-3.14.17/net/ipv4/route.c linux-imx6-3.14/net/ipv4/route.c --- linux-3.14.17/net/ipv4/route.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/route.c 2014-09-09 10:13:52.436983382 +0200 ++++ linux-imx6-3.14/net/ipv4/route.c 2014-09-11 18:06:15.630092380 +0200 @@ -89,7 +89,6 @@ #include <linux/rcupdate.h> #include <linux/times.h> @@ -233471,7 +233471,7 @@ diff -Nur linux-3.14.17/net/ipv4/route.c linux-imx6-3.14/net/ipv4/route.c if (!ip_rt_acct) diff -Nur linux-3.14.17/net/ipv4/tcp_vegas.c linux-imx6-3.14/net/ipv4/tcp_vegas.c --- linux-3.14.17/net/ipv4/tcp_vegas.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/tcp_vegas.c 2014-09-09 10:13:52.440983416 +0200 ++++ linux-imx6-3.14/net/ipv4/tcp_vegas.c 2014-09-11 18:06:15.642092428 +0200 @@ -219,8 +219,7 @@ * This is: * (actual rate in segments) * baseRTT @@ -233484,7 +233484,7 @@ diff -Nur linux-3.14.17/net/ipv4/tcp_vegas.c linux-imx6-3.14/net/ipv4/tcp_vegas. * and the window we would like to have. This quantity diff -Nur linux-3.14.17/net/ipv4/tcp_veno.c linux-imx6-3.14/net/ipv4/tcp_veno.c --- linux-3.14.17/net/ipv4/tcp_veno.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/tcp_veno.c 2014-09-09 10:13:52.440983416 +0200 ++++ linux-imx6-3.14/net/ipv4/tcp_veno.c 2014-09-11 18:06:15.642092428 +0200 @@ -145,7 +145,7 @@ rtt = veno->minrtt; @@ -233496,7 +233496,7 @@ diff -Nur linux-3.14.17/net/ipv4/tcp_veno.c linux-imx6-3.14/net/ipv4/tcp_veno.c diff -Nur linux-3.14.17/net/ipv4/xfrm4_mode_tunnel.c linux-imx6-3.14/net/ipv4/xfrm4_mode_tunnel.c --- linux-3.14.17/net/ipv4/xfrm4_mode_tunnel.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv4/xfrm4_mode_tunnel.c 2014-09-09 10:13:52.444983448 +0200 ++++ linux-imx6-3.14/net/ipv4/xfrm4_mode_tunnel.c 2014-09-11 18:06:15.642092428 +0200 @@ -117,12 +117,12 @@ top_iph->frag_off = (flags & XFRM_STATE_NOPMTUDISC) ? @@ -233513,7 +233513,7 @@ diff -Nur linux-3.14.17/net/ipv4/xfrm4_mode_tunnel.c linux-imx6-3.14/net/ipv4/xf } diff -Nur linux-3.14.17/net/ipv6/ip6_output.c linux-imx6-3.14/net/ipv6/ip6_output.c --- linux-3.14.17/net/ipv6/ip6_output.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv6/ip6_output.c 2014-09-09 10:13:52.448983480 +0200 ++++ linux-imx6-3.14/net/ipv6/ip6_output.c 2014-09-11 18:06:15.654092474 +0200 @@ -537,20 +537,6 @@ skb_copy_secmark(to, from); } @@ -233537,7 +233537,7 @@ diff -Nur linux-3.14.17/net/ipv6/ip6_output.c linux-imx6-3.14/net/ipv6/ip6_outpu struct sk_buff *frag; diff -Nur linux-3.14.17/net/ipv6/output_core.c linux-imx6-3.14/net/ipv6/output_core.c --- linux-3.14.17/net/ipv6/output_core.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/ipv6/output_core.c 2014-09-09 10:13:52.452983512 +0200 ++++ linux-imx6-3.14/net/ipv6/output_core.c 2014-09-11 18:06:15.662092507 +0200 @@ -7,6 +7,29 @@ #include <net/ip6_fib.h> #include <net/addrconf.h> @@ -233570,7 +233570,7 @@ diff -Nur linux-3.14.17/net/ipv6/output_core.c linux-imx6-3.14/net/ipv6/output_c { diff -Nur linux-3.14.17/net/l2tp/l2tp_ppp.c linux-imx6-3.14/net/l2tp/l2tp_ppp.c --- linux-3.14.17/net/l2tp/l2tp_ppp.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/l2tp/l2tp_ppp.c 2014-09-09 10:13:52.468983643 +0200 ++++ linux-imx6-3.14/net/l2tp/l2tp_ppp.c 2014-09-11 18:06:15.742092826 +0200 @@ -1368,7 +1368,7 @@ int err; @@ -233591,7 +233591,7 @@ diff -Nur linux-3.14.17/net/l2tp/l2tp_ppp.c linux-imx6-3.14/net/l2tp/l2tp_ppp.c return -EFAULT; diff -Nur linux-3.14.17/net/mac80211/driver-ops.h linux-imx6-3.14/net/mac80211/driver-ops.h --- linux-3.14.17/net/mac80211/driver-ops.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/mac80211/driver-ops.h 2014-09-09 10:13:52.472983675 +0200 ++++ linux-imx6-3.14/net/mac80211/driver-ops.h 2014-09-11 18:06:15.754092874 +0200 @@ -722,13 +722,19 @@ } @@ -233615,7 +233615,7 @@ diff -Nur linux-3.14.17/net/mac80211/driver-ops.h linux-imx6-3.14/net/mac80211/d diff -Nur linux-3.14.17/net/mac80211/ibss.c linux-imx6-3.14/net/mac80211/ibss.c --- linux-3.14.17/net/mac80211/ibss.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/mac80211/ibss.c 2014-09-09 10:13:52.472983675 +0200 ++++ linux-imx6-3.14/net/mac80211/ibss.c 2014-09-11 18:06:15.754092874 +0200 @@ -386,7 +386,7 @@ presp->head_len, 0, GFP_KERNEL); cfg80211_put_bss(local->hw.wiphy, bss); @@ -233627,7 +233627,7 @@ diff -Nur linux-3.14.17/net/mac80211/ibss.c linux-imx6-3.14/net/mac80211/ibss.c static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, diff -Nur linux-3.14.17/net/mac80211/tx.c linux-imx6-3.14/net/mac80211/tx.c --- linux-3.14.17/net/mac80211/tx.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/mac80211/tx.c 2014-09-09 10:13:52.480983740 +0200 ++++ linux-imx6-3.14/net/mac80211/tx.c 2014-09-11 18:06:15.778092969 +0200 @@ -414,9 +414,6 @@ if (ieee80211_has_order(hdr->frame_control)) return TX_CONTINUE; @@ -233687,7 +233687,7 @@ diff -Nur linux-3.14.17/net/mac80211/tx.c linux-imx6-3.14/net/mac80211/tx.c else diff -Nur linux-3.14.17/net/mac80211/util.c linux-imx6-3.14/net/mac80211/util.c --- linux-3.14.17/net/mac80211/util.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/mac80211/util.c 2014-09-09 10:13:52.480983740 +0200 ++++ linux-imx6-3.14/net/mac80211/util.c 2014-09-11 18:06:15.778092969 +0200 @@ -554,7 +554,7 @@ ieee80211_stop_queues_by_reason(&local->hw, IEEE80211_MAX_QUEUE_MAP, IEEE80211_QUEUE_STOP_REASON_FLUSH); @@ -233699,7 +233699,7 @@ diff -Nur linux-3.14.17/net/mac80211/util.c linux-imx6-3.14/net/mac80211/util.c IEEE80211_QUEUE_STOP_REASON_FLUSH); diff -Nur linux-3.14.17/net/netfilter/ipvs/ip_vs_xmit.c linux-imx6-3.14/net/netfilter/ipvs/ip_vs_xmit.c --- linux-3.14.17/net/netfilter/ipvs/ip_vs_xmit.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/netfilter/ipvs/ip_vs_xmit.c 2014-09-09 10:13:52.492983838 +0200 ++++ linux-imx6-3.14/net/netfilter/ipvs/ip_vs_xmit.c 2014-09-11 18:06:15.790093017 +0200 @@ -883,7 +883,7 @@ iph->daddr = cp->daddr.ip; iph->saddr = saddr; @@ -233711,7 +233711,7 @@ diff -Nur linux-3.14.17/net/netfilter/ipvs/ip_vs_xmit.c linux-imx6-3.14/net/netf skb->local_df = 1; diff -Nur linux-3.14.17/net/sctp/associola.c linux-imx6-3.14/net/sctp/associola.c --- linux-3.14.17/net/sctp/associola.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/sctp/associola.c 2014-09-09 10:13:52.540984228 +0200 ++++ linux-imx6-3.14/net/sctp/associola.c 2014-09-11 18:06:16.074094150 +0200 @@ -1151,7 +1151,6 @@ asoc->c = new->c; asoc->peer.rwnd = new->peer.rwnd; @@ -233722,7 +233722,7 @@ diff -Nur linux-3.14.17/net/sctp/associola.c linux-imx6-3.14/net/sctp/associola. asoc->peer.i.initial_tsn, GFP_ATOMIC); diff -Nur linux-3.14.17/net/sctp/output.c linux-imx6-3.14/net/sctp/output.c --- linux-3.14.17/net/sctp/output.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/sctp/output.c 2014-09-09 10:13:52.544984261 +0200 ++++ linux-imx6-3.14/net/sctp/output.c 2014-09-11 18:06:16.074094150 +0200 @@ -599,7 +599,7 @@ return err; no_route: @@ -233734,7 +233734,7 @@ diff -Nur linux-3.14.17/net/sctp/output.c linux-imx6-3.14/net/sctp/output.c * associated with a socket, although only one of the paths of the diff -Nur linux-3.14.17/net/wireless/core.h linux-imx6-3.14/net/wireless/core.h --- linux-3.14.17/net/wireless/core.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/wireless/core.h 2014-09-09 10:13:52.568984458 +0200 ++++ linux-imx6-3.14/net/wireless/core.h 2014-09-11 18:06:16.190094613 +0200 @@ -211,6 +211,7 @@ } dc; struct { @@ -233755,7 +233755,7 @@ diff -Nur linux-3.14.17/net/wireless/core.h linux-imx6-3.14/net/wireless/core.h diff -Nur linux-3.14.17/net/wireless/ibss.c linux-imx6-3.14/net/wireless/ibss.c --- linux-3.14.17/net/wireless/ibss.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/wireless/ibss.c 2014-09-09 10:13:52.568984458 +0200 ++++ linux-imx6-3.14/net/wireless/ibss.c 2014-09-11 18:06:16.190094613 +0200 @@ -14,7 +14,8 @@ #include "rdev-ops.h" @@ -233808,7 +233808,7 @@ diff -Nur linux-3.14.17/net/wireless/ibss.c linux-imx6-3.14/net/wireless/ibss.c list_add_tail(&ev->list, &wdev->event_list); diff -Nur linux-3.14.17/net/wireless/nl80211.c linux-imx6-3.14/net/wireless/nl80211.c --- linux-3.14.17/net/wireless/nl80211.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/wireless/nl80211.c 2014-09-09 10:13:52.572984490 +0200 ++++ linux-imx6-3.14/net/wireless/nl80211.c 2014-09-11 18:06:16.198094644 +0200 @@ -1450,17 +1450,18 @@ } CMD(start_p2p_device, START_P2P_DEVICE); @@ -233835,7 +233835,7 @@ diff -Nur linux-3.14.17/net/wireless/nl80211.c linux-imx6-3.14/net/wireless/nl80 if (dev->ops->connect || dev->ops->auth) { diff -Nur linux-3.14.17/net/wireless/trace.h linux-imx6-3.14/net/wireless/trace.h --- linux-3.14.17/net/wireless/trace.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/wireless/trace.h 2014-09-09 10:13:52.572984490 +0200 ++++ linux-imx6-3.14/net/wireless/trace.h 2014-09-11 18:06:16.202094661 +0200 @@ -2068,8 +2068,7 @@ MAC_ASSIGN(addr, addr); __entry->key_type = key_type; @@ -233885,7 +233885,7 @@ diff -Nur linux-3.14.17/net/wireless/trace.h linux-imx6-3.14/net/wireless/trace. bool acked), diff -Nur linux-3.14.17/net/wireless/util.c linux-imx6-3.14/net/wireless/util.c --- linux-3.14.17/net/wireless/util.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/wireless/util.c 2014-09-09 10:13:52.572984490 +0200 ++++ linux-imx6-3.14/net/wireless/util.c 2014-09-11 18:06:16.202094661 +0200 @@ -820,7 +820,8 @@ ev->dc.reason, true); break; @@ -233898,7 +233898,7 @@ diff -Nur linux-3.14.17/net/wireless/util.c linux-imx6-3.14/net/wireless/util.c wdev_unlock(wdev); diff -Nur linux-3.14.17/net/xfrm/xfrm_user.c linux-imx6-3.14/net/xfrm/xfrm_user.c --- linux-3.14.17/net/xfrm/xfrm_user.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/net/xfrm/xfrm_user.c 2014-09-09 10:13:52.576984523 +0200 ++++ linux-imx6-3.14/net/xfrm/xfrm_user.c 2014-09-11 18:06:16.218094725 +0200 @@ -176,7 +176,9 @@ attrs[XFRMA_ALG_AEAD] || attrs[XFRMA_ALG_CRYPT] || @@ -233922,7 +233922,7 @@ diff -Nur linux-3.14.17/net/xfrm/xfrm_user.c linux-imx6-3.14/net/xfrm/xfrm_user. diff -Nur linux-3.14.17/scripts/Makefile.lib linux-imx6-3.14/scripts/Makefile.lib --- linux-3.14.17/scripts/Makefile.lib 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/scripts/Makefile.lib 2014-09-09 10:13:52.580984555 +0200 ++++ linux-imx6-3.14/scripts/Makefile.lib 2014-09-11 18:06:16.334095188 +0200 @@ -153,6 +153,7 @@ -I$(srctree)/arch/$(SRCARCH)/boot/dts \ -I$(srctree)/arch/$(SRCARCH)/boot/dts/include \ @@ -233933,7 +233933,7 @@ diff -Nur linux-3.14.17/scripts/Makefile.lib linux-imx6-3.14/scripts/Makefile.li # Finds the multi-part object the current object will be linked into diff -Nur linux-3.14.17/scripts/mod/devicetable-offsets.c linux-imx6-3.14/scripts/mod/devicetable-offsets.c --- linux-3.14.17/scripts/mod/devicetable-offsets.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/scripts/mod/devicetable-offsets.c 2014-09-09 10:13:52.600984718 +0200 ++++ linux-imx6-3.14/scripts/mod/devicetable-offsets.c 2014-09-11 18:06:16.482095778 +0200 @@ -174,6 +174,9 @@ DEVID_FIELD(x86_cpu_id, model); DEVID_FIELD(x86_cpu_id, vendor); @@ -233946,7 +233946,7 @@ diff -Nur linux-3.14.17/scripts/mod/devicetable-offsets.c linux-imx6-3.14/script diff -Nur linux-3.14.17/scripts/mod/file2alias.c linux-imx6-3.14/scripts/mod/file2alias.c --- linux-3.14.17/scripts/mod/file2alias.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/scripts/mod/file2alias.c 2014-09-09 10:13:52.600984718 +0200 ++++ linux-imx6-3.14/scripts/mod/file2alias.c 2014-09-11 18:06:16.486095794 +0200 @@ -1135,6 +1135,16 @@ } ADD_TO_DEVTABLE("x86cpu", x86_cpu_id, do_x86cpu_entry); @@ -233966,7 +233966,7 @@ diff -Nur linux-3.14.17/scripts/mod/file2alias.c linux-imx6-3.14/scripts/mod/fil char *alias) diff -Nur linux-3.14.17/scripts/recordmcount.c linux-imx6-3.14/scripts/recordmcount.c --- linux-3.14.17/scripts/recordmcount.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/scripts/recordmcount.c 2014-09-09 10:13:52.600984718 +0200 ++++ linux-imx6-3.14/scripts/recordmcount.c 2014-09-11 18:06:16.490095810 +0200 @@ -40,6 +40,11 @@ #define R_METAG_NONE 3 #endif @@ -233990,7 +233990,7 @@ diff -Nur linux-3.14.17/scripts/recordmcount.c linux-imx6-3.14/scripts/recordmco altmcount = "_mcount_wrapper"; diff -Nur linux-3.14.17/scripts/recordmcount.pl linux-imx6-3.14/scripts/recordmcount.pl --- linux-3.14.17/scripts/recordmcount.pl 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/scripts/recordmcount.pl 2014-09-09 10:13:52.600984718 +0200 ++++ linux-imx6-3.14/scripts/recordmcount.pl 2014-09-11 18:06:16.490095810 +0200 @@ -279,6 +279,11 @@ $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_ARM_(CALL|PC24|THM_CALL)" . "\\s+(__gnu_mcount_nc|mcount)\$"; @@ -234005,7 +234005,7 @@ diff -Nur linux-3.14.17/scripts/recordmcount.pl linux-imx6-3.14/scripts/recordmc $type = "data8"; diff -Nur linux-3.14.17/sound/soc/codecs/cs42888.c linux-imx6-3.14/sound/soc/codecs/cs42888.c --- linux-3.14.17/sound/soc/codecs/cs42888.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/codecs/cs42888.c 2014-09-09 10:13:52.744985891 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/cs42888.c 2014-09-11 18:06:18.638104376 +0200 @@ -0,0 +1,934 @@ +/* + * cs42888.c -- CS42888 ALSA SoC Audio Driver @@ -234943,7 +234943,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/cs42888.c linux-imx6-3.14/sound/soc/cod +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/sound/soc/codecs/cs42888.h linux-imx6-3.14/sound/soc/codecs/cs42888.h --- linux-3.14.17/sound/soc/codecs/cs42888.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/codecs/cs42888.h 2014-09-09 10:13:52.744985891 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/cs42888.h 2014-09-11 18:06:18.638104376 +0200 @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -235070,7 +235070,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/cs42888.h linux-imx6-3.14/sound/soc/cod +#endif diff -Nur linux-3.14.17/sound/soc/codecs/Kconfig linux-imx6-3.14/sound/soc/codecs/Kconfig --- linux-3.14.17/sound/soc/codecs/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/codecs/Kconfig 2014-09-09 10:13:52.740985859 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/Kconfig 2014-09-11 18:06:18.630104344 +0200 @@ -37,6 +37,7 @@ select SND_SOC_CS42L73 if I2C select SND_SOC_CS4270 if I2C @@ -235091,7 +235091,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/Kconfig linux-imx6-3.14/sound/soc/codec depends on TTY diff -Nur linux-3.14.17/sound/soc/codecs/Makefile linux-imx6-3.14/sound/soc/codecs/Makefile --- linux-3.14.17/sound/soc/codecs/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/codecs/Makefile 2014-09-09 10:13:52.740985859 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/Makefile 2014-09-11 18:06:18.630104344 +0200 @@ -23,6 +23,7 @@ snd-soc-cs42l73-objs := cs42l73.o snd-soc-cs4270-objs := cs4270.o @@ -235110,7 +235110,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/Makefile linux-imx6-3.14/sound/soc/code obj-$(CONFIG_SND_SOC_DA7213) += snd-soc-da7213.o diff -Nur linux-3.14.17/sound/soc/codecs/sgtl5000.c linux-imx6-3.14/sound/soc/codecs/sgtl5000.c --- linux-3.14.17/sound/soc/codecs/sgtl5000.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/codecs/sgtl5000.c 2014-09-09 10:13:52.752985955 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/sgtl5000.c 2014-09-11 18:06:18.646104409 +0200 @@ -756,7 +756,7 @@ struct ldo_regulator *ldo = rdev_get_drvdata(dev); struct snd_soc_codec *codec = (struct snd_soc_codec *)ldo->codec_data; @@ -235222,7 +235222,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/sgtl5000.c linux-imx6-3.14/sound/soc/co return 0; diff -Nur linux-3.14.17/sound/soc/codecs/spdif_transmitter.c linux-imx6-3.14/sound/soc/codecs/spdif_transmitter.c --- linux-3.14.17/sound/soc/codecs/spdif_transmitter.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/codecs/spdif_transmitter.c 2014-09-09 10:13:52.752985955 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/spdif_transmitter.c 2014-09-11 18:06:18.646104409 +0200 @@ -24,7 +24,7 @@ #define DRV_NAME "spdif-dit" @@ -235234,7 +235234,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/spdif_transmitter.c linux-imx6-3.14/sou SNDRV_PCM_FMTBIT_S24_LE) diff -Nur linux-3.14.17/sound/soc/codecs/wm8962.c linux-imx6-3.14/sound/soc/codecs/wm8962.c --- linux-3.14.17/sound/soc/codecs/wm8962.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/codecs/wm8962.c 2014-09-09 10:13:52.772986119 +0200 ++++ linux-imx6-3.14/sound/soc/codecs/wm8962.c 2014-09-11 18:06:18.674104519 +0200 @@ -16,6 +16,7 @@ #include <linux/init.h> #include <linux/delay.h> @@ -235360,7 +235360,7 @@ diff -Nur linux-3.14.17/sound/soc/codecs/wm8962.c linux-imx6-3.14/sound/soc/code #endif diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc.c linux-imx6-3.14/sound/soc/fsl/fsl_asrc.c --- linux-3.14.17/sound/soc/fsl/fsl_asrc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc.c 2014-09-09 10:13:52.784986217 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc.c 2014-09-11 18:06:18.690104584 +0200 @@ -0,0 +1,498 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -235862,7 +235862,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc.c linux-imx6-3.14/sound/soc/fsl/f +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc.h linux-imx6-3.14/sound/soc/fsl/fsl_asrc.h --- linux-3.14.17/sound/soc/fsl/fsl_asrc.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc.h 2014-09-09 10:13:52.784986217 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc.h 2014-09-11 18:06:18.690104584 +0200 @@ -0,0 +1,48 @@ +/* + * fsl_asrc.h - ALSA ASRC interface @@ -235914,7 +235914,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc.h linux-imx6-3.14/sound/soc/fsl/f +#endif diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc_pcm.c linux-imx6-3.14/sound/soc/fsl/fsl_asrc_pcm.c --- linux-3.14.17/sound/soc/fsl/fsl_asrc_pcm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc_pcm.c 2014-09-09 10:13:52.784986217 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_asrc_pcm.c 2014-09-11 18:06:18.690104584 +0200 @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc. All Rights Reserved. @@ -235959,7 +235959,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_asrc_pcm.c linux-imx6-3.14/sound/soc/f +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/sound/soc/fsl/fsl_esai.c linux-imx6-3.14/sound/soc/fsl/fsl_esai.c --- linux-3.14.17/sound/soc/fsl/fsl_esai.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_esai.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_esai.c 2014-09-11 18:06:18.690104584 +0200 @@ -785,7 +785,7 @@ return ret; } @@ -235971,7 +235971,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_esai.c linux-imx6-3.14/sound/soc/fsl/f diff -Nur linux-3.14.17/sound/soc/fsl/fsl_hdmi.c linux-imx6-3.14/sound/soc/fsl/fsl_hdmi.c --- linux-3.14.17/sound/soc/fsl/fsl_hdmi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_hdmi.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_hdmi.c 2014-09-11 18:06:18.690104584 +0200 @@ -0,0 +1,614 @@ +/* + * ALSA SoC HDMI Audio Layer for Freescale i.MX @@ -236589,7 +236589,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_hdmi.c linux-imx6-3.14/sound/soc/fsl/f +MODULE_ALIAS("platform:fsl-hdmi-dai"); diff -Nur linux-3.14.17/sound/soc/fsl/fsl_spdif.c linux-imx6-3.14/sound/soc/fsl/fsl_spdif.c --- linux-3.14.17/sound/soc/fsl/fsl_spdif.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_spdif.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_spdif.c 2014-09-11 18:06:18.690104584 +0200 @@ -21,6 +21,8 @@ #include <linux/of_address.h> #include <linux/of_device.h> @@ -236917,7 +236917,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_spdif.c linux-imx6-3.14/sound/soc/fsl/ }; diff -Nur linux-3.14.17/sound/soc/fsl/fsl_spdif.h linux-imx6-3.14/sound/soc/fsl/fsl_spdif.h --- linux-3.14.17/sound/soc/fsl/fsl_spdif.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_spdif.h 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_spdif.h 2014-09-11 18:06:18.690104584 +0200 @@ -157,13 +157,19 @@ #define STC_TXCLK_DIV(x) ((((x) - 1) << STC_TXCLK_DIV_OFFSET) & STC_TXCLK_DIV_MASK) #define STC_TXCLK_SRC_MAX 8 @@ -236954,7 +236954,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_spdif.h linux-imx6-3.14/sound/soc/fsl/ SNDRV_PCM_RATE_32000 | \ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fsl_ssi.c --- linux-3.14.17/sound/soc/fsl/fsl_ssi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/fsl_ssi.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/fsl_ssi.c 2014-09-11 18:06:18.690104584 +0200 @@ -3,7 +3,7 @@ * * Author: Timur Tabi <timur@freescale.com> @@ -237122,7 +237122,14 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs }; /* Template for the CPU dai driver structure */ -@@ -1263,7 +1332,6 @@ +@@ -1257,13 +1326,13 @@ + int ret = 0; + struct device_attribute *dev_attr = NULL; + struct device_node *np = pdev->dev.of_node; ++ u32 dmas[4]; + const struct of_device_id *of_id; + enum fsl_ssi_type hw_type; + const char *p, *sprop; const uint32_t *iprop; struct resource res; char name[64]; @@ -237130,7 +237137,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs bool ac97 = false; /* SSIs that are not connected on the board should have a -@@ -1381,7 +1449,6 @@ +@@ -1381,7 +1450,6 @@ if (hw_type == FSL_SSI_MX21 || hw_type == FSL_SSI_MX51 || hw_type == FSL_SSI_MX35) { @@ -237138,7 +237145,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs ssi_private->ssi_on_imx = true; ssi_private->clk = devm_clk_get(&pdev->dev, NULL); -@@ -1390,9 +1457,9 @@ +@@ -1390,9 +1458,9 @@ dev_err(&pdev->dev, "could not get clock: %d\n", ret); goto error_irqmap; } @@ -237150,7 +237157,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs ret); goto error_irqmap; } -@@ -1405,56 +1472,16 @@ +@@ -1405,41 +1473,21 @@ dev_dbg(&pdev->dev, "could not get baud clock: %ld\n", PTR_ERR(ssi_private->baudclk)); else @@ -237165,6 +237172,8 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs - ssi_private->fifo_depth - 2; - ssi_private->dma_params_rx.maxburst = - ssi_private->fifo_depth - 2; ++ ssi_private->dma_params_tx.maxburst = ssi_private->fifo_depth - 2; ++ ssi_private->dma_params_rx.maxburst = ssi_private->fifo_depth - 2; ssi_private->dma_params_tx.addr = ssi_private->ssi_phys + offsetof(struct ccsr_ssi, stx0); ssi_private->dma_params_rx.addr = @@ -237190,13 +237199,16 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs - /* Should this be merge with the above? */ - if (!of_property_read_u32_array(pdev->dev.of_node, "dmas", dmas, 4) - && dmas[2] == IMX_DMATYPE_SSI_DUAL) { -- ssi_private->use_dual_fifo = true; -- /* When using dual fifo mode, we need to keep watermark -- * as even numbers due to dma script limitation. -- */ -- ssi_private->dma_params_tx.maxburst &= ~0x1; -- ssi_private->dma_params_rx.maxburst &= ~0x1; -- } ++ ++ ret = !of_property_read_u32_array(np, "dmas", dmas, 4); ++ if (ssi_private->use_dma && !ret && dmas[2] == IMX_DMATYPE_SSI_DUAL) { + ssi_private->use_dual_fifo = true; + /* When using dual fifo mode, we need to keep watermark + * as even numbers due to dma script limitation. +@@ -1447,14 +1495,6 @@ + ssi_private->dma_params_tx.maxburst &= ~0x1; + ssi_private->dma_params_rx.maxburst &= ~0x1; + } - - shared = of_device_is_compatible(of_get_parent(np), - "fsl,spba-bus"); @@ -237208,7 +237220,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs } /* -@@ -1474,6 +1501,8 @@ +@@ -1474,6 +1514,8 @@ } } @@ -237217,7 +237229,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs /* Register with ASoC */ dev_set_drvdata(&pdev->dev, ssi_private); -@@ -1509,7 +1538,8 @@ +@@ -1509,7 +1551,8 @@ if (ret) goto error_pcm; } else { @@ -237227,7 +237239,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs if (ret) goto error_pcm; } -@@ -1565,12 +1595,16 @@ +@@ -1565,12 +1608,16 @@ error_dev: device_remove_file(&pdev->dev, dev_attr); @@ -237247,7 +237259,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs error_irqmap: if (ssi_private->irq_stats) -@@ -1590,8 +1624,8 @@ +@@ -1590,8 +1637,8 @@ snd_soc_unregister_component(&pdev->dev); if (ssi_private->ssi_on_imx) { if (!IS_ERR(ssi_private->baudclk)) @@ -237258,7 +237270,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs } if (ssi_private->irq_stats) irq_dispose_mapping(ssi_private->irq); -@@ -1604,6 +1638,7 @@ +@@ -1604,6 +1651,7 @@ .name = "fsl-ssi-dai", .owner = THIS_MODULE, .of_match_table = fsl_ssi_ids, @@ -237268,7 +237280,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/fsl_ssi.c linux-imx6-3.14/sound/soc/fsl/fs .remove = fsl_ssi_remove, diff -Nur linux-3.14.17/sound/soc/fsl/imx-cs42888.c linux-imx6-3.14/sound/soc/fsl/imx-cs42888.c --- linux-3.14.17/sound/soc/fsl/imx-cs42888.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/imx-cs42888.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-cs42888.c 2014-09-11 18:06:18.714104678 +0200 @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2010-2014 Freescale Semiconductor, Inc. All Rights Reserved. @@ -237641,7 +237653,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-cs42888.c linux-imx6-3.14/sound/soc/fs +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi.c linux-imx6-3.14/sound/soc/fsl/imx-hdmi.c --- linux-3.14.17/sound/soc/fsl/imx-hdmi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi.c 2014-09-11 18:06:18.714104678 +0200 @@ -0,0 +1,113 @@ +/* + * ASoC HDMI Transmitter driver for IMX development boards @@ -237758,7 +237770,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi.c linux-imx6-3.14/sound/soc/fsl/i +MODULE_ALIAS("platform:imx-audio-hdmi"); diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi-dma.c linux-imx6-3.14/sound/soc/fsl/imx-hdmi-dma.c --- linux-3.14.17/sound/soc/fsl/imx-hdmi-dma.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi-dma.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi-dma.c 2014-09-11 18:06:18.714104678 +0200 @@ -0,0 +1,1240 @@ +/* + * imx-hdmi-dma.c -- HDMI DMA driver for ALSA Soc Audio Layer @@ -239002,7 +239014,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi-dma.c linux-imx6-3.14/sound/soc/f +MODULE_LICENSE("GPL"); diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi.h linux-imx6-3.14/sound/soc/fsl/imx-hdmi.h --- linux-3.14.17/sound/soc/fsl/imx-hdmi.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi.h 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-hdmi.h 2014-09-11 18:06:18.714104678 +0200 @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2011-2013 Freescale Semiconductor, Inc. @@ -239111,7 +239123,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-hdmi.h linux-imx6-3.14/sound/soc/fsl/i +#endif /* __IMX_HDMI_H */ diff -Nur linux-3.14.17/sound/soc/fsl/imx-pcm-dma.c linux-imx6-3.14/sound/soc/fsl/imx-pcm-dma.c --- linux-3.14.17/sound/soc/fsl/imx-pcm-dma.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/imx-pcm-dma.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-pcm-dma.c 2014-09-11 18:06:18.714104678 +0200 @@ -11,6 +11,10 @@ * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. @@ -239241,7 +239253,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-pcm-dma.c linux-imx6-3.14/sound/soc/fs diff -Nur linux-3.14.17/sound/soc/fsl/imx-pcm.h linux-imx6-3.14/sound/soc/fsl/imx-pcm.h --- linux-3.14.17/sound/soc/fsl/imx-pcm.h 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/imx-pcm.h 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-pcm.h 2014-09-11 18:06:18.714104678 +0200 @@ -18,13 +18,17 @@ /* * Do not change this as the FIQ handler depends on this size @@ -239276,7 +239288,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-pcm.h linux-imx6-3.14/sound/soc/fsl/im } diff -Nur linux-3.14.17/sound/soc/fsl/imx-spdif.c linux-imx6-3.14/sound/soc/fsl/imx-spdif.c --- linux-3.14.17/sound/soc/fsl/imx-spdif.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/imx-spdif.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-spdif.c 2014-09-11 18:06:18.714104678 +0200 @@ -65,14 +65,15 @@ if (ret) goto end; @@ -239305,7 +239317,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-spdif.c linux-imx6-3.14/sound/soc/fsl/ .probe = imx_spdif_audio_probe, diff -Nur linux-3.14.17/sound/soc/fsl/imx-ssi.c linux-imx6-3.14/sound/soc/fsl/imx-ssi.c --- linux-3.14.17/sound/soc/fsl/imx-ssi.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/imx-ssi.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-ssi.c 2014-09-11 18:06:18.714104678 +0200 @@ -602,7 +602,8 @@ ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx; @@ -239318,7 +239330,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-ssi.c linux-imx6-3.14/sound/soc/fsl/im ret = ssi->fiq_init; diff -Nur linux-3.14.17/sound/soc/fsl/imx-wm8962.c linux-imx6-3.14/sound/soc/fsl/imx-wm8962.c --- linux-3.14.17/sound/soc/fsl/imx-wm8962.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/imx-wm8962.c 2014-09-09 10:13:52.788986249 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/imx-wm8962.c 2014-09-11 18:06:18.718104695 +0200 @@ -1,9 +1,9 @@ /* - * Copyright 2013 Freescale Semiconductor, Inc. @@ -239765,7 +239777,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/imx-wm8962.c linux-imx6-3.14/sound/soc/fsl } diff -Nur linux-3.14.17/sound/soc/fsl/Kconfig linux-imx6-3.14/sound/soc/fsl/Kconfig --- linux-3.14.17/sound/soc/fsl/Kconfig 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/Kconfig 2014-09-09 11:49:34.388606557 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/Kconfig 2014-09-11 18:37:37.616046899 +0200 @@ -11,6 +11,12 @@ config SND_SOC_FSL_ESAI tristate @@ -239830,7 +239842,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/Kconfig linux-imx6-3.14/sound/soc/fsl/Kcon depends on MFD_MC13XXX && ARM diff -Nur linux-3.14.17/sound/soc/fsl/Makefile linux-imx6-3.14/sound/soc/fsl/Makefile --- linux-3.14.17/sound/soc/fsl/Makefile 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/fsl/Makefile 2014-09-09 10:13:52.784986217 +0200 ++++ linux-imx6-3.14/sound/soc/fsl/Makefile 2014-09-11 18:06:18.690104584 +0200 @@ -14,13 +14,19 @@ snd-soc-fsl-sai-objs := fsl_sai.o snd-soc-fsl-ssi-objs := fsl_ssi.o @@ -239881,7 +239893,7 @@ diff -Nur linux-3.14.17/sound/soc/fsl/Makefile linux-imx6-3.14/sound/soc/fsl/Mak obj-$(CONFIG_SND_SOC_IMX_MC13783) += snd-soc-imx-mc13783.o diff -Nur linux-3.14.17/sound/soc/soc-pcm.c linux-imx6-3.14/sound/soc/soc-pcm.c --- linux-3.14.17/sound/soc/soc-pcm.c 2014-08-14 03:38:34.000000000 +0200 -+++ linux-imx6-3.14/sound/soc/soc-pcm.c 2014-09-09 10:13:52.808986412 +0200 ++++ linux-imx6-3.14/sound/soc/soc-pcm.c 2014-09-11 18:06:18.754104839 +0200 @@ -945,7 +945,7 @@ } } diff --git a/target/collections/xbmcbox b/target/collections/kodibox index 3b9bcdf58..498e2bb9c 100644 --- a/target/collections/xbmcbox +++ b/target/collections/kodibox @@ -1,21 +1,23 @@ -config ADK_PKG_XBMCBOX - bool "Choose packages for XBMCBox system" +config ADK_PKG_KODIBOX + bool "Choose packages for KODIBox system" default n select BUSYBOX_NTPD - select ADK_PACKAGE_XBMC - select ADK_PACKAGE_XBMC_WITH_SMB - select ADK_PACKAGE_XBMC_WITH_NFS - select ADK_PACKAGE_XBMC_WITH_SSH - select ADK_PACKAGE_XBMC_WITH_CEC - select ADK_PACKAGE_XBMC_WITH_RTMP - select ADK_PACKAGE_XBMC_WITH_BLURAY + select ADK_PACKAGE_GLIBC + select ADK_PACKAGE_GLIBC_GCONV + select ADK_PACKAGE_KODI + select ADK_PACKAGE_KODI_WITH_SMB + select ADK_PACKAGE_KODI_WITH_NFS + select ADK_PACKAGE_KODI_WITH_SSH + select ADK_PACKAGE_KODI_WITH_CEC + select ADK_PACKAGE_KODI_WITH_RTMP + select ADK_PACKAGE_KODI_WITH_BLURAY select ADK_PACKAGE_HTOP select ADK_PACKAGE_DROPBEAR select ADK_PACKAGE_DROPBEAR_WITH_UTMP select ADK_PACKAGE_SCREEN select ADK_PACKAGE_VIM select ADK_PACKAGE_E2FSCK - select ADK_PACKAGE_DOSFSTOOLS + select ADK_PACKAGE_DOSFSTOOLS if ADK_TARGET_SYSTEM_RASPBERRY_PI select ADK_PACKAGE_ALSA_UTILS select ADK_PACKAGE_ALSA_UTILS_WITH_ALSAMIXER select ADK_TARGET_USE_GNU_HASHSTYLE @@ -26,9 +28,9 @@ config ADK_PKG_XBMCBOX select ADK_RUNTIME_START_DROPBEAR select ADK_RUNTIME_START_BUSYBOX_NTPD select ADK_RUNTIME_START_BUSYBOX_SYSLOGD - select ADK_RUNTIME_START_XBMC + select ADK_RUNTIME_START_KODI select ADK_KERNEL_USB_HID select ADK_KERNEL_EVDEV help - Create a small xbmc box. + Create a small kodi multimedia box. diff --git a/target/config/Config.in.toolchain b/target/config/Config.in.toolchain index 3ead8955a..23b348ecc 100644 --- a/target/config/Config.in.toolchain +++ b/target/config/Config.in.toolchain @@ -23,8 +23,8 @@ config ADK_TOOLCHAIN_GCC_4_5_4 boolean depends on ADK_LINUX_BFIN -config ADK_TOOLCHAIN_GCC_4_8_3_ARC - prompt "4.8.3-arc" +config ADK_TOOLCHAIN_GCC_4_8_0_ARC + prompt "4.8.0-arc" boolean depends on ADK_LINUX_ARC diff --git a/target/linux/config/Config.in.audio b/target/linux/config/Config.in.audio index 8785d8c07..12c0b3d68 100644 --- a/target/linux/config/Config.in.audio +++ b/target/linux/config/Config.in.audio @@ -224,7 +224,7 @@ config ADK_KERNEL_SND_IMX_SOC select ADK_KERNEL_SND_PCM_DMAENGINE depends on ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 depends on ADK_KERNEL_VERSION_3_14 - default y if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 + default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 default n endmenu diff --git a/target/linux/config/Config.in.bluetooth b/target/linux/config/Config.in.bluetooth index 537e0c741..64226aba6 100644 --- a/target/linux/config/Config.in.bluetooth +++ b/target/linux/config/Config.in.bluetooth @@ -116,8 +116,6 @@ config ADK_KERNEL_BT_MRVL prompt "Marvell driver" tristate select ADK_KERNEL_BT - select ADK_PACKAGE_BRCM_BLUETOOTH - default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 default n help Bluetooth Marvell driver. @@ -125,8 +123,9 @@ config ADK_KERNEL_BT_MRVL config ADK_KERNEL_BT_MRVL_SDIO prompt "Marvell SDIO driver" tristate - depends on ADK_KERNEL_BT_MRVL - depends on ADK_KERNEL_BT_HCIBTSDIO + select ADK_PACKAGE_BRCM_BLUETOOTH + select ADK_KERNEL_BT_MRVL + select ADK_KERNEL_BT_HCIBTSDIO depends on ADK_TARGET_WITH_SDIO default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 default n diff --git a/toolchain/binutils/Makefile.inc b/toolchain/binutils/Makefile.inc index 75819f916..464f959cb 100644 --- a/toolchain/binutils/Makefile.inc +++ b/toolchain/binutils/Makefile.inc @@ -10,6 +10,8 @@ PKG_SITES:= ${MASTER_SITE_GNU:=binutils/} DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz endif ifeq ($(ADK_TOOLCHAIN_BINUTILS_2_23_ARC),y) +# git commit afcd0783a37c73e09439737a11e0b3183746a652 +# https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/tree/arc-2.23-tls PKG_VERSION:= 2.23 PKG_MD5SUM:= a5dd5dd2d212a282cc1d4a84633e0d88 PKG_RELEASE:= 1 diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 68f64e2ff..a2f73ff5b 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -30,6 +30,7 @@ GCC_CONFOPTS:= --prefix=$(TOOLCHAIN_DIR)/usr \ --disable-libstdcxx-pch \ --disable-ppl-version-check \ --disable-cloog-version-check \ + --disable-target-optspace \ --with-system-zlib \ --without-ppl \ --without-cloog \ @@ -44,10 +45,6 @@ else GCC_CONFOPTS+= --disable-tls --disable-threads --disable-libatomic endif -ifneq ($(ADK_LINUX_AARCH64)$(ADK_LINUX_ALPHA)$(ADK_LINUX_ARC)$(ADK_LINUX_AVR32)$(ADK_LINUX_BFIN)$(ADK_LINUX_XTENSA)$(ADK_LINUX_M68K),y) -GCC_FINAL_CONFOPTS+= --enable-cxx-flags='$(TARGET_CXXFLAGS)' -endif - ifeq ($(ADK_TARGET_UCLINUX)$(ADK_TARGET_USE_STATIC_LIBS),y) GCC_FINAL_CONFOPTS+= --disable-shared else @@ -236,6 +233,8 @@ $(GCC_BUILD_DIR_FINAL)/.configured: mkdir -p $(GCC_BUILD_DIR_FINAL) cd $(GCC_BUILD_DIR_FINAL); \ PATH='$(TARGET_PATH)' \ + CFLAGS_FOR_TARGET='$(TARGET_CFLAGS)' \ + CXXFLAGS_FOR_TARGET='$(TARGET_CXXFLAGS)' \ $(WRKBUILD)/configure \ ${GCC_CONFOPTS} \ ${GCC_FINAL_CONFOPTS} \ diff --git a/toolchain/gcc/Makefile.inc b/toolchain/gcc/Makefile.inc index 7849939cf..86d03b58a 100644 --- a/toolchain/gcc/Makefile.inc +++ b/toolchain/gcc/Makefile.inc @@ -18,9 +18,11 @@ PKG_RELEASE:= 1 DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz LIBSTDCXXVER:= 19 endif -ifeq ($(ADK_TOOLCHAIN_GCC_4_8_3_ARC),y) -PKG_VERSION:= 4.8.3 -PKG_MD5SUM:= e2c60f5ef918be2db08df96c7d97d0c4 +ifeq ($(ADK_TOOLCHAIN_GCC_4_8_0_ARC),y) +# git commit e9dbcfdba0f42639b3aa9e3b06fe781599eb98fe +# from https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/tree/arc-4.8-tls +PKG_VERSION:= 4.8.0 +PKG_MD5SUM:= 91db62ad4f9bb9217f135b20a098ee03 PKG_SITES:= http://www.openadk.org/distfiles/ PKG_RELEASE:= 1 DISTFILES:= ${PKG_NAME}-${PKG_VERSION}-arc.tar.xz diff --git a/toolchain/gcc/patches/4.8.0/cflags.patch b/toolchain/gcc/patches/4.8.0/cflags.patch new file mode 100644 index 000000000..4f9de8069 --- /dev/null +++ b/toolchain/gcc/patches/4.8.0/cflags.patch @@ -0,0 +1,231 @@ +diff -Nur gcc-4.8.2.orig/gcc/c-family/c.opt gcc-4.8.2/gcc/c-family/c.opt +--- gcc-4.8.2.orig/gcc/c-family/c.opt 2013-01-19 06:25:25.000000000 +0100 ++++ gcc-4.8.2/gcc/c-family/c.opt 2014-02-23 20:22:48.000000000 +0100 +@@ -379,6 +379,10 @@ + C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration) + This switch is deprecated; use -Werror=implicit-function-declaration instead + ++Werror-maybe-reset ++C ObjC C++ ObjC++ ++; Documented in common.opt ++ + Wfloat-equal + C ObjC C++ ObjC++ Var(warn_float_equal) Warning + Warn if testing floating point numbers for equality +@@ -949,6 +953,9 @@ + fhonor-std + C++ ObjC++ Ignore Warn(switch %qs is no longer supported) + ++fhonour-copts ++C ObjC C++ ObjC++ RejectNegative ++ + fhosted + C ObjC + Assume normal C execution environment +diff -Nur gcc-4.8.2.orig/gcc/c-family/c-opts.c gcc-4.8.2/gcc/c-family/c-opts.c +--- gcc-4.8.2.orig/gcc/c-family/c-opts.c 2013-02-18 20:42:56.000000000 +0100 ++++ gcc-4.8.2/gcc/c-family/c-opts.c 2014-02-23 20:22:48.000000000 +0100 +@@ -104,6 +104,9 @@ + /* Whether any standard preincluded header has been preincluded. */ + static bool done_preinclude; + ++/* Check if a port honours COPTS. */ ++static int honour_copts = 0; ++ + static void handle_OPT_d (const char *); + static void set_std_cxx98 (int); + static void set_std_cxx11 (int); +@@ -491,6 +494,12 @@ + flag_no_builtin = !value; + break; + ++ case OPT_fhonour_copts: ++ if (c_language == clk_c) { ++ honour_copts++; ++ } ++ break; ++ + case OPT_fconstant_string_class_: + constant_string_class_name = arg; + break; +@@ -1027,6 +1036,47 @@ + return false; + } + ++ if (c_language == clk_c) { ++ char *ev = getenv ("GCC_HONOUR_COPTS"); ++ int evv; ++ if (ev == NULL) ++ evv = -1; ++ else if ((*ev == '0') || (*ev == '\0')) ++ evv = 0; ++ else if (*ev == '1') ++ evv = 1; ++ else if (*ev == '2') ++ evv = 2; ++ else if (*ev == 's') ++ evv = -1; ++ else { ++ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1"); ++ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */ ++ } ++ if (evv == 1) { ++ if (honour_copts == 0) { ++ error ("someone does not honour COPTS at all in lenient mode"); ++ return false; ++ } else if (honour_copts != 1) { ++ warning (0, "someone does not honour COPTS correctly, passed %d times", ++ honour_copts); ++ } ++ } else if (evv == 2) { ++ if (honour_copts == 0) { ++ error ("someone does not honour COPTS at all in strict mode"); ++ return false; ++ } else if (honour_copts != 1) { ++ error ("someone does not honour COPTS correctly, passed %d times", ++ honour_copts); ++ return false; ++ } ++ } else if (evv == 0) { ++ if (honour_copts != 1) ++ inform (0, "someone does not honour COPTS correctly, passed %d times", ++ honour_copts); ++ } ++ } ++ + return true; + } + +diff -Nur gcc-4.8.2.orig/gcc/common.opt gcc-4.8.2/gcc/common.opt +--- gcc-4.8.2.orig/gcc/common.opt 2013-03-14 10:13:36.000000000 +0100 ++++ gcc-4.8.2/gcc/common.opt 2014-02-23 20:22:48.000000000 +0100 +@@ -541,6 +541,10 @@ + Common Joined + Treat specified warning as error + ++Werror-maybe-reset ++Common ++If environment variable GCC_NO_WERROR is set, act as -Wno-error ++ + Wextra + Common Var(extra_warnings) Warning + Print extra (possibly unwanted) warnings +@@ -1242,6 +1246,9 @@ + Common Report Var(flag_guess_branch_prob) Optimization + Enable guessing of branch probabilities + ++fhonour-copts ++Common RejectNegative ++ + ; Nonzero means ignore `#ident' directives. 0 means handle them. + ; Generate position-independent code for executables if possible + ; On SVR4 targets, it also controls whether or not to emit a +diff -Nur gcc-4.8.2.orig/gcc/doc/cppopts.texi gcc-4.8.2/gcc/doc/cppopts.texi +--- gcc-4.8.2.orig/gcc/doc/cppopts.texi 2013-01-10 21:38:27.000000000 +0100 ++++ gcc-4.8.2/gcc/doc/cppopts.texi 2014-02-23 20:22:48.000000000 +0100 +@@ -163,6 +163,11 @@ + Make all warnings into hard errors. Source code which triggers warnings + will be rejected. + ++ at item -Werror-maybe-reset ++ at opindex Werror-maybe-reset ++Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment ++variable is set to anything other than 0 or empty. ++ + @item -Wsystem-headers + @opindex Wsystem-headers + Issue warnings for code in system headers. These are normally unhelpful +diff -Nur gcc-4.8.2.orig/gcc/doc/invoke.texi gcc-4.8.2/gcc/doc/invoke.texi +--- gcc-4.8.2.orig/gcc/doc/invoke.texi 2013-06-19 21:55:50.000000000 +0200 ++++ gcc-4.8.2/gcc/doc/invoke.texi 2014-02-23 20:22:48.000000000 +0100 +@@ -240,7 +240,7 @@ + -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol + -Wno-deprecated-declarations -Wdisabled-optimization @gol + -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol +--Wno-endif-labels -Werror -Werror=* @gol ++-Wno-endif-labels -Werror -Werror=* -Werror-maybe-reset @gol + -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol + -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol + -Wformat-security -Wformat-y2k @gol +@@ -4807,6 +4807,22 @@ + @option{-Wall} and by @option{-Wpedantic}, which can be disabled with + @option{-Wno-pointer-sign}. + ++ at item -Werror-maybe-reset ++ at opindex Werror-maybe-reset ++Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment ++variable is set to anything other than 0 or empty. ++ ++ at item -fhonour-copts ++ at opindex fhonour-copts ++If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not ++given at least once, and warn if it is given more than once. ++If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not ++given exactly once. ++If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option ++is not given exactly once. ++The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}. ++This flag and environment variable only affect the C language. ++ + @item -Wstack-protector + @opindex Wstack-protector + @opindex Wno-stack-protector +@@ -6918,7 +6934,7 @@ + second branch or a point immediately following it, depending on whether + the condition is known to be true or false. + +-Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. ++Enabled at levels @option{-O3}. + + @item -fsplit-wide-types + @opindex fsplit-wide-types +diff -Nur gcc-4.8.2.orig/gcc/java/jvspec.c gcc-4.8.2/gcc/java/jvspec.c +--- gcc-4.8.2.orig/gcc/java/jvspec.c 2013-01-10 21:38:27.000000000 +0100 ++++ gcc-4.8.2/gcc/java/jvspec.c 2014-02-23 20:22:48.000000000 +0100 +@@ -626,6 +626,7 @@ + class name. Append dummy `.c' that can be stripped by set_input so %b + is correct. */ + set_input (concat (main_class_name, "main.c", NULL)); ++ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */ + err = do_spec (jvgenmain_spec); + if (err == 0) + { +diff -Nur gcc-4.8.2.orig/gcc/opts.c gcc-4.8.2/gcc/opts.c +--- gcc-4.8.2.orig/gcc/opts.c 2013-03-05 07:01:13.000000000 +0100 ++++ gcc-4.8.2/gcc/opts.c 2014-02-23 20:22:48.000000000 +0100 +@@ -468,8 +468,6 @@ + { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 }, + #endif + { OPT_LEVELS_2_PLUS, OPT_fregmove, NULL, 1 }, +- { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 }, +- { OPT_LEVELS_2_PLUS, OPT_fstrict_overflow, NULL, 1 }, + { OPT_LEVELS_2_PLUS, OPT_freorder_blocks, NULL, 1 }, + { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 }, + { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 }, +@@ -488,6 +486,8 @@ + { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 }, + + /* -O3 optimizations. */ ++ { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 }, ++ { OPT_LEVELS_3_PLUS, OPT_fstrict_overflow, NULL, 1 }, + { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 }, + { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 }, + /* Inlining of functions reducing size is a good idea with -Os +@@ -1423,6 +1423,17 @@ + opts, opts_set, loc, dc); + break; + ++ case OPT_Werror_maybe_reset: ++ { ++ char *ev = getenv ("GCC_NO_WERROR"); ++ if ((ev != NULL) && (*ev != '0')) ++ warnings_are_errors = 0; ++ } ++ break; ++ ++ case OPT_fhonour_copts: ++ break; ++ + case OPT_Wlarger_than_: + opts->x_larger_than_size = value; + opts->x_warn_larger_than = value != -1; |