mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge pull request #54 from vpeter4/imx6.kernel
imx6: update kernel, prepare for second kernel
This commit is contained in:
commit
ebbbbac3c0
@ -286,14 +286,15 @@ dashes="==========================="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -a ! -f $HOME/.libreelec/projects/$PROJECT/linux/linux.$TARGET_ARCH.conf ]; then
|
||||
if [ ! -f $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -a ! -f $HOME/.libreelec/projects/$PROJECT/linux/linux.$TARGET_ARCH.conf ] &&
|
||||
! ls $PROJECT_DIR/$PROJECT/linux/*/linux.$TARGET_ARCH.conf &>/dev/null; then
|
||||
check_arch="$check_arch\n $dashes$dashes$dashes"
|
||||
check_arch="$check_arch\n ERROR: Architecture not found, use a valid Architecture"
|
||||
check_arch="$check_arch\n for your project or create a new config"
|
||||
check_arch="$check_arch\n $dashes$dashes$dashes"
|
||||
check_arch="$check_arch\n\n Valid Architectures for your project: $PROJECT"
|
||||
|
||||
for arch in $PROJECT_DIR/$PROJECT/linux/*.conf $HOME/.libreelec/projects/$PROJECT/linux/*.conf; do
|
||||
for arch in $PROJECT_DIR/$PROJECT/linux/*.conf $HOME/.libreelec/projects/$PROJECT/linux/*.conf $PROJECT_DIR/$PROJECT/linux/*/linux.$TARGET_ARCH.conf; do
|
||||
check_arch="$check_arch\n - $(basename $arch | cut -f2 -d".")"
|
||||
done
|
||||
echo -e $check_arch
|
||||
|
@ -17,67 +17,48 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="gpu-viv-bin-mx6q"
|
||||
PKG_VERSION="3.10.17-1.0.0-1"
|
||||
PKG_VERSION="3.10.17-1.0.2-hfp"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="arm"
|
||||
PKG_LICENSE="nonfree"
|
||||
PKG_SITE="http://www.freescale.com"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_DEPENDS_TARGET="toolchain gpu-viv-g2d"
|
||||
PKG_PRIORITY="optional"
|
||||
PKG_SECTION="graphics"
|
||||
PKG_SHORTDESC="gpu-viv-bin-mx6q: OpenGL-ES and VIVANTE driver for imx6q"
|
||||
PKG_LONGDESC="gpu-viv-bin-mx6q: OpenGL-ES and VIVANTE driver for imx6q"
|
||||
|
||||
PKG_IS_ADDON="no"
|
||||
PKG_AUTORECONF="no"
|
||||
|
||||
if [ "$TARGET_FLOAT" = "softfp" -o "$TARGET_FLOAT" = "soft" ]; then
|
||||
FLOAT="softfp"
|
||||
elif [ "$TARGET_FLOAT" = "hard" ]; then
|
||||
FLOAT="hardfp"
|
||||
fi
|
||||
|
||||
make_target() {
|
||||
: # nothing to make
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p $SYSROOT_PREFIX/usr/include
|
||||
cp -PRv $FLOAT/usr/include/* $SYSROOT_PREFIX/usr/include
|
||||
cp -PRv usr/include/* $SYSROOT_PREFIX/usr/include
|
||||
|
||||
LIBS_COPY="usr/lib/libEGL-fb.so \
|
||||
usr/lib/libEGL.so* \
|
||||
usr/lib/libGLES_CL.so \
|
||||
usr/lib/libGLES_CM.so \
|
||||
usr/lib/libGLESv1_CL.so* \
|
||||
usr/lib/libGLESv1_CM.so* \
|
||||
usr/lib/libGLESv2-fb.so \
|
||||
usr/lib/libGLESv2.so* \
|
||||
usr/lib/libGLSLC.so* \
|
||||
usr/lib/libGAL-fb.so \
|
||||
usr/lib/libGAL.so* \
|
||||
usr/lib/libVIVANTE-fb.so \
|
||||
usr/lib/libVIVANTE.so* \
|
||||
usr/lib/libOpenCL.so"
|
||||
|
||||
mkdir -p $SYSROOT_PREFIX/usr/lib
|
||||
cp -PRv $FLOAT/usr/lib/libEGL-fb.so \
|
||||
$FLOAT/usr/lib/libEGL.so* \
|
||||
$FLOAT/usr/lib/libGLES_CL.so \
|
||||
$FLOAT/usr/lib/libGLES_CM.so \
|
||||
$FLOAT/usr/lib/libGLESv1_CL.so* \
|
||||
$FLOAT/usr/lib/libGLESv1_CM.so* \
|
||||
$FLOAT/usr/lib/libGLESv2-fb.so \
|
||||
$FLOAT/usr/lib/libGLESv2.so* \
|
||||
$FLOAT/usr/lib/libGAL-fb.so \
|
||||
$FLOAT/usr/lib/libGAL.so* \
|
||||
$FLOAT/usr/lib/libVIVANTE-fb.so \
|
||||
$FLOAT/usr/lib/libVIVANTE.so* \
|
||||
$FLOAT/usr/lib/libOpenCL.so \
|
||||
$SYSROOT_PREFIX/usr/lib
|
||||
cp -PRv $LIBS_COPY $SYSROOT_PREFIX/usr/lib
|
||||
|
||||
mkdir -p $INSTALL/usr/lib
|
||||
cp -PRv $FLOAT/usr/lib/libEGL-fb.so \
|
||||
$FLOAT/usr/lib/libEGL.so* \
|
||||
$FLOAT/usr/lib/libGLES_CL.so \
|
||||
$FLOAT/usr/lib/libGLES_CM.so \
|
||||
$FLOAT/usr/lib/libGLESv1_CL.so* \
|
||||
$FLOAT/usr/lib/libGLESv1_CM.so* \
|
||||
$FLOAT/usr/lib/libGLESv2-fb.so \
|
||||
$FLOAT/usr/lib/libGLESv2.so* \
|
||||
$FLOAT/usr/lib/libGLSLC.so* \
|
||||
$FLOAT/usr/lib/libGAL-fb.so \
|
||||
$FLOAT/usr/lib/libGAL.so* \
|
||||
$FLOAT/usr/lib/libVIVANTE-fb.so \
|
||||
$FLOAT/usr/lib/libVIVANTE.so* \
|
||||
$FLOAT/usr/lib/libOpenCL.so \
|
||||
$INSTALL/usr/lib
|
||||
cp -PRv $LIBS_COPY $INSTALL/usr/lib
|
||||
}
|
||||
|
||||
post_install() {
|
||||
|
71
packages/graphics/imx-gpu-viv/package.mk
Normal file
71
packages/graphics/imx-gpu-viv/package.mk
Normal file
@ -0,0 +1,71 @@
|
||||
################################################################################
|
||||
# This file is part of OpenELEC - http://www.openelec.tv
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
#
|
||||
# OpenELEC 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 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# OpenELEC 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 OpenELEC. If not, see <http://www.gnu.org/licenses/>.
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="imx-gpu-viv"
|
||||
PKG_VERSION="5.0.11.p4.5-hfp"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="arm"
|
||||
PKG_LICENSE="nonfree"
|
||||
PKG_SITE="http://www.freescale.com"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_PRIORITY="optional"
|
||||
PKG_SECTION="graphics"
|
||||
PKG_SHORTDESC="imx-gpu-viv: OpenGL-ES and VIVANTE driver for imx6q"
|
||||
PKG_LONGDESC="imx-gpu-viv: OpenGL-ES and VIVANTE driver for imx6q"
|
||||
PKG_IS_ADDON="no"
|
||||
PKG_AUTORECONF="no"
|
||||
|
||||
make_target() {
|
||||
: # nothing to make
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p $SYSROOT_PREFIX/usr/include
|
||||
cp -PRv gpu-core/usr/include/* $SYSROOT_PREFIX/usr/include
|
||||
cp -PRv g2d/usr/include/* $SYSROOT_PREFIX/usr/include
|
||||
|
||||
LIBS_COPY="gpu-core/usr/lib/libEGL-fb.so \
|
||||
gpu-core/usr/lib/libEGL.so* \
|
||||
gpu-core/usr/lib/libGLES_CL.so* \
|
||||
gpu-core/usr/lib/libGLES_CM.so* \
|
||||
gpu-core/usr/lib/libGLESv1_CL.so* \
|
||||
gpu-core/usr/lib/libGLESv1_CM.so* \
|
||||
gpu-core/usr/lib/libGLESv2-fb.so \
|
||||
gpu-core/usr/lib/libGLESv2.so* \
|
||||
gpu-core/usr/lib/libGLSLC.so* \
|
||||
gpu-core/usr/lib/libGAL-fb.so \
|
||||
gpu-core/usr/lib/libGAL.so* \
|
||||
gpu-core/usr/lib/libGAL_egl.fb.so \
|
||||
gpu-core/usr/lib/libGAL_egl.so* \
|
||||
gpu-core/usr/lib/libVIVANTE-fb.so \
|
||||
gpu-core/usr/lib/libVIVANTE.so* \
|
||||
gpu-core/usr/lib/libOpenCL.so \
|
||||
gpu-core/usr/lib/libVSC.so \
|
||||
g2d/usr/lib/libg2d*.so*"
|
||||
|
||||
mkdir -p $SYSROOT_PREFIX/usr/lib
|
||||
cp -PRv $LIBS_COPY $SYSROOT_PREFIX/usr/lib
|
||||
|
||||
mkdir -p $INSTALL/usr/lib
|
||||
cp -PRv $LIBS_COPY $INSTALL/usr/lib
|
||||
}
|
||||
|
||||
post_install() {
|
||||
enable_service unbind-console.service
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=unbind Framebuffer console
|
||||
|
||||
ConditionPathExists=/sys/class/vtconsole/vtcon1/bind
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c 'echo 0 > /sys/class/vtconsole/vtcon1/bind'
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
@ -35,8 +35,11 @@ case "$LINUX" in
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
imx6)
|
||||
PKG_VERSION="cuboxi-3.14-ea83bda"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
PKG_VERSION="3.14-mx6-sr"
|
||||
PKG_COMMIT="4386797"
|
||||
PKG_SOURCE_DIR="$PKG_NAME-$PKG_VERSION-$PKG_COMMIT"
|
||||
PKG_SOURCE_NAME="$PKG_SOURCE_DIR.tar.xz"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_SOURCE_NAME"
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET imx6-status-led imx6-soc-fan"
|
||||
;;
|
||||
*)
|
||||
@ -55,8 +58,12 @@ if [ "$BUILD_ANDROID_BOOTIMG" = "yes" ]; then
|
||||
fi
|
||||
|
||||
post_patch() {
|
||||
if [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf ]; then
|
||||
if [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf ]; then
|
||||
KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf
|
||||
elif [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf ]; then
|
||||
KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf
|
||||
elif [ -f $PKG_DIR/config/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf ]; then
|
||||
KERNEL_CFG_FILE=$PKG_DIR/config/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf
|
||||
else
|
||||
KERNEL_CFG_FILE=$PKG_DIR/config/$PKG_NAME.$TARGET_ARCH.conf
|
||||
fi
|
||||
|
@ -201,7 +201,6 @@ if [ ! "$KODIPLAYER_DRIVER" = default ]; then
|
||||
KODI_CXXFLAGS="$KODI_CXXFLAGS $BCM2835_INCLUDES"
|
||||
elif [ "$KODIPLAYER_DRIVER" = libfslvpuwrap ]; then
|
||||
KODI_CODEC="--enable-codec=imxvpu"
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET gpu-viv-g2d"
|
||||
elif [ "$KODIPLAYER_DRIVER" = libamcodec ]; then
|
||||
KODI_CODEC="--enable-codec=amcodec"
|
||||
else
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 3.14.36 Kernel Configuration
|
||||
# Linux/arm 3.14.60 Kernel Configuration
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MIGHT_HAVE_PCI=y
|
||||
@ -9,7 +9,7 @@ CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_ARCH_HAS_CPUFREQ=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
@ -102,7 +102,7 @@ CONFIG_RCU_NOCB_CPU=y
|
||||
# CONFIG_RCU_NOCB_CPU_NONE is not set
|
||||
# CONFIG_RCU_NOCB_CPU_ZERO is not set
|
||||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
CONFIG_IKCONFIG=m
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
@ -272,7 +272,7 @@ CONFIG_INLINE_WRITE_UNLOCK=y
|
||||
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
|
||||
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
# CONFIG_FREEZER is not set
|
||||
CONFIG_FREEZER=y
|
||||
|
||||
#
|
||||
# System Type
|
||||
@ -339,7 +339,7 @@ CONFIG_ARCH_MXC=y
|
||||
#
|
||||
# Freescale i.MX support
|
||||
#
|
||||
CONFIG_MXC_DEBUG_BOARD=y
|
||||
# CONFIG_MXC_DEBUG_BOARD is not set
|
||||
CONFIG_HAVE_IMX_ANATOP=y
|
||||
CONFIG_HAVE_IMX_GPC=y
|
||||
CONFIG_HAVE_IMX_MMDC=y
|
||||
@ -357,8 +357,10 @@ CONFIG_HAVE_IMX_SRC=y
|
||||
#
|
||||
# CONFIG_SOC_IMX50 is not set
|
||||
# CONFIG_SOC_IMX53 is not set
|
||||
CONFIG_SOC_IMX6=y
|
||||
CONFIG_SOC_IMX6Q=y
|
||||
CONFIG_SOC_IMX6SL=y
|
||||
# CONFIG_SOC_IMX6SL is not set
|
||||
# CONFIG_SOC_IMX6SX is not set
|
||||
# CONFIG_SOC_VF610 is not set
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
@ -432,8 +434,6 @@ CONFIG_ARM_ERRATA_764369=y
|
||||
CONFIG_ARM_ERRATA_775420=y
|
||||
# CONFIG_ARM_ERRATA_798181 is not set
|
||||
# CONFIG_ARM_ERRATA_773022 is not set
|
||||
CONFIG_ARM_ERRATA_794072=y
|
||||
CONFIG_ARM_ERRATA_761320=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -456,6 +456,7 @@ CONFIG_PCIE_DW=y
|
||||
CONFIG_PCI_IMX6=y
|
||||
# CONFIG_EP_MODE_IN_EP_RC_SYS is not set
|
||||
# CONFIG_RC_MODE_IN_EP_RC_SYS is not set
|
||||
# CONFIG_PCI_HOST_GENERIC is not set
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIEAER=y
|
||||
# CONFIG_PCIE_ECRC is not set
|
||||
@ -482,10 +483,10 @@ CONFIG_HAVE_ARM_SCU=y
|
||||
CONFIG_HAVE_ARM_TWD=y
|
||||
# CONFIG_MCPM is not set
|
||||
# CONFIG_BIG_LITTLE is not set
|
||||
# CONFIG_VMSPLIT_3G is not set
|
||||
CONFIG_VMSPLIT_2G=y
|
||||
CONFIG_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0x80000000
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_ARM_PSCI is not set
|
||||
@ -531,6 +532,7 @@ CONFIG_CLEANCACHE=y
|
||||
CONFIG_FRONTSWAP=y
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_AREAS=7
|
||||
# CONFIG_ZBUD is not set
|
||||
# CONFIG_ZSWAP is not set
|
||||
@ -556,6 +558,8 @@ CONFIG_CMDLINE="root=/dev/ram0 rdinit=/init noram usbcore.autosuspend=-1 coheren
|
||||
# CONFIG_CMDLINE_FROM_BOOTLOADER is not set
|
||||
CONFIG_CMDLINE_EXTEND=y
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_ATAGS_PROC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
|
||||
@ -574,8 +578,8 @@ CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
@ -587,7 +591,7 @@ CONFIG_CPU_FREQ_GOV_INTERACTIVE=y
|
||||
#
|
||||
# ARM CPU frequency scaling drivers
|
||||
#
|
||||
CONFIG_ARM_IMX6_CPUFREQ=y
|
||||
CONFIG_ARM_IMX6Q_CPUFREQ=y
|
||||
# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
|
||||
|
||||
#
|
||||
@ -622,16 +626,25 @@ CONFIG_COREDUMP=y
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_PM_WAKELOCKS is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
# CONFIG_PM_ADVANCED_DEBUG is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
CONFIG_ARCH_HAS_OPP=y
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
|
||||
CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_RUNTIME=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_NET=y
|
||||
@ -1000,10 +1013,9 @@ CONFIG_EXTRA_FIRMWARE_DIR="firmware"
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_GENERIC_CPU_DEVICES is not set
|
||||
# CONFIG_HAVE_CPU_AUTOPROBE is not set
|
||||
CONFIG_SOC_BUS=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_AC97=m
|
||||
CONFIG_REGMAP_AC97=y
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_REGMAP_SPI=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
@ -1091,7 +1103,6 @@ CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_DATAFLASH=y
|
||||
# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
|
||||
# CONFIG_MTD_DATAFLASH_OTP is not set
|
||||
CONFIG_MTD_M25P80=y
|
||||
CONFIG_MTD_SST25L=y
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
@ -1124,6 +1135,7 @@ CONFIG_MTD_NAND_MXC=y
|
||||
# LPDDR flash memory drivers
|
||||
#
|
||||
# CONFIG_MTD_LPDDR is not set
|
||||
# CONFIG_MTD_SPI_NOR is not set
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
CONFIG_MTD_UBI_BEB_LIMIT=20
|
||||
@ -1354,11 +1366,9 @@ CONFIG_ATA_BMDMA=y
|
||||
# SATA SFF controllers with BMDMA
|
||||
#
|
||||
# CONFIG_ATA_PIIX is not set
|
||||
# CONFIG_SATA_HIGHBANK is not set
|
||||
# CONFIG_SATA_MV is not set
|
||||
# CONFIG_SATA_NV is not set
|
||||
# CONFIG_SATA_PROMISE is not set
|
||||
# CONFIG_SATA_RCAR is not set
|
||||
# CONFIG_SATA_SIL is not set
|
||||
# CONFIG_SATA_SIS is not set
|
||||
# CONFIG_SATA_SVW is not set
|
||||
@ -1371,14 +1381,10 @@ CONFIG_ATA_BMDMA=y
|
||||
#
|
||||
# CONFIG_PATA_ALI is not set
|
||||
# CONFIG_PATA_AMD is not set
|
||||
# CONFIG_PATA_ARASAN_CF is not set
|
||||
# CONFIG_PATA_ARTOP is not set
|
||||
# CONFIG_PATA_ATIIXP is not set
|
||||
# CONFIG_PATA_ATP867X is not set
|
||||
# CONFIG_PATA_CMD64X is not set
|
||||
# CONFIG_PATA_CS5520 is not set
|
||||
# CONFIG_PATA_CS5530 is not set
|
||||
# CONFIG_PATA_CS5536 is not set
|
||||
# CONFIG_PATA_CYPRESS is not set
|
||||
# CONFIG_PATA_EFAR is not set
|
||||
# CONFIG_PATA_HPT366 is not set
|
||||
@ -1399,7 +1405,6 @@ CONFIG_PATA_IMX=y
|
||||
# CONFIG_PATA_PDC_OLD is not set
|
||||
# CONFIG_PATA_RADISYS is not set
|
||||
# CONFIG_PATA_RDC is not set
|
||||
# CONFIG_PATA_SC1200 is not set
|
||||
# CONFIG_PATA_SCH is not set
|
||||
# CONFIG_PATA_SERVERWORKS is not set
|
||||
# CONFIG_PATA_SIL680 is not set
|
||||
@ -1701,8 +1706,10 @@ CONFIG_B43_HWRNG=y
|
||||
CONFIG_BRCMUTIL=m
|
||||
# CONFIG_BRCMSMAC is not set
|
||||
CONFIG_BRCMFMAC=m
|
||||
CONFIG_BRCMFMAC_PROTO_BCDC=y
|
||||
CONFIG_BRCMFMAC_SDIO=y
|
||||
CONFIG_BRCMFMAC_USB=y
|
||||
# CONFIG_BRCMFMAC_PCIE is not set
|
||||
# CONFIG_BRCM_TRACING is not set
|
||||
# CONFIG_BRCMDBG is not set
|
||||
# CONFIG_HOSTAP is not set
|
||||
@ -1833,7 +1840,9 @@ CONFIG_TOUCHSCREEN_ADS7846=m
|
||||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||
CONFIG_TOUCHSCREEN_EGALAX=m
|
||||
# CONFIG_TOUCHSCREEN_ELAN is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_GOODIX is not set
|
||||
# CONFIG_TOUCHSCREEN_ILI210X is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
@ -1854,23 +1863,23 @@ CONFIG_TOUCHSCREEN_EGALAX=m
|
||||
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
|
||||
# CONFIG_TOUCHSCREEN_MC13783 is not set
|
||||
CONFIG_TOUCHSCREEN_USB_EGALAX=y
|
||||
# CONFIG_TOUCHSCREEN_USB_PANJIT is not set
|
||||
CONFIG_TOUCHSCREEN_USB_PANJIT=y
|
||||
CONFIG_TOUCHSCREEN_USB_3M=y
|
||||
# CONFIG_TOUCHSCREEN_USB_ITM is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_ETURBO is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_DMC_TSC10 is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_IRTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_IDEALTEK is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_GOTOP is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_JASTEC is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_E2I is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_ZYTRONIC is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_ETT_TC45USB is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_NEXIO is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_EASYTOUCH is not set
|
||||
CONFIG_TOUCHSCREEN_USB_ITM=y
|
||||
CONFIG_TOUCHSCREEN_USB_ETURBO=y
|
||||
CONFIG_TOUCHSCREEN_USB_GUNZE=y
|
||||
CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
|
||||
CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
|
||||
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
|
||||
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
|
||||
CONFIG_TOUCHSCREEN_USB_GOTOP=y
|
||||
CONFIG_TOUCHSCREEN_USB_JASTEC=y
|
||||
CONFIG_TOUCHSCREEN_USB_ELO=y
|
||||
CONFIG_TOUCHSCREEN_USB_E2I=y
|
||||
CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
|
||||
CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
|
||||
CONFIG_TOUCHSCREEN_USB_NEXIO=y
|
||||
CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
|
||||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC2005 is not set
|
||||
@ -1902,6 +1911,7 @@ CONFIG_INPUT_UINPUT=y
|
||||
# CONFIG_INPUT_ADXL34X is not set
|
||||
# CONFIG_INPUT_IMS_PCU is not set
|
||||
# CONFIG_INPUT_CMA3000 is not set
|
||||
# CONFIG_INPUT_ISL29023 is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
@ -1916,6 +1926,7 @@ CONFIG_TTY=y
|
||||
CONFIG_VT=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_VT_CONSOLE_SLEEP=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
@ -1957,6 +1968,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_ST_ASC is not set
|
||||
# CONFIG_TTY_PRINTK is not set
|
||||
CONFIG_FSL_OTP=y
|
||||
# CONFIG_FSL_OTP_WRITE_ENABLE is not set
|
||||
# CONFIG_HVC_DCC is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
@ -2109,7 +2121,6 @@ CONFIG_PINCONF=y
|
||||
# CONFIG_PINCTRL_CAPRI is not set
|
||||
CONFIG_PINCTRL_IMX=y
|
||||
CONFIG_PINCTRL_IMX6Q=y
|
||||
CONFIG_PINCTRL_IMX6SL=y
|
||||
# CONFIG_PINCTRL_MSM8X74 is not set
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
|
||||
@ -2227,9 +2238,9 @@ CONFIG_POWER_SUPPLY=y
|
||||
# CONFIG_CHARGER_SMB347 is not set
|
||||
# CONFIG_IMX6_USB_CHARGER is not set
|
||||
CONFIG_POWER_RESET=y
|
||||
# CONFIG_POWER_RESET_GPIO is not set
|
||||
CONFIG_POWER_RESET_GPIO=y
|
||||
# CONFIG_POWER_RESET_RESTART is not set
|
||||
CONFIG_POWER_RESET_UDOO=y
|
||||
CONFIG_POWER_RESET_SNVS=y
|
||||
# CONFIG_POWER_AVS is not set
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
@ -2267,7 +2278,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_G762 is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_GPIO_FAN is not set
|
||||
CONFIG_SENSORS_GPIO_FAN=m
|
||||
# CONFIG_SENSORS_HIH6130 is not set
|
||||
# CONFIG_SENSORS_HTU21 is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
@ -2297,6 +2308,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_MAX16065 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_MAX1668 is not set
|
||||
# CONFIG_SENSORS_MAX17135 is not set
|
||||
# CONFIG_SENSORS_MAX197 is not set
|
||||
# CONFIG_SENSORS_MAX6639 is not set
|
||||
# CONFIG_SENSORS_MAX6642 is not set
|
||||
@ -2345,6 +2357,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_SENSORS_MC13783_ADC is not set
|
||||
# CONFIG_SENSORS_MAG3110 is not set
|
||||
# CONFIG_MXC_MMA8451 is not set
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_HWMON=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
@ -2405,6 +2418,7 @@ CONFIG_MFD_DA9052_I2C=y
|
||||
# CONFIG_MFD_DA9055 is not set
|
||||
# CONFIG_MFD_DA9063 is not set
|
||||
CONFIG_MFD_MXC_HDMI=y
|
||||
# CONFIG_MFD_MXC_HDMI_ANDROID is not set
|
||||
CONFIG_MFD_MC13XXX=m
|
||||
CONFIG_MFD_MC13XXX_SPI=m
|
||||
CONFIG_MFD_MC13XXX_I2C=m
|
||||
@ -2418,6 +2432,7 @@ CONFIG_MFD_MC13XXX_I2C=m
|
||||
# CONFIG_MFD_88PM800 is not set
|
||||
# CONFIG_MFD_88PM805 is not set
|
||||
# CONFIG_MFD_88PM860X is not set
|
||||
# CONFIG_MFD_MAX17135 is not set
|
||||
# CONFIG_MFD_MAX14577 is not set
|
||||
# CONFIG_MFD_MAX77686 is not set
|
||||
# CONFIG_MFD_MAX77693 is not set
|
||||
@ -2473,6 +2488,7 @@ CONFIG_MFD_SYSCON=y
|
||||
# CONFIG_MFD_WM831X_SPI is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_WM8994 is not set
|
||||
# CONFIG_MFD_TDA1997X is not set
|
||||
# CONFIG_VEXPRESS_CONFIG is not set
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_DEBUG is not set
|
||||
@ -2491,6 +2507,7 @@ CONFIG_REGULATOR_ANATOP=y
|
||||
# CONFIG_REGULATOR_LP3972 is not set
|
||||
# CONFIG_REGULATOR_LP872X is not set
|
||||
# CONFIG_REGULATOR_LP8755 is not set
|
||||
# CONFIG_REGULATOR_LTC3676 is not set
|
||||
# CONFIG_REGULATOR_MAX1586 is not set
|
||||
# CONFIG_REGULATOR_MAX8649 is not set
|
||||
# CONFIG_REGULATOR_MAX8660 is not set
|
||||
@ -2663,7 +2680,9 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||
# CONFIG_VIDEO_CAFE_CCIC is not set
|
||||
# CONFIG_VIDEO_TIMBERDALE is not set
|
||||
CONFIG_VIDEO_MXC_OUTPUT=y
|
||||
# CONFIG_VIDEO_MXC_CAPTURE is not set
|
||||
CONFIG_VIDEO_MXC_IPU_OUTPUT=y
|
||||
# CONFIG_VIDEO_MXC_PXP_V4L2 is not set
|
||||
# CONFIG_SOC_CAMERA is not set
|
||||
# CONFIG_V4L_MEM2MEM_DRIVERS is not set
|
||||
# CONFIG_V4L_TEST_DRIVERS is not set
|
||||
@ -2889,9 +2908,15 @@ CONFIG_DVB_SP2=m
|
||||
#
|
||||
CONFIG_VGA_ARB=y
|
||||
CONFIG_VGA_ARB_MAX_GPUS=16
|
||||
|
||||
#
|
||||
# Vivante GPU support
|
||||
#
|
||||
CONFIG_VIVANTE_GALCORE=y
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
CONFIG_VIDEOMODE_HELPERS=y
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
@ -2916,7 +2941,6 @@ CONFIG_FB_MODE_HELPERS=y
|
||||
#
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_ARMHDLCD is not set
|
||||
# CONFIG_FB_IMX is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
@ -2947,20 +2971,39 @@ CONFIG_FB_MODE_HELPERS=y
|
||||
# CONFIG_FB_UDL is not set
|
||||
# CONFIG_FB_GOLDFISH is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
CONFIG_FB_VIRTUAL_PHYMEM=y
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_FB_MX3 is not set
|
||||
# CONFIG_FB_BROADSHEET is not set
|
||||
# CONFIG_FB_AUO_K190X is not set
|
||||
# CONFIG_FB_MXS is not set
|
||||
# CONFIG_FB_SIMPLE is not set
|
||||
# CONFIG_EXYNOS_VIDEO is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
# CONFIG_BACKLIGHT_PWM is not set
|
||||
# CONFIG_BACKLIGHT_DA9052 is not set
|
||||
# CONFIG_BACKLIGHT_ADP8860 is not set
|
||||
# CONFIG_BACKLIGHT_ADP8870 is not set
|
||||
# CONFIG_BACKLIGHT_LM3630A is not set
|
||||
# CONFIG_BACKLIGHT_LM3639 is not set
|
||||
# CONFIG_BACKLIGHT_LP855X is not set
|
||||
CONFIG_BACKLIGHT_GPIO=y
|
||||
# CONFIG_BACKLIGHT_LV5207LP is not set
|
||||
# CONFIG_BACKLIGHT_BD6107 is not set
|
||||
CONFIG_FB_MXC=y
|
||||
CONFIG_FB_MXC_SYNC_PANEL=y
|
||||
# CONFIG_FB_MXC_TVOUT_ADV739X is not set
|
||||
CONFIG_FB_MXC_LDB=y
|
||||
# CONFIG_FB_MXC_MIPI_DSI is not set
|
||||
CONFIG_FB_MXC_HDMI=y
|
||||
CONFIG_FB_MXC_EDID=y
|
||||
# CONFIG_FB_MXC_EINK_PANEL is not set
|
||||
CONFIG_FB_MXC_DCIC=y
|
||||
# CONFIG_HANNSTAR_CABC is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
@ -3078,25 +3121,44 @@ CONFIG_SND_SOC_AC97_BUS=y
|
||||
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
|
||||
# CONFIG_SND_ATMEL_SOC is not set
|
||||
# CONFIG_SND_DESIGNWARE_I2S is not set
|
||||
CONFIG_SND_SOC_FSL_SSI=m
|
||||
CONFIG_SND_SOC_FSL_SPDIF=m
|
||||
|
||||
#
|
||||
# SoC Audio for Freescale CPUs
|
||||
#
|
||||
|
||||
#
|
||||
# Common SoC Audio options for Freescale CPUs:
|
||||
#
|
||||
CONFIG_SND_SOC_FSL_ASRC=y
|
||||
CONFIG_SND_SOC_FSL_SAI=y
|
||||
CONFIG_SND_SOC_FSL_SSI=y
|
||||
CONFIG_SND_SOC_FSL_SPDIF=y
|
||||
# CONFIG_SND_SOC_FSL_ESAI is not set
|
||||
CONFIG_SND_SOC_FSL_HDMI=y
|
||||
CONFIG_SND_IMX_SOC=y
|
||||
CONFIG_SND_SOC_IMX_PCM_DMA=y
|
||||
CONFIG_SND_SOC_IMX_AUDMUX=y
|
||||
CONFIG_SND_IMX_SOC=y
|
||||
CONFIG_SND_SOC_IMX_HDMI_DMA=y
|
||||
CONFIG_SND_SOC_IMX_AUDMUX=m
|
||||
|
||||
#
|
||||
# SoC Audio support for Freescale i.MX boards:
|
||||
#
|
||||
# CONFIG_SND_SOC_IMX_CS42888 is not set
|
||||
# CONFIG_SND_SOC_IMX_WM8731 is not set
|
||||
# CONFIG_SND_SOC_IMX_WM8962 is not set
|
||||
CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_AC97_VT1613=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
CONFIG_SND_SOC_IMX_HDMI=y
|
||||
CONFIG_SND_SOC_IMX_SGTL5000=y
|
||||
CONFIG_SND_SOC_IMX_AC97_VT1613=y
|
||||
# CONFIG_SND_SOC_IMX_MQS is not set
|
||||
CONFIG_SND_SOC_IMX_SPDIF=y
|
||||
# CONFIG_SND_SOC_IMX_MC13783 is not set
|
||||
CONFIG_SND_SOC_IMX_HDMI=y
|
||||
# CONFIG_SND_SOC_IMX_SI476X is not set
|
||||
# CONFIG_SND_SOC_IMX_TDA1997X is not set
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=y
|
||||
# CONFIG_SND_SOC_CS42XX8_I2C is not set
|
||||
CONFIG_SND_SOC_HDMI_CODEC=y
|
||||
CONFIG_SND_SOC_SGTL5000=m
|
||||
CONFIG_SND_SOC_VT1613=m
|
||||
CONFIG_SND_SOC_SGTL5000=y
|
||||
CONFIG_SND_SOC_VT1613=y
|
||||
# CONFIG_SND_SIMPLE_CARD is not set
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_AC97_BUS=y
|
||||
@ -3209,6 +3271,7 @@ CONFIG_USB_DEFAULT_PERSIST=y
|
||||
# CONFIG_USB_OTG is not set
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
||||
# CONFIG_USB_OTG_FSM is not set
|
||||
CONFIG_USB_MON=m
|
||||
# CONFIG_USB_WUSB_CBAF is not set
|
||||
|
||||
@ -3222,7 +3285,6 @@ CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||
CONFIG_USB_EHCI_PCI=y
|
||||
# CONFIG_USB_EHCI_MXC is not set
|
||||
# CONFIG_USB_EHCI_HCD_SYNOPSYS is not set
|
||||
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
|
||||
# CONFIG_USB_OXU210HP_HCD is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
@ -3370,7 +3432,6 @@ CONFIG_USB_SERIAL_PL2303=m
|
||||
# USB Physical Layer drivers
|
||||
#
|
||||
CONFIG_USB_PHY=y
|
||||
# CONFIG_USB_OTG_FSM is not set
|
||||
# CONFIG_NOP_USB_XCEIV is not set
|
||||
# CONFIG_AM335X_PHY_USB is not set
|
||||
# CONFIG_SAMSUNG_USB2PHY is not set
|
||||
@ -3476,20 +3537,8 @@ CONFIG_MMC_SDHCI_ESDHC_IMX=y
|
||||
# MXC support drivers
|
||||
#
|
||||
CONFIG_MXC_IPU=y
|
||||
|
||||
#
|
||||
# MXC Vivante GPU support
|
||||
#
|
||||
CONFIG_MXC_GPU_VIV=y
|
||||
# CONFIG_MXC_GPU_VIV_V5 is not set
|
||||
CONFIG_MXC_GPU_VIV_V4=y
|
||||
CONFIG_MXC_IPU_V3=y
|
||||
|
||||
#
|
||||
# MXC Asynchronous Sample Rate Converter support
|
||||
#
|
||||
CONFIG_MXC_ASRC=y
|
||||
|
||||
#
|
||||
# MXC VPU(Video Processing Unit) support
|
||||
#
|
||||
@ -3700,7 +3749,9 @@ CONFIG_W35UND=m
|
||||
# CONFIG_RTL8192U is not set
|
||||
# CONFIG_RTLLIB is not set
|
||||
CONFIG_R8712U=m
|
||||
# CONFIG_R8188EU is not set
|
||||
CONFIG_R8188EU=m
|
||||
CONFIG_88EU_AP_MODE=y
|
||||
# CONFIG_88EU_P2P is not set
|
||||
# CONFIG_R8821AE is not set
|
||||
CONFIG_RTS5139=m
|
||||
# CONFIG_RTS5139_DEBUG is not set
|
||||
@ -4187,15 +4238,16 @@ CONFIG_CRYPTO=y
|
||||
#
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD=m
|
||||
CONFIG_CRYPTO_AEAD=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG=m
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_PCOMP2=y
|
||||
# CONFIG_CRYPTO_CRYPTODEV is not set
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_USER is not set
|
||||
@ -4205,7 +4257,7 @@ CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
|
||||
# CONFIG_CRYPTO_PCRYPT is not set
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
CONFIG_CRYPTO_AUTHENC=y
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
@ -4291,7 +4343,22 @@ CONFIG_CRYPTO_LZO=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_USER_API_HASH is not set
|
||||
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_JR=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_TEST is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_SM_SLOTSIZE=7
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set
|
||||
# CONFIG_CRYPTO_DEV_SAHARA is not set
|
||||
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
|
||||
# CONFIG_BINARY_PRINTF is not set
|
||||
|
@ -54,15 +54,22 @@
|
||||
# Kernel extra targets to build
|
||||
KERNEL_UBOOT_EXTRA_TARGET="imx6q-cubox-i.dtb imx6dl-cubox-i.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6q-hummingboard.dtb imx6dl-hummingboard.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6q-hummingboard2.dtb imx6dl-hummingboard2.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6q-tbs2910.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6q-udoo.dtb imx6dl-udoo.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6q-udoo-15lvds.dtb imx6q-udoo-7lvds.dtb"
|
||||
KERNEL_UBOOT_EXTRA_TARGET="$KERNEL_UBOOT_EXTRA_TARGET imx6dl-udoo-15lvds.dtb imx6dl-udoo-7lvds.dtb"
|
||||
|
||||
# Additional kernel make parameters (for example to specify the u-boot loadaddress)
|
||||
KERNEL_MAKE_EXTRACMD=""
|
||||
|
||||
# Kernel to use. values can be:
|
||||
# default: default mainline kernel
|
||||
LINUX="imx6"
|
||||
if [ -z "$LINUX_VERSION" ]; then
|
||||
LINUX="imx6"
|
||||
else
|
||||
LINUX="imx6-4.4-xbian"
|
||||
fi
|
||||
|
||||
|
||||
################################################################################
|
||||
@ -95,8 +102,12 @@
|
||||
# OpenGL(X) implementation to use (no / mesa)
|
||||
OPENGL="no"
|
||||
|
||||
# OpenGL-ES implementation to use (no / bcm2835-driver / gpu-viv-bin-mx6q)
|
||||
OPENGLES="gpu-viv-bin-mx6q"
|
||||
# OpenGL-ES implementation to use (no / bcm2835-driver / imx-gpu-viv)
|
||||
if [ "$LINUX" = "imx6" ]; then
|
||||
OPENGLES="imx-gpu-viv"
|
||||
else
|
||||
OPENGLES="gpu-viv-bin-mx6q"
|
||||
fi
|
||||
|
||||
# include uvesafb support (yes / no)
|
||||
UVESAFB_SUPPORT="no"
|
||||
|
@ -0,0 +1,295 @@
|
||||
From 21ecd35bd9e5030a6b33a41dea3a2653609b09d7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Vicman <peter.vicman@gmail.com>
|
||||
Date: Thu, 24 Mar 2016 15:53:56 +0100
|
||||
Subject: [PATCH] dts: udoo: add both lvds displays
|
||||
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 4 +++
|
||||
arch/arm/boot/dts/imx6dl-udoo-15lvds.dts | 54 +++++++++++++++++++++++++++++
|
||||
arch/arm/boot/dts/imx6dl-udoo-7lvds.dts | 49 +++++++++++++++++++++++++++
|
||||
arch/arm/boot/dts/imx6q-udoo-15lvds.dts | 58 ++++++++++++++++++++++++++++++++
|
||||
arch/arm/boot/dts/imx6q-udoo-7lvds.dts | 53 +++++++++++++++++++++++++++++
|
||||
arch/arm/boot/dts/imx6qdl-udoo.dtsi | 5 +--
|
||||
6 files changed, 221 insertions(+), 2 deletions(-)
|
||||
create mode 100644 arch/arm/boot/dts/imx6dl-udoo-15lvds.dts
|
||||
create mode 100644 arch/arm/boot/dts/imx6dl-udoo-7lvds.dts
|
||||
create mode 100644 arch/arm/boot/dts/imx6q-udoo-15lvds.dts
|
||||
create mode 100644 arch/arm/boot/dts/imx6q-udoo-7lvds.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||
index 08ff98a..ffffb8c 100644
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -167,6 +167,8 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
||||
imx6dl-sabresd-pf200.dtb \
|
||||
imx6dl-sabresd-hdcp.dtb \
|
||||
imx6dl-udoo.dtb \
|
||||
+ imx6dl-udoo-7lvds.dtb \
|
||||
+ imx6dl-udoo-15lvds.dtb \
|
||||
imx6dl-sbc-fx6.dtb \
|
||||
imx6dl-sbc-fx6m.dtb \
|
||||
imx6dl-wandboard.dtb \
|
||||
@@ -192,6 +194,8 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
||||
imx6q-sbc-fx6m.dtb \
|
||||
imx6q-sbc6x.dtb \
|
||||
imx6q-udoo.dtb \
|
||||
+ imx6q-udoo-7lvds.dtb \
|
||||
+ imx6q-udoo-15lvds.dtb \
|
||||
imx6q-wandboard.dtb \
|
||||
imx6q-tbs2910.dtb \
|
||||
imx6sl-evk.dtb \
|
||||
diff --git a/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts b/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts
|
||||
new file mode 100644
|
||||
index 0000000..ac189cc
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6dl-udoo-15lvds.dts
|
||||
@@ -0,0 +1,54 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ * Author: Ettore Chimenti <ettore.chimenti@udoo.org>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6dl.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Udoo i.MX6 Dual-lite Board";
|
||||
+ compatible = "udoo,imx6dl-udoo", "fsl,imx6dl";
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str = "1360x768M@60";
|
||||
+ default_bpp = <32>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <1>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ reg_lcd0_pwr: regulator@1 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ reg_lcd0_backlight: regulator@2 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ lvds-channel@0 {
|
||||
+ status = "okay";
|
||||
+ fsl,data-width = <24>;
|
||||
+
|
||||
+ display-timings {
|
||||
+ native-mode = <&timing2>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts b/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts
|
||||
new file mode 100644
|
||||
index 0000000..da6ba4d
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6dl-udoo-7lvds.dts
|
||||
@@ -0,0 +1,49 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ * Author: Ettore Chimenti <ettore.chimenti@udoo.org>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6dl.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Udoo i.MX6 Dual-lite Board";
|
||||
+ compatible = "udoo,imx6dl-udoo", "fsl,imx6dl";
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB666";
|
||||
+ mode_str = "800x480M@60";
|
||||
+ default_bpp = <32>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ reg_lcd0_pwr: regulator@1 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ reg_lcd0_backlight: regulator@2 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ lvds-channel@0 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6q-udoo-15lvds.dts b/arch/arm/boot/dts/imx6q-udoo-15lvds.dts
|
||||
new file mode 100644
|
||||
index 0000000..35e7651
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6q-udoo-15lvds.dts
|
||||
@@ -0,0 +1,58 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ * Author: Ettore Chimenti <ettore.chimenti@udoo.org>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6q.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Udoo i.MX6 Quad Board";
|
||||
+ compatible = "udoo,imx6q-udoo", "fsl,imx6q";
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str = "1360x768M@60";
|
||||
+ default_bpp = <32>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <1>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ reg_lcd0_pwr: regulator@1 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ reg_lcd0_backlight: regulator@2 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sata {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ lvds-channel@0 {
|
||||
+ status = "okay";
|
||||
+ fsl,data-width = <24>;
|
||||
+
|
||||
+ display-timings {
|
||||
+ native-mode = <&timing2>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6q-udoo-7lvds.dts b/arch/arm/boot/dts/imx6q-udoo-7lvds.dts
|
||||
new file mode 100644
|
||||
index 0000000..e5f3125
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6q-udoo-7lvds.dts
|
||||
@@ -0,0 +1,53 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ * Author: Ettore Chimenti <ettore.chimenti@udoo.org>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6q.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Udoo i.MX6 Quad Board";
|
||||
+ compatible = "udoo,imx6q-udoo", "fsl,imx6q";
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB666";
|
||||
+ mode_str = "800x480M@60";
|
||||
+ default_bpp = <32>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ reg_lcd0_pwr: regulator@1 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ reg_lcd0_backlight: regulator@2 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sata {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ lvds-channel@0 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
index 2f6ec9a..7dca6db 100755
|
||||
--- a/arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
+++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
@@ -254,9 +254,10 @@
|
||||
vsync-len = <2>;
|
||||
};
|
||||
|
||||
- timing2: 1366x768 { // 15.6" display
|
||||
+ // IPU needs X and Y by modulo 8
|
||||
+ timing2: 1360x768 { // 15.6" display
|
||||
clock-frequency = <76000000>;
|
||||
- hactive = <1366>;
|
||||
+ hactive = <1360>;
|
||||
vactive = <768>;
|
||||
hback-porch = <220>;
|
||||
hfront-porch = <40>;
|
@ -1,68 +0,0 @@
|
||||
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
|
||||
index bc64f05..b1a0380 100644
|
||||
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h
|
||||
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
|
||||
@@ -2250,7 +2250,7 @@ static inline void *ieee80211_priv(struct net_device *dev)
|
||||
return ((struct ieee80211_device *)netdev_priv(dev))->priv;
|
||||
}
|
||||
|
||||
-extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
+static inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
{
|
||||
/* Single white space is for Linksys APs */
|
||||
if (essid_len == 1 && essid[0] == ' ')
|
||||
@@ -2266,7 +2266,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode)
|
||||
+static inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode)
|
||||
{
|
||||
/*
|
||||
* It is possible for both access points and our device to support
|
||||
@@ -2292,7 +2292,7 @@ extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mod
|
||||
return 0;
|
||||
}
|
||||
|
||||
-extern inline int ieee80211_get_hdrlen(u16 fc)
|
||||
+static inline int ieee80211_get_hdrlen(u16 fc)
|
||||
{
|
||||
int hdrlen = IEEE80211_3ADDR_LEN;
|
||||
|
||||
@@ -2578,12 +2578,12 @@ void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee);
|
||||
|
||||
extern const long ieee80211_wlan_frequencies[];
|
||||
|
||||
-extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
|
||||
+static inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
|
||||
{
|
||||
ieee->scans++;
|
||||
}
|
||||
|
||||
-extern inline int ieee80211_get_scans(struct ieee80211_device *ieee)
|
||||
+static inline int ieee80211_get_scans(struct ieee80211_device *ieee)
|
||||
{
|
||||
return ieee->scans;
|
||||
}
|
||||
diff --git a/drivers/staging/rtl8712/ieee80211.h b/drivers/staging/rtl8712/ieee80211.h
|
||||
index da4000e..8269be8 100644
|
||||
--- a/drivers/staging/rtl8712/ieee80211.h
|
||||
+++ b/drivers/staging/rtl8712/ieee80211.h
|
||||
@@ -734,7 +734,7 @@ enum ieee80211_state {
|
||||
#define IEEE_G (1<<2)
|
||||
#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
|
||||
|
||||
-extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
+static inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
{
|
||||
/* Single white space is for Linksys APs */
|
||||
if (essid_len == 1 && essid[0] == ' ')
|
||||
@@ -748,7 +748,7 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-extern inline int ieee80211_get_hdrlen(u16 fc)
|
||||
+static inline int ieee80211_get_hdrlen(u16 fc)
|
||||
{
|
||||
int hdrlen = 24;
|
||||
|
@ -1,893 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 230c7f694ab7..188523e9e880 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 14
|
||||
+SUBLEVEL = 15
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
@@ -639,6 +639,8 @@ KBUILD_CFLAGS += -fomit-frame-pointer
|
||||
endif
|
||||
endif
|
||||
|
||||
+KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
|
||||
+
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
KBUILD_CFLAGS += -g
|
||||
KBUILD_AFLAGS += -Wa,--gdwarf-2
|
||||
diff --git a/arch/parisc/include/uapi/asm/signal.h b/arch/parisc/include/uapi/asm/signal.h
|
||||
index a2fa297196bc..f5645d6a89f2 100644
|
||||
--- a/arch/parisc/include/uapi/asm/signal.h
|
||||
+++ b/arch/parisc/include/uapi/asm/signal.h
|
||||
@@ -69,8 +69,6 @@
|
||||
#define SA_NOMASK SA_NODEFER
|
||||
#define SA_ONESHOT SA_RESETHAND
|
||||
|
||||
-#define SA_RESTORER 0x04000000 /* obsolete -- ignored */
|
||||
-
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
|
||||
index a48bc79a111f..184d305af3e7 100644
|
||||
--- a/arch/s390/kernel/ptrace.c
|
||||
+++ b/arch/s390/kernel/ptrace.c
|
||||
@@ -323,9 +323,14 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
|
||||
unsigned long mask = PSW_MASK_USER;
|
||||
|
||||
mask |= is_ri_task(child) ? PSW_MASK_RI : 0;
|
||||
- if ((data & ~mask) != PSW_USER_BITS)
|
||||
+ if ((data ^ PSW_USER_BITS) & ~mask)
|
||||
+ /* Invalid psw mask. */
|
||||
+ return -EINVAL;
|
||||
+ if ((data & PSW_MASK_ASC) == PSW_ASC_HOME)
|
||||
+ /* Invalid address-space-control bits */
|
||||
return -EINVAL;
|
||||
if ((data & PSW_MASK_EA) && !(data & PSW_MASK_BA))
|
||||
+ /* Invalid addressing mode bits */
|
||||
return -EINVAL;
|
||||
}
|
||||
*(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
|
||||
@@ -661,9 +666,12 @@ static int __poke_user_compat(struct task_struct *child,
|
||||
|
||||
mask |= is_ri_task(child) ? PSW32_MASK_RI : 0;
|
||||
/* Build a 64 bit psw mask from 31 bit mask. */
|
||||
- if ((tmp & ~mask) != PSW32_USER_BITS)
|
||||
+ if ((tmp ^ PSW32_USER_BITS) & ~mask)
|
||||
/* Invalid psw mask. */
|
||||
return -EINVAL;
|
||||
+ if ((data & PSW32_MASK_ASC) == PSW32_ASC_HOME)
|
||||
+ /* Invalid address-space-control bits */
|
||||
+ return -EINVAL;
|
||||
regs->psw.mask = (regs->psw.mask & ~PSW_MASK_USER) |
|
||||
(regs->psw.mask & PSW_MASK_BA) |
|
||||
(__u64)(tmp & mask) << 32;
|
||||
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
|
||||
index ec3b8ba68096..04da6c2194ba 100644
|
||||
--- a/arch/x86/boot/header.S
|
||||
+++ b/arch/x86/boot/header.S
|
||||
@@ -91,10 +91,9 @@ bs_die:
|
||||
|
||||
.section ".bsdata", "a"
|
||||
bugger_off_msg:
|
||||
- .ascii "Direct floppy boot is not supported. "
|
||||
- .ascii "Use a boot loader program instead.\r\n"
|
||||
+ .ascii "Use a boot loader.\r\n"
|
||||
.ascii "\n"
|
||||
- .ascii "Remove disk and press any key to reboot ...\r\n"
|
||||
+ .ascii "Remove disk and press any key to reboot...\r\n"
|
||||
.byte 0
|
||||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
@@ -108,7 +107,7 @@ coff_header:
|
||||
#else
|
||||
.word 0x8664 # x86-64
|
||||
#endif
|
||||
- .word 3 # nr_sections
|
||||
+ .word 4 # nr_sections
|
||||
.long 0 # TimeDateStamp
|
||||
.long 0 # PointerToSymbolTable
|
||||
.long 1 # NumberOfSymbols
|
||||
@@ -250,6 +249,25 @@ section_table:
|
||||
.word 0 # NumberOfLineNumbers
|
||||
.long 0x60500020 # Characteristics (section flags)
|
||||
|
||||
+ #
|
||||
+ # The offset & size fields are filled in by build.c.
|
||||
+ #
|
||||
+ .ascii ".bss"
|
||||
+ .byte 0
|
||||
+ .byte 0
|
||||
+ .byte 0
|
||||
+ .byte 0
|
||||
+ .long 0
|
||||
+ .long 0x0
|
||||
+ .long 0 # Size of initialized data
|
||||
+ # on disk
|
||||
+ .long 0x0
|
||||
+ .long 0 # PointerToRelocations
|
||||
+ .long 0 # PointerToLineNumbers
|
||||
+ .word 0 # NumberOfRelocations
|
||||
+ .word 0 # NumberOfLineNumbers
|
||||
+ .long 0xc8000080 # Characteristics (section flags)
|
||||
+
|
||||
#endif /* CONFIG_EFI_STUB */
|
||||
|
||||
# Kernel attributes; used by setup. This is part 1 of the
|
||||
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
|
||||
index 8e15b22391fc..3dafaeb9f549 100644
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -142,7 +142,7 @@ static void usage(void)
|
||||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
|
||||
-static void update_pecoff_section_header(char *section_name, u32 offset, u32 size)
|
||||
+static void update_pecoff_section_header_fields(char *section_name, u32 vma, u32 size, u32 datasz, u32 offset)
|
||||
{
|
||||
unsigned int pe_header;
|
||||
unsigned short num_sections;
|
||||
@@ -163,10 +163,10 @@ static void update_pecoff_section_header(char *section_name, u32 offset, u32 siz
|
||||
put_unaligned_le32(size, section + 0x8);
|
||||
|
||||
/* section header vma field */
|
||||
- put_unaligned_le32(offset, section + 0xc);
|
||||
+ put_unaligned_le32(vma, section + 0xc);
|
||||
|
||||
/* section header 'size of initialised data' field */
|
||||
- put_unaligned_le32(size, section + 0x10);
|
||||
+ put_unaligned_le32(datasz, section + 0x10);
|
||||
|
||||
/* section header 'file offset' field */
|
||||
put_unaligned_le32(offset, section + 0x14);
|
||||
@@ -178,6 +178,11 @@ static void update_pecoff_section_header(char *section_name, u32 offset, u32 siz
|
||||
}
|
||||
}
|
||||
|
||||
+static void update_pecoff_section_header(char *section_name, u32 offset, u32 size)
|
||||
+{
|
||||
+ update_pecoff_section_header_fields(section_name, offset, size, size, offset);
|
||||
+}
|
||||
+
|
||||
static void update_pecoff_setup_and_reloc(unsigned int size)
|
||||
{
|
||||
u32 setup_offset = 0x200;
|
||||
@@ -202,9 +207,6 @@ static void update_pecoff_text(unsigned int text_start, unsigned int file_sz)
|
||||
|
||||
pe_header = get_unaligned_le32(&buf[0x3c]);
|
||||
|
||||
- /* Size of image */
|
||||
- put_unaligned_le32(file_sz, &buf[pe_header + 0x50]);
|
||||
-
|
||||
/*
|
||||
* Size of code: Subtract the size of the first sector (512 bytes)
|
||||
* which includes the header.
|
||||
@@ -219,6 +221,22 @@ static void update_pecoff_text(unsigned int text_start, unsigned int file_sz)
|
||||
update_pecoff_section_header(".text", text_start, text_sz);
|
||||
}
|
||||
|
||||
+static void update_pecoff_bss(unsigned int file_sz, unsigned int init_sz)
|
||||
+{
|
||||
+ unsigned int pe_header;
|
||||
+ unsigned int bss_sz = init_sz - file_sz;
|
||||
+
|
||||
+ pe_header = get_unaligned_le32(&buf[0x3c]);
|
||||
+
|
||||
+ /* Size of uninitialized data */
|
||||
+ put_unaligned_le32(bss_sz, &buf[pe_header + 0x24]);
|
||||
+
|
||||
+ /* Size of image */
|
||||
+ put_unaligned_le32(init_sz, &buf[pe_header + 0x50]);
|
||||
+
|
||||
+ update_pecoff_section_header_fields(".bss", file_sz, bss_sz, 0, 0);
|
||||
+}
|
||||
+
|
||||
#endif /* CONFIG_EFI_STUB */
|
||||
|
||||
|
||||
@@ -270,6 +288,9 @@ int main(int argc, char ** argv)
|
||||
int fd;
|
||||
void *kernel;
|
||||
u32 crc = 0xffffffffUL;
|
||||
+#ifdef CONFIG_EFI_STUB
|
||||
+ unsigned int init_sz;
|
||||
+#endif
|
||||
|
||||
/* Defaults for old kernel */
|
||||
#ifdef CONFIG_X86_32
|
||||
@@ -343,7 +364,9 @@ int main(int argc, char ** argv)
|
||||
put_unaligned_le32(sys_size, &buf[0x1f4]);
|
||||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
- update_pecoff_text(setup_sectors * 512, sz + i + ((sys_size * 16) - sz));
|
||||
+ update_pecoff_text(setup_sectors * 512, i + (sys_size * 16));
|
||||
+ init_sz = get_unaligned_le32(&buf[0x260]);
|
||||
+ update_pecoff_bss(i + (sys_size * 16), init_sz);
|
||||
|
||||
#ifdef CONFIG_X86_64 /* Yes, this is really how we defined it :( */
|
||||
efi_stub_entry -= 0x200;
|
||||
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
|
||||
index 6491353cc9aa..c87810b1b557 100644
|
||||
--- a/arch/x86/kernel/entry_32.S
|
||||
+++ b/arch/x86/kernel/entry_32.S
|
||||
@@ -433,8 +433,8 @@ sysenter_do_call:
|
||||
cmpl $(NR_syscalls), %eax
|
||||
jae sysenter_badsys
|
||||
call *sys_call_table(,%eax,4)
|
||||
- movl %eax,PT_EAX(%esp)
|
||||
sysenter_after_call:
|
||||
+ movl %eax,PT_EAX(%esp)
|
||||
LOCKDEP_SYS_EXIT
|
||||
DISABLE_INTERRUPTS(CLBR_ANY)
|
||||
TRACE_IRQS_OFF
|
||||
@@ -514,6 +514,7 @@ ENTRY(system_call)
|
||||
jae syscall_badsys
|
||||
syscall_call:
|
||||
call *sys_call_table(,%eax,4)
|
||||
+syscall_after_call:
|
||||
movl %eax,PT_EAX(%esp) # store the return value
|
||||
syscall_exit:
|
||||
LOCKDEP_SYS_EXIT
|
||||
@@ -683,12 +684,12 @@ syscall_fault:
|
||||
END(syscall_fault)
|
||||
|
||||
syscall_badsys:
|
||||
- movl $-ENOSYS,PT_EAX(%esp)
|
||||
- jmp syscall_exit
|
||||
+ movl $-ENOSYS,%eax
|
||||
+ jmp syscall_after_call
|
||||
END(syscall_badsys)
|
||||
|
||||
sysenter_badsys:
|
||||
- movl $-ENOSYS,PT_EAX(%esp)
|
||||
+ movl $-ENOSYS,%eax
|
||||
jmp sysenter_after_call
|
||||
END(syscall_badsys)
|
||||
CFI_ENDPROC
|
||||
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
|
||||
index dd0dd2d4ceca..d8f80e733cf8 100644
|
||||
--- a/block/blk-cgroup.c
|
||||
+++ b/block/blk-cgroup.c
|
||||
@@ -859,6 +859,13 @@ void blkcg_drain_queue(struct request_queue *q)
|
||||
{
|
||||
lockdep_assert_held(q->queue_lock);
|
||||
|
||||
+ /*
|
||||
+ * @q could be exiting and already have destroyed all blkgs as
|
||||
+ * indicated by NULL root_blkg. If so, don't confuse policies.
|
||||
+ */
|
||||
+ if (!q->root_blkg)
|
||||
+ return;
|
||||
+
|
||||
blk_throtl_drain(q);
|
||||
}
|
||||
|
||||
diff --git a/block/blk-tag.c b/block/blk-tag.c
|
||||
index 3f33d8672268..a185b86741e5 100644
|
||||
--- a/block/blk-tag.c
|
||||
+++ b/block/blk-tag.c
|
||||
@@ -27,18 +27,15 @@ struct request *blk_queue_find_tag(struct request_queue *q, int tag)
|
||||
EXPORT_SYMBOL(blk_queue_find_tag);
|
||||
|
||||
/**
|
||||
- * __blk_free_tags - release a given set of tag maintenance info
|
||||
+ * blk_free_tags - release a given set of tag maintenance info
|
||||
* @bqt: the tag map to free
|
||||
*
|
||||
- * Tries to free the specified @bqt. Returns true if it was
|
||||
- * actually freed and false if there are still references using it
|
||||
+ * Drop the reference count on @bqt and frees it when the last reference
|
||||
+ * is dropped.
|
||||
*/
|
||||
-static int __blk_free_tags(struct blk_queue_tag *bqt)
|
||||
+void blk_free_tags(struct blk_queue_tag *bqt)
|
||||
{
|
||||
- int retval;
|
||||
-
|
||||
- retval = atomic_dec_and_test(&bqt->refcnt);
|
||||
- if (retval) {
|
||||
+ if (atomic_dec_and_test(&bqt->refcnt)) {
|
||||
BUG_ON(find_first_bit(bqt->tag_map, bqt->max_depth) <
|
||||
bqt->max_depth);
|
||||
|
||||
@@ -50,9 +47,8 @@ static int __blk_free_tags(struct blk_queue_tag *bqt)
|
||||
|
||||
kfree(bqt);
|
||||
}
|
||||
-
|
||||
- return retval;
|
||||
}
|
||||
+EXPORT_SYMBOL(blk_free_tags);
|
||||
|
||||
/**
|
||||
* __blk_queue_free_tags - release tag maintenance info
|
||||
@@ -69,28 +65,13 @@ void __blk_queue_free_tags(struct request_queue *q)
|
||||
if (!bqt)
|
||||
return;
|
||||
|
||||
- __blk_free_tags(bqt);
|
||||
+ blk_free_tags(bqt);
|
||||
|
||||
q->queue_tags = NULL;
|
||||
queue_flag_clear_unlocked(QUEUE_FLAG_QUEUED, q);
|
||||
}
|
||||
|
||||
/**
|
||||
- * blk_free_tags - release a given set of tag maintenance info
|
||||
- * @bqt: the tag map to free
|
||||
- *
|
||||
- * For externally managed @bqt frees the map. Callers of this
|
||||
- * function must guarantee to have released all the queues that
|
||||
- * might have been using this tag map.
|
||||
- */
|
||||
-void blk_free_tags(struct blk_queue_tag *bqt)
|
||||
-{
|
||||
- if (unlikely(!__blk_free_tags(bqt)))
|
||||
- BUG();
|
||||
-}
|
||||
-EXPORT_SYMBOL(blk_free_tags);
|
||||
-
|
||||
-/**
|
||||
* blk_queue_free_tags - release tag maintenance info
|
||||
* @q: the request queue for the device
|
||||
*
|
||||
diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
|
||||
index fbd5a67cb773..a0926a6094b2 100644
|
||||
--- a/block/compat_ioctl.c
|
||||
+++ b/block/compat_ioctl.c
|
||||
@@ -690,6 +690,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
case BLKROSET:
|
||||
case BLKDISCARD:
|
||||
case BLKSECDISCARD:
|
||||
+ case BLKZEROOUT:
|
||||
/*
|
||||
* the ones below are implemented in blkdev_locked_ioctl,
|
||||
* but we call blkdev_ioctl, which gets the lock for us
|
||||
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
|
||||
index 9aa42998d757..b54f8b3c7924 100644
|
||||
--- a/drivers/ata/ahci.c
|
||||
+++ b/drivers/ata/ahci.c
|
||||
@@ -457,6 +457,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
|
||||
/* Promise */
|
||||
{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
|
||||
+ { PCI_VDEVICE(PROMISE, 0x3781), board_ahci }, /* FastTrak TX8660 ahci-mode */
|
||||
|
||||
/* Asmedia */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci }, /* ASM1060 */
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index 62fda16c8377..f7616036663b 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -4787,6 +4787,10 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
|
||||
* ata_qc_new - Request an available ATA command, for queueing
|
||||
* @ap: target port
|
||||
*
|
||||
+ * Some ATA host controllers may implement a queue depth which is less
|
||||
+ * than ATA_MAX_QUEUE. So we shouldn't allocate a tag which is beyond
|
||||
+ * the hardware limitation.
|
||||
+ *
|
||||
* LOCKING:
|
||||
* None.
|
||||
*/
|
||||
@@ -4794,14 +4798,15 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
|
||||
static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
|
||||
{
|
||||
struct ata_queued_cmd *qc = NULL;
|
||||
+ unsigned int max_queue = ap->host->n_tags;
|
||||
unsigned int i, tag;
|
||||
|
||||
/* no command while frozen */
|
||||
if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
|
||||
return NULL;
|
||||
|
||||
- for (i = 0; i < ATA_MAX_QUEUE; i++) {
|
||||
- tag = (i + ap->last_tag + 1) % ATA_MAX_QUEUE;
|
||||
+ for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) {
|
||||
+ tag = tag < max_queue ? tag : 0;
|
||||
|
||||
/* the last tag is reserved for internal command. */
|
||||
if (tag == ATA_TAG_INTERNAL)
|
||||
@@ -6103,6 +6108,7 @@ void ata_host_init(struct ata_host *host, struct device *dev,
|
||||
{
|
||||
spin_lock_init(&host->lock);
|
||||
mutex_init(&host->eh_mutex);
|
||||
+ host->n_tags = ATA_MAX_QUEUE - 1;
|
||||
host->dev = dev;
|
||||
host->ops = ops;
|
||||
}
|
||||
@@ -6184,6 +6190,8 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
|
||||
{
|
||||
int i, rc;
|
||||
|
||||
+ host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1);
|
||||
+
|
||||
/* host must have been started */
|
||||
if (!(host->flags & ATA_HOST_STARTED)) {
|
||||
dev_err(host->dev, "BUG: trying to register unstarted host\n");
|
||||
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
|
||||
index 3c51eb0bd659..9dbf4ef2b2a3 100644
|
||||
--- a/drivers/base/platform.c
|
||||
+++ b/drivers/base/platform.c
|
||||
@@ -89,8 +89,13 @@ int platform_get_irq(struct platform_device *dev, unsigned int num)
|
||||
return dev->archdata.irqs[num];
|
||||
#else
|
||||
struct resource *r;
|
||||
- if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node)
|
||||
- return of_irq_get(dev->dev.of_node, num);
|
||||
+ if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) {
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = of_irq_get(dev->dev.of_node, num);
|
||||
+ if (ret >= 0 || ret == -EPROBE_DEFER)
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
r = platform_get_resource(dev, IORESOURCE_IRQ, num);
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
|
||||
index 270f68a6b724..7164045c06e4 100644
|
||||
--- a/drivers/gpu/drm/radeon/cik.c
|
||||
+++ b/drivers/gpu/drm/radeon/cik.c
|
||||
@@ -2219,6 +2219,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev)
|
||||
gb_tile_moden = 0;
|
||||
break;
|
||||
}
|
||||
+ rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden;
|
||||
WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden);
|
||||
}
|
||||
} else if (num_pipe_configs == 8) {
|
||||
@@ -7270,6 +7271,7 @@ static inline u32 cik_get_ih_wptr(struct radeon_device *rdev)
|
||||
tmp = RREG32(IH_RB_CNTL);
|
||||
tmp |= IH_WPTR_OVERFLOW_CLEAR;
|
||||
WREG32(IH_RB_CNTL, tmp);
|
||||
+ wptr &= ~RB_OVERFLOW;
|
||||
}
|
||||
return (wptr & rdev->ih.ptr_mask);
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
|
||||
index 64108dbc7d45..4b3c5f7ae63b 100644
|
||||
--- a/drivers/gpu/drm/radeon/evergreen.c
|
||||
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
||||
@@ -4763,6 +4763,7 @@ static u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
|
||||
tmp = RREG32(IH_RB_CNTL);
|
||||
tmp |= IH_WPTR_OVERFLOW_CLEAR;
|
||||
WREG32(IH_RB_CNTL, tmp);
|
||||
+ wptr &= ~RB_OVERFLOW;
|
||||
}
|
||||
return (wptr & rdev->ih.ptr_mask);
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
|
||||
index f28ab840cc23..788f602e8989 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600.c
|
||||
@@ -3795,6 +3795,7 @@ static u32 r600_get_ih_wptr(struct radeon_device *rdev)
|
||||
tmp = RREG32(IH_RB_CNTL);
|
||||
tmp |= IH_WPTR_OVERFLOW_CLEAR;
|
||||
WREG32(IH_RB_CNTL, tmp);
|
||||
+ wptr &= ~RB_OVERFLOW;
|
||||
}
|
||||
return (wptr & rdev->ih.ptr_mask);
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
|
||||
index cb7508dc94f3..ea93393374df 100644
|
||||
--- a/drivers/gpu/drm/radeon/si.c
|
||||
+++ b/drivers/gpu/drm/radeon/si.c
|
||||
@@ -6098,6 +6098,7 @@ static inline u32 si_get_ih_wptr(struct radeon_device *rdev)
|
||||
tmp = RREG32(IH_RB_CNTL);
|
||||
tmp |= IH_WPTR_OVERFLOW_CLEAR;
|
||||
WREG32(IH_RB_CNTL, tmp);
|
||||
+ wptr &= ~RB_OVERFLOW;
|
||||
}
|
||||
return (wptr & rdev->ih.ptr_mask);
|
||||
}
|
||||
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
|
||||
index efee4c59239f..34b9a601ad07 100644
|
||||
--- a/drivers/hwmon/smsc47m192.c
|
||||
+++ b/drivers/hwmon/smsc47m192.c
|
||||
@@ -86,7 +86,7 @@ static inline u8 IN_TO_REG(unsigned long val, int n)
|
||||
*/
|
||||
static inline s8 TEMP_TO_REG(int val)
|
||||
{
|
||||
- return clamp_val(SCALE(val, 1, 1000), -128000, 127000);
|
||||
+ return SCALE(clamp_val(val, -128000, 127000), 1, 1000);
|
||||
}
|
||||
|
||||
static inline int TEMP_FROM_REG(s8 val)
|
||||
@@ -384,6 +384,8 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
|
||||
err = kstrtoul(buf, 10, &val);
|
||||
if (err)
|
||||
return err;
|
||||
+ if (val > 255)
|
||||
+ return -EINVAL;
|
||||
|
||||
data->vrm = val;
|
||||
return count;
|
||||
diff --git a/drivers/input/input.c b/drivers/input/input.c
|
||||
index 1c4c0db05550..29ca0bb4f561 100644
|
||||
--- a/drivers/input/input.c
|
||||
+++ b/drivers/input/input.c
|
||||
@@ -257,9 +257,10 @@ static int input_handle_abs_event(struct input_dev *dev,
|
||||
}
|
||||
|
||||
static int input_get_disposition(struct input_dev *dev,
|
||||
- unsigned int type, unsigned int code, int value)
|
||||
+ unsigned int type, unsigned int code, int *pval)
|
||||
{
|
||||
int disposition = INPUT_IGNORE_EVENT;
|
||||
+ int value = *pval;
|
||||
|
||||
switch (type) {
|
||||
|
||||
@@ -357,6 +358,7 @@ static int input_get_disposition(struct input_dev *dev,
|
||||
break;
|
||||
}
|
||||
|
||||
+ *pval = value;
|
||||
return disposition;
|
||||
}
|
||||
|
||||
@@ -365,7 +367,7 @@ static void input_handle_event(struct input_dev *dev,
|
||||
{
|
||||
int disposition;
|
||||
|
||||
- disposition = input_get_disposition(dev, type, code, value);
|
||||
+ disposition = input_get_disposition(dev, type, code, &value);
|
||||
|
||||
if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index ec772d962f06..ef9e0b8a9aa7 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -132,7 +132,8 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
|
||||
1232, 5710, 1156, 4696
|
||||
},
|
||||
{
|
||||
- (const char * const []){"LEN0034", "LEN0036", "LEN2004", NULL},
|
||||
+ (const char * const []){"LEN0034", "LEN0036", "LEN2002",
|
||||
+ "LEN2004", NULL},
|
||||
1024, 5112, 2024, 4832
|
||||
},
|
||||
{
|
||||
@@ -168,7 +169,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
|
||||
"LEN0049",
|
||||
"LEN2000",
|
||||
"LEN2001", /* Edge E431 */
|
||||
- "LEN2002",
|
||||
+ "LEN2002", /* Edge E531 */
|
||||
"LEN2003",
|
||||
"LEN2004", /* L440 */
|
||||
"LEN2005",
|
||||
diff --git a/drivers/media/dvb-frontends/tda10071.c b/drivers/media/dvb-frontends/tda10071.c
|
||||
index 8ad3a57cf640..287b977862e2 100644
|
||||
--- a/drivers/media/dvb-frontends/tda10071.c
|
||||
+++ b/drivers/media/dvb-frontends/tda10071.c
|
||||
@@ -667,6 +667,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret, i;
|
||||
u8 mode, rolloff, pilot, inversion, div;
|
||||
+ fe_modulation_t modulation;
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s: delivery_system=%d modulation=%d " \
|
||||
"frequency=%d symbol_rate=%d inversion=%d pilot=%d " \
|
||||
@@ -701,10 +702,13 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
||||
|
||||
switch (c->delivery_system) {
|
||||
case SYS_DVBS:
|
||||
+ modulation = QPSK;
|
||||
rolloff = 0;
|
||||
pilot = 2;
|
||||
break;
|
||||
case SYS_DVBS2:
|
||||
+ modulation = c->modulation;
|
||||
+
|
||||
switch (c->rolloff) {
|
||||
case ROLLOFF_20:
|
||||
rolloff = 2;
|
||||
@@ -749,7 +753,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
||||
|
||||
for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
|
||||
if (c->delivery_system == TDA10071_MODCOD[i].delivery_system &&
|
||||
- c->modulation == TDA10071_MODCOD[i].modulation &&
|
||||
+ modulation == TDA10071_MODCOD[i].modulation &&
|
||||
c->fec_inner == TDA10071_MODCOD[i].fec) {
|
||||
mode = TDA10071_MODCOD[i].val;
|
||||
dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n",
|
||||
diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c
|
||||
index 0500c4175d5f..6bce01a674f9 100644
|
||||
--- a/drivers/media/usb/hdpvr/hdpvr-video.c
|
||||
+++ b/drivers/media/usb/hdpvr/hdpvr-video.c
|
||||
@@ -82,7 +82,7 @@ static void hdpvr_read_bulk_callback(struct urb *urb)
|
||||
}
|
||||
|
||||
/*=========================================================================*/
|
||||
-/* bufffer bits */
|
||||
+/* buffer bits */
|
||||
|
||||
/* function expects dev->io_mutex to be hold by caller */
|
||||
int hdpvr_cancel_queue(struct hdpvr_device *dev)
|
||||
@@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
case V4L2_CID_MPEG_AUDIO_ENCODING:
|
||||
if (dev->flags & HDPVR_FLAG_AC3_CAP) {
|
||||
opt->audio_codec = ctrl->val;
|
||||
- return hdpvr_set_audio(dev, opt->audio_input,
|
||||
+ return hdpvr_set_audio(dev, opt->audio_input + 1,
|
||||
opt->audio_codec);
|
||||
}
|
||||
return 0;
|
||||
@@ -1198,7 +1198,7 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent,
|
||||
v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
|
||||
V4L2_CID_MPEG_AUDIO_ENCODING,
|
||||
ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : V4L2_MPEG_AUDIO_ENCODING_AAC,
|
||||
- 0x7, V4L2_MPEG_AUDIO_ENCODING_AAC);
|
||||
+ 0x7, ac3 ? dev->options.audio_codec : V4L2_MPEG_AUDIO_ENCODING_AAC);
|
||||
v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
|
||||
V4L2_CID_MPEG_VIDEO_ENCODING,
|
||||
V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3,
|
||||
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c
|
||||
index a2e257970fec..78d99b137d91 100644
|
||||
--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
|
||||
+++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
|
||||
@@ -595,10 +595,10 @@ struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait)
|
||||
aspect.denominator = 9;
|
||||
} else if (ratio == 34) {
|
||||
aspect.numerator = 4;
|
||||
- aspect.numerator = 3;
|
||||
+ aspect.denominator = 3;
|
||||
} else if (ratio == 68) {
|
||||
aspect.numerator = 15;
|
||||
- aspect.numerator = 9;
|
||||
+ aspect.denominator = 9;
|
||||
} else {
|
||||
aspect.numerator = hor_landscape + 99;
|
||||
aspect.denominator = 100;
|
||||
diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig
|
||||
index 2872ece81f35..44333bd8f908 100644
|
||||
--- a/drivers/parport/Kconfig
|
||||
+++ b/drivers/parport/Kconfig
|
||||
@@ -5,6 +5,12 @@
|
||||
# Parport configuration.
|
||||
#
|
||||
|
||||
+config ARCH_MIGHT_HAVE_PC_PARPORT
|
||||
+ bool
|
||||
+ help
|
||||
+ Select this config option from the architecture Kconfig if
|
||||
+ the architecture might have PC parallel port hardware.
|
||||
+
|
||||
menuconfig PARPORT
|
||||
tristate "Parallel port support"
|
||||
depends on HAS_IOMEM
|
||||
@@ -31,12 +37,6 @@ menuconfig PARPORT
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
-config ARCH_MIGHT_HAVE_PC_PARPORT
|
||||
- bool
|
||||
- help
|
||||
- Select this config option from the architecture Kconfig if
|
||||
- the architecture might have PC parallel port hardware.
|
||||
-
|
||||
if PARPORT
|
||||
|
||||
config PARPORT_PC
|
||||
diff --git a/drivers/staging/media/omap4iss/Kconfig b/drivers/staging/media/omap4iss/Kconfig
|
||||
index b9fe753969bd..15940f8fdd24 100644
|
||||
--- a/drivers/staging/media/omap4iss/Kconfig
|
||||
+++ b/drivers/staging/media/omap4iss/Kconfig
|
||||
@@ -1,6 +1,6 @@
|
||||
config VIDEO_OMAP4
|
||||
bool "OMAP 4 Camera support"
|
||||
- depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && I2C && ARCH_OMAP4
|
||||
+ depends on VIDEO_V4L2=y && VIDEO_V4L2_SUBDEV_API && I2C=y && ARCH_OMAP4
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
---help---
|
||||
Driver for an OMAP 4 ISS controller.
|
||||
diff --git a/fs/coredump.c b/fs/coredump.c
|
||||
index 0b2528fb640e..a93f7e6ea4cf 100644
|
||||
--- a/fs/coredump.c
|
||||
+++ b/fs/coredump.c
|
||||
@@ -306,7 +306,7 @@ static int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
|
||||
if (unlikely(nr < 0))
|
||||
return nr;
|
||||
|
||||
- tsk->flags = PF_DUMPCORE;
|
||||
+ tsk->flags |= PF_DUMPCORE;
|
||||
if (atomic_read(&mm->mm_users) == nr + 1)
|
||||
goto done;
|
||||
/*
|
||||
diff --git a/fs/namei.c b/fs/namei.c
|
||||
index 8274c8d39b03..bdea10963aa5 100644
|
||||
--- a/fs/namei.c
|
||||
+++ b/fs/namei.c
|
||||
@@ -2247,9 +2247,10 @@ done:
|
||||
goto out;
|
||||
}
|
||||
path->dentry = dentry;
|
||||
- path->mnt = mntget(nd->path.mnt);
|
||||
+ path->mnt = nd->path.mnt;
|
||||
if (should_follow_link(dentry, nd->flags & LOOKUP_FOLLOW))
|
||||
return 1;
|
||||
+ mntget(path->mnt);
|
||||
follow_mount(path);
|
||||
error = 0;
|
||||
out:
|
||||
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
|
||||
index 871d6eda8dba..8f854dde4150 100644
|
||||
--- a/fs/nfs/nfs3acl.c
|
||||
+++ b/fs/nfs/nfs3acl.c
|
||||
@@ -247,3 +247,46 @@ const struct xattr_handler *nfs3_xattr_handlers[] = {
|
||||
&posix_acl_default_xattr_handler,
|
||||
NULL,
|
||||
};
|
||||
+
|
||||
+static int
|
||||
+nfs3_list_one_acl(struct inode *inode, int type, const char *name, void *data,
|
||||
+ size_t size, ssize_t *result)
|
||||
+{
|
||||
+ struct posix_acl *acl;
|
||||
+ char *p = data + *result;
|
||||
+
|
||||
+ acl = get_acl(inode, type);
|
||||
+ if (!acl)
|
||||
+ return 0;
|
||||
+
|
||||
+ posix_acl_release(acl);
|
||||
+
|
||||
+ *result += strlen(name);
|
||||
+ *result += 1;
|
||||
+ if (!size)
|
||||
+ return 0;
|
||||
+ if (*result > size)
|
||||
+ return -ERANGE;
|
||||
+
|
||||
+ strcpy(p, name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+ssize_t
|
||||
+nfs3_listxattr(struct dentry *dentry, char *data, size_t size)
|
||||
+{
|
||||
+ struct inode *inode = dentry->d_inode;
|
||||
+ ssize_t result = 0;
|
||||
+ int error;
|
||||
+
|
||||
+ error = nfs3_list_one_acl(inode, ACL_TYPE_ACCESS,
|
||||
+ POSIX_ACL_XATTR_ACCESS, data, size, &result);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ error = nfs3_list_one_acl(inode, ACL_TYPE_DEFAULT,
|
||||
+ POSIX_ACL_XATTR_DEFAULT, data, size, &result);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+ return result;
|
||||
+}
|
||||
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
|
||||
index a462ef0fb5d6..8a18b4a0a4ee 100644
|
||||
--- a/fs/nfs/nfs3proc.c
|
||||
+++ b/fs/nfs/nfs3proc.c
|
||||
@@ -926,7 +926,7 @@ static const struct inode_operations nfs3_dir_inode_operations = {
|
||||
.getattr = nfs_getattr,
|
||||
.setattr = nfs_setattr,
|
||||
#ifdef CONFIG_NFS_V3_ACL
|
||||
- .listxattr = generic_listxattr,
|
||||
+ .listxattr = nfs3_listxattr,
|
||||
.getxattr = generic_getxattr,
|
||||
.setxattr = generic_setxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
@@ -940,7 +940,7 @@ static const struct inode_operations nfs3_file_inode_operations = {
|
||||
.getattr = nfs_getattr,
|
||||
.setattr = nfs_setattr,
|
||||
#ifdef CONFIG_NFS_V3_ACL
|
||||
- .listxattr = generic_listxattr,
|
||||
+ .listxattr = nfs3_listxattr,
|
||||
.getxattr = generic_getxattr,
|
||||
.setxattr = generic_setxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
diff --git a/include/linux/libata.h b/include/linux/libata.h
|
||||
index 3fee55e73e5e..e13b3aef0b0c 100644
|
||||
--- a/include/linux/libata.h
|
||||
+++ b/include/linux/libata.h
|
||||
@@ -593,6 +593,7 @@ struct ata_host {
|
||||
struct device *dev;
|
||||
void __iomem * const *iomap;
|
||||
unsigned int n_ports;
|
||||
+ unsigned int n_tags; /* nr of NCQ tags */
|
||||
void *private_data;
|
||||
struct ata_port_operations *ops;
|
||||
unsigned long flags;
|
||||
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
|
||||
index 7e259b2bdf44..71136720ffa1 100644
|
||||
--- a/kernel/trace/trace.c
|
||||
+++ b/kernel/trace/trace.c
|
||||
@@ -811,7 +811,7 @@ static struct {
|
||||
{ trace_clock_local, "local", 1 },
|
||||
{ trace_clock_global, "global", 1 },
|
||||
{ trace_clock_counter, "counter", 0 },
|
||||
- { trace_clock_jiffies, "uptime", 1 },
|
||||
+ { trace_clock_jiffies, "uptime", 0 },
|
||||
{ trace_clock, "perf", 1 },
|
||||
ARCH_TRACE_CLOCKS
|
||||
};
|
||||
diff --git a/kernel/trace/trace_clock.c b/kernel/trace/trace_clock.c
|
||||
index 26dc348332b7..57b67b1f24d1 100644
|
||||
--- a/kernel/trace/trace_clock.c
|
||||
+++ b/kernel/trace/trace_clock.c
|
||||
@@ -59,13 +59,14 @@ u64 notrace trace_clock(void)
|
||||
|
||||
/*
|
||||
* trace_jiffy_clock(): Simply use jiffies as a clock counter.
|
||||
+ * Note that this use of jiffies_64 is not completely safe on
|
||||
+ * 32-bit systems. But the window is tiny, and the effect if
|
||||
+ * we are affected is that we will have an obviously bogus
|
||||
+ * timestamp on a trace event - i.e. not life threatening.
|
||||
*/
|
||||
u64 notrace trace_clock_jiffies(void)
|
||||
{
|
||||
- u64 jiffy = jiffies - INITIAL_JIFFIES;
|
||||
-
|
||||
- /* Return nsecs */
|
||||
- return (u64)jiffies_to_usecs(jiffy) * 1000ULL;
|
||||
+ return jiffies_64_to_clock_t(jiffies_64 - INITIAL_JIFFIES);
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
||||
index 30dd6265a141..923f38e62bcf 100644
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -2422,6 +2422,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
|
||||
} else {
|
||||
if (cow)
|
||||
huge_ptep_set_wrprotect(src, addr, src_pte);
|
||||
+ entry = huge_ptep_get(src_pte);
|
||||
ptepage = pte_page(entry);
|
||||
get_page(ptepage);
|
||||
page_dup_rmap(ptepage);
|
||||
diff --git a/mm/slab_common.c b/mm/slab_common.c
|
||||
index 1ec3c619ba04..f149e6724411 100644
|
||||
--- a/mm/slab_common.c
|
||||
+++ b/mm/slab_common.c
|
||||
@@ -56,7 +56,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name,
|
||||
continue;
|
||||
}
|
||||
|
||||
-#if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON)
|
||||
+#if !defined(CONFIG_SLUB)
|
||||
/*
|
||||
* For simplicity, we won't check this in the list of memcg
|
||||
* caches. We have control over memcg naming, and if there
|
||||
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
|
||||
index 4fe2e6e2bc76..e6283464a8e6 100644
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -1450,18 +1450,17 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *dev,
|
||||
}
|
||||
CMD(start_p2p_device, START_P2P_DEVICE);
|
||||
CMD(set_mcast_rate, SET_MCAST_RATE);
|
||||
+#ifdef CONFIG_NL80211_TESTMODE
|
||||
+ CMD(testmode_cmd, TESTMODE);
|
||||
+#endif
|
||||
if (state->split) {
|
||||
CMD(crit_proto_start, CRIT_PROTOCOL_START);
|
||||
CMD(crit_proto_stop, CRIT_PROTOCOL_STOP);
|
||||
if (dev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)
|
||||
CMD(channel_switch, CHANNEL_SWITCH);
|
||||
+ CMD(set_qos_map, SET_QOS_MAP);
|
||||
}
|
||||
- CMD(set_qos_map, SET_QOS_MAP);
|
||||
-
|
||||
-#ifdef CONFIG_NL80211_TESTMODE
|
||||
- CMD(testmode_cmd, TESTMODE);
|
||||
-#endif
|
||||
-
|
||||
+ /* add into the if now */
|
||||
#undef CMD
|
||||
|
||||
if (dev->ops->connect || dev->ops->auth) {
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,914 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 63a5ee8..944db23 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 26
|
||||
+SUBLEVEL = 27
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/powerpc/kernel/vdso32/getcpu.S b/arch/powerpc/kernel/vdso32/getcpu.S
|
||||
index 47afd08..fe7e97a 100644
|
||||
--- a/arch/powerpc/kernel/vdso32/getcpu.S
|
||||
+++ b/arch/powerpc/kernel/vdso32/getcpu.S
|
||||
@@ -30,8 +30,8 @@
|
||||
V_FUNCTION_BEGIN(__kernel_getcpu)
|
||||
.cfi_startproc
|
||||
mfspr r5,SPRN_USPRG3
|
||||
- cmpdi cr0,r3,0
|
||||
- cmpdi cr1,r4,0
|
||||
+ cmpwi cr0,r3,0
|
||||
+ cmpwi cr1,r4,0
|
||||
clrlwi r6,r5,16
|
||||
rlwinm r7,r5,16,31-15,31-0
|
||||
beq cr0,1f
|
||||
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
|
||||
index 14fe7cb..b5bb498 100644
|
||||
--- a/arch/x86/boot/compressed/Makefile
|
||||
+++ b/arch/x86/boot/compressed/Makefile
|
||||
@@ -75,7 +75,7 @@ suffix-$(CONFIG_KERNEL_XZ) := xz
|
||||
suffix-$(CONFIG_KERNEL_LZO) := lzo
|
||||
suffix-$(CONFIG_KERNEL_LZ4) := lz4
|
||||
|
||||
-RUN_SIZE = $(shell objdump -h vmlinux | \
|
||||
+RUN_SIZE = $(shell $(OBJDUMP) -h vmlinux | \
|
||||
perl $(srctree)/arch/x86/tools/calc_run_size.pl)
|
||||
quiet_cmd_mkpiggy = MKPIGGY $@
|
||||
cmd_mkpiggy = $(obj)/mkpiggy $< $(RUN_SIZE) > $@ || ( rm -f $@ ; false )
|
||||
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
|
||||
index 79f9f84..fb345c4 100644
|
||||
--- a/arch/x86/kernel/cpu/perf_event.c
|
||||
+++ b/arch/x86/kernel/cpu/perf_event.c
|
||||
@@ -118,6 +118,9 @@ static int x86_pmu_extra_regs(u64 config, struct perf_event *event)
|
||||
continue;
|
||||
if (event->attr.config1 & ~er->valid_mask)
|
||||
return -EINVAL;
|
||||
+ /* Check if the extra msrs can be safely accessed*/
|
||||
+ if (!er->extra_msr_access)
|
||||
+ return -ENXIO;
|
||||
|
||||
reg->idx = er->idx;
|
||||
reg->config = event->attr.config1;
|
||||
diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h
|
||||
index 4972c24..7876c34 100644
|
||||
--- a/arch/x86/kernel/cpu/perf_event.h
|
||||
+++ b/arch/x86/kernel/cpu/perf_event.h
|
||||
@@ -293,14 +293,16 @@ struct extra_reg {
|
||||
u64 config_mask;
|
||||
u64 valid_mask;
|
||||
int idx; /* per_xxx->regs[] reg index */
|
||||
+ bool extra_msr_access;
|
||||
};
|
||||
|
||||
#define EVENT_EXTRA_REG(e, ms, m, vm, i) { \
|
||||
- .event = (e), \
|
||||
- .msr = (ms), \
|
||||
- .config_mask = (m), \
|
||||
- .valid_mask = (vm), \
|
||||
- .idx = EXTRA_REG_##i, \
|
||||
+ .event = (e), \
|
||||
+ .msr = (ms), \
|
||||
+ .config_mask = (m), \
|
||||
+ .valid_mask = (vm), \
|
||||
+ .idx = EXTRA_REG_##i, \
|
||||
+ .extra_msr_access = true, \
|
||||
}
|
||||
|
||||
#define INTEL_EVENT_EXTRA_REG(event, msr, vm, idx) \
|
||||
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
|
||||
index 5ee8064..d4c0a0e 100644
|
||||
--- a/arch/x86/kernel/cpu/perf_event_intel.c
|
||||
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
|
||||
@@ -2183,6 +2183,41 @@ static void intel_snb_check_microcode(void)
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Under certain circumstances, access certain MSR may cause #GP.
|
||||
+ * The function tests if the input MSR can be safely accessed.
|
||||
+ */
|
||||
+static bool check_msr(unsigned long msr, u64 mask)
|
||||
+{
|
||||
+ u64 val_old, val_new, val_tmp;
|
||||
+
|
||||
+ /*
|
||||
+ * Read the current value, change it and read it back to see if it
|
||||
+ * matches, this is needed to detect certain hardware emulators
|
||||
+ * (qemu/kvm) that don't trap on the MSR access and always return 0s.
|
||||
+ */
|
||||
+ if (rdmsrl_safe(msr, &val_old))
|
||||
+ return false;
|
||||
+
|
||||
+ /*
|
||||
+ * Only change the bits which can be updated by wrmsrl.
|
||||
+ */
|
||||
+ val_tmp = val_old ^ mask;
|
||||
+ if (wrmsrl_safe(msr, val_tmp) ||
|
||||
+ rdmsrl_safe(msr, &val_new))
|
||||
+ return false;
|
||||
+
|
||||
+ if (val_new != val_tmp)
|
||||
+ return false;
|
||||
+
|
||||
+ /* Here it's sure that the MSR can be safely accessed.
|
||||
+ * Restore the old value and return.
|
||||
+ */
|
||||
+ wrmsrl(msr, val_old);
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
static __init void intel_sandybridge_quirk(void)
|
||||
{
|
||||
x86_pmu.check_microcode = intel_snb_check_microcode;
|
||||
@@ -2272,7 +2307,8 @@ __init int intel_pmu_init(void)
|
||||
union cpuid10_ebx ebx;
|
||||
struct event_constraint *c;
|
||||
unsigned int unused;
|
||||
- int version;
|
||||
+ struct extra_reg *er;
|
||||
+ int version, i;
|
||||
|
||||
if (!cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) {
|
||||
switch (boot_cpu_data.x86) {
|
||||
@@ -2578,6 +2614,34 @@ __init int intel_pmu_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * Access LBR MSR may cause #GP under certain circumstances.
|
||||
+ * E.g. KVM doesn't support LBR MSR
|
||||
+ * Check all LBT MSR here.
|
||||
+ * Disable LBR access if any LBR MSRs can not be accessed.
|
||||
+ */
|
||||
+ if (x86_pmu.lbr_nr && !check_msr(x86_pmu.lbr_tos, 0x3UL))
|
||||
+ x86_pmu.lbr_nr = 0;
|
||||
+ for (i = 0; i < x86_pmu.lbr_nr; i++) {
|
||||
+ if (!(check_msr(x86_pmu.lbr_from + i, 0xffffUL) &&
|
||||
+ check_msr(x86_pmu.lbr_to + i, 0xffffUL)))
|
||||
+ x86_pmu.lbr_nr = 0;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Access extra MSR may cause #GP under certain circumstances.
|
||||
+ * E.g. KVM doesn't support offcore event
|
||||
+ * Check all extra_regs here.
|
||||
+ */
|
||||
+ if (x86_pmu.extra_regs) {
|
||||
+ for (er = x86_pmu.extra_regs; er->msr; er++) {
|
||||
+ er->extra_msr_access = check_msr(er->msr, 0x1ffUL);
|
||||
+ /* Disable LBR select mapping */
|
||||
+ if ((er->idx == EXTRA_REG_LBR) && !er->extra_msr_access)
|
||||
+ x86_pmu.lbr_sel_map = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Support full width counters using alternative MSR range */
|
||||
if (x86_pmu.intel_cap.full_width_write) {
|
||||
x86_pmu.max_period = x86_pmu.cntval_mask;
|
||||
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
|
||||
index e662f14..cc5f102 100644
|
||||
--- a/drivers/ata/ahci.c
|
||||
+++ b/drivers/ata/ahci.c
|
||||
@@ -322,6 +322,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
|
||||
+ { PCI_VDEVICE(INTEL, 0x9d03), board_ahci }, /* Sunrise Point-LP AHCI */
|
||||
+ { PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
|
||||
+ { PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
|
||||
{ PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
|
||||
@@ -493,6 +496,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
* enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731
|
||||
*/
|
||||
{ PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi },
|
||||
+ { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_nomsi },
|
||||
|
||||
/* Enmotus */
|
||||
{ PCI_DEVICE(0x1c44, 0x8000), board_ahci },
|
||||
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
|
||||
index fb0b40a..ee2780d 100644
|
||||
--- a/drivers/ata/sata_fsl.c
|
||||
+++ b/drivers/ata/sata_fsl.c
|
||||
@@ -1503,7 +1503,7 @@ static int sata_fsl_probe(struct platform_device *ofdev)
|
||||
host_priv->csr_base = csr_base;
|
||||
|
||||
irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
|
||||
- if (irq < 0) {
|
||||
+ if (!irq) {
|
||||
dev_err(&ofdev->dev, "invalid irq from platform\n");
|
||||
goto error_exit_with_cleanup;
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index b6fb3eb..c514690 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -3817,7 +3817,6 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
|
||||
ironlake_fdi_disable(crtc);
|
||||
|
||||
ironlake_disable_pch_transcoder(dev_priv, pipe);
|
||||
- intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
|
||||
|
||||
if (HAS_PCH_CPT(dev)) {
|
||||
/* disable TRANS_DP_CTL */
|
||||
@@ -3883,7 +3882,6 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||
|
||||
if (intel_crtc->config.has_pch_encoder) {
|
||||
lpt_disable_pch_transcoder(dev_priv);
|
||||
- intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
|
||||
intel_ddi_fdi_disable(crtc);
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
index 67c9ff3..af49b24 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lvds.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
@@ -905,6 +905,17 @@ void intel_lvds_init(struct drm_device *dev)
|
||||
int pipe;
|
||||
u8 pin;
|
||||
|
||||
+ /*
|
||||
+ * Unlock registers and just leave them unlocked. Do this before
|
||||
+ * checking quirk lists to avoid bogus WARNINGs.
|
||||
+ */
|
||||
+ if (HAS_PCH_SPLIT(dev)) {
|
||||
+ I915_WRITE(PCH_PP_CONTROL,
|
||||
+ I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
|
||||
+ } else {
|
||||
+ I915_WRITE(PP_CONTROL,
|
||||
+ I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
|
||||
+ }
|
||||
if (!intel_lvds_supported(dev))
|
||||
return;
|
||||
|
||||
@@ -1099,17 +1110,6 @@ out:
|
||||
DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
|
||||
lvds_encoder->is_dual_link ? "dual" : "single");
|
||||
|
||||
- /*
|
||||
- * Unlock registers and just
|
||||
- * leave them unlocked
|
||||
- */
|
||||
- if (HAS_PCH_SPLIT(dev)) {
|
||||
- I915_WRITE(PCH_PP_CONTROL,
|
||||
- I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
|
||||
- } else {
|
||||
- I915_WRITE(PP_CONTROL,
|
||||
- I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
|
||||
- }
|
||||
lvds_connector->lid_notifier.notifier_call = intel_lid_notify;
|
||||
if (acpi_lid_notifier_register(&lvds_connector->lid_notifier)) {
|
||||
DRM_DEBUG_KMS("lid notifier registration failed\n");
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
index 0bc9106..6bffe82 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
@@ -740,6 +740,8 @@ int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
|
||||
|
||||
/* Get associated drm_crtc: */
|
||||
drmcrtc = &rdev->mode_info.crtcs[crtc]->base;
|
||||
+ if (!drmcrtc)
|
||||
+ return -EINVAL;
|
||||
|
||||
/* Helper routine in DRM core does all the work: */
|
||||
return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
|
||||
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
|
||||
index af0b583..e3c6a96 100644
|
||||
--- a/drivers/i2c/busses/i2c-davinci.c
|
||||
+++ b/drivers/i2c/busses/i2c-davinci.c
|
||||
@@ -411,11 +411,9 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop)
|
||||
if (dev->cmd_err & DAVINCI_I2C_STR_NACK) {
|
||||
if (msg->flags & I2C_M_IGNORE_NAK)
|
||||
return msg->len;
|
||||
- if (stop) {
|
||||
- w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
|
||||
- w |= DAVINCI_I2C_MDR_STP;
|
||||
- davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
|
||||
- }
|
||||
+ w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
|
||||
+ w |= DAVINCI_I2C_MDR_STP;
|
||||
+ davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
|
||||
return -EREMOTEIO;
|
||||
}
|
||||
return -EIO;
|
||||
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
|
||||
index 90dcc2e..a686057 100644
|
||||
--- a/drivers/i2c/busses/i2c-omap.c
|
||||
+++ b/drivers/i2c/busses/i2c-omap.c
|
||||
@@ -926,14 +926,12 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
|
||||
if (stat & OMAP_I2C_STAT_NACK) {
|
||||
err |= OMAP_I2C_STAT_NACK;
|
||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
|
||||
- break;
|
||||
}
|
||||
|
||||
if (stat & OMAP_I2C_STAT_AL) {
|
||||
dev_err(dev->dev, "Arbitration lost\n");
|
||||
err |= OMAP_I2C_STAT_AL;
|
||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
|
||||
- break;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -958,11 +956,13 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
|
||||
if (dev->fifo_size)
|
||||
num_bytes = dev->buf_len;
|
||||
|
||||
- omap_i2c_receive_data(dev, num_bytes, true);
|
||||
-
|
||||
- if (dev->errata & I2C_OMAP_ERRATA_I207)
|
||||
+ if (dev->errata & I2C_OMAP_ERRATA_I207) {
|
||||
i2c_omap_errata_i207(dev, stat);
|
||||
+ num_bytes = (omap_i2c_read_reg(dev,
|
||||
+ OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
|
||||
+ }
|
||||
|
||||
+ omap_i2c_receive_data(dev, num_bytes, true);
|
||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
|
||||
continue;
|
||||
}
|
||||
diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c
|
||||
index 8741cae..7026ab0 100644
|
||||
--- a/drivers/media/i2c/smiapp/smiapp-core.c
|
||||
+++ b/drivers/media/i2c/smiapp/smiapp-core.c
|
||||
@@ -2138,7 +2138,7 @@ static int smiapp_set_selection(struct v4l2_subdev *subdev,
|
||||
ret = smiapp_set_compose(subdev, fh, sel);
|
||||
break;
|
||||
default:
|
||||
- BUG();
|
||||
+ ret = -EINVAL;
|
||||
}
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
|
||||
index 9373f1f..086eac5 100644
|
||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
||||
@@ -8548,7 +8548,8 @@ static int tg3_init_rings(struct tg3 *tp)
|
||||
if (tnapi->rx_rcb)
|
||||
memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
|
||||
|
||||
- if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
|
||||
+ if (tnapi->prodring.rx_std &&
|
||||
+ tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
|
||||
tg3_free_rings(tp);
|
||||
return -ENOMEM;
|
||||
}
|
||||
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
|
||||
index 5ca8c47..206e79d 100644
|
||||
--- a/drivers/net/ethernet/intel/igb/igb_main.c
|
||||
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
|
||||
@@ -1613,6 +1613,8 @@ void igb_power_up_link(struct igb_adapter *adapter)
|
||||
igb_power_up_phy_copper(&adapter->hw);
|
||||
else
|
||||
igb_power_up_serdes_link_82575(&adapter->hw);
|
||||
+
|
||||
+ igb_setup_link(&adapter->hw);
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
|
||||
index c4c00d9f..96fc7fe 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvneta.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
||||
@@ -213,7 +213,7 @@
|
||||
/* Various constants */
|
||||
|
||||
/* Coalescing */
|
||||
-#define MVNETA_TXDONE_COAL_PKTS 16
|
||||
+#define MVNETA_TXDONE_COAL_PKTS 1
|
||||
#define MVNETA_RX_COAL_PKTS 32
|
||||
#define MVNETA_RX_COAL_USEC 100
|
||||
|
||||
@@ -1612,6 +1612,7 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev)
|
||||
u16 txq_id = skb_get_queue_mapping(skb);
|
||||
struct mvneta_tx_queue *txq = &pp->txqs[txq_id];
|
||||
struct mvneta_tx_desc *tx_desc;
|
||||
+ int len = skb->len;
|
||||
struct netdev_queue *nq;
|
||||
int frags = 0;
|
||||
u32 tx_cmd;
|
||||
@@ -1675,7 +1676,7 @@ out:
|
||||
|
||||
u64_stats_update_begin(&stats->syncp);
|
||||
stats->tx_packets++;
|
||||
- stats->tx_bytes += skb->len;
|
||||
+ stats->tx_bytes += len;
|
||||
u64_stats_update_end(&stats->syncp);
|
||||
} else {
|
||||
dev->stats.tx_dropped++;
|
||||
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
|
||||
index 57428a0..1e8a4b4 100644
|
||||
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
|
||||
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
|
||||
@@ -1456,7 +1456,7 @@ static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,
|
||||
|
||||
switch (op) {
|
||||
case RES_OP_RESERVE:
|
||||
- count = get_param_l(&in_param);
|
||||
+ count = get_param_l(&in_param) & 0xffffff;
|
||||
align = get_param_h(&in_param);
|
||||
err = mlx4_grant_resource(dev, slave, RES_QP, count, 0);
|
||||
if (err)
|
||||
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
|
||||
index 5441b49..5988910 100644
|
||||
--- a/drivers/net/vxlan.c
|
||||
+++ b/drivers/net/vxlan.c
|
||||
@@ -2106,9 +2106,8 @@ static int vxlan_init(struct net_device *dev)
|
||||
spin_lock(&vn->sock_lock);
|
||||
vs = vxlan_find_sock(dev_net(dev), ipv6 ? AF_INET6 : AF_INET,
|
||||
vxlan->dst_port);
|
||||
- if (vs) {
|
||||
+ if (vs && atomic_add_unless(&vs->refcnt, 1, 0)) {
|
||||
/* If we have a socket with same port already, reuse it */
|
||||
- atomic_inc(&vs->refcnt);
|
||||
vxlan_vs_add_dev(vs, vxlan);
|
||||
} else {
|
||||
/* otherwise make new socket outside of RTNL */
|
||||
@@ -2574,12 +2573,9 @@ struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port,
|
||||
|
||||
spin_lock(&vn->sock_lock);
|
||||
vs = vxlan_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port);
|
||||
- if (vs) {
|
||||
- if (vs->rcv == rcv)
|
||||
- atomic_inc(&vs->refcnt);
|
||||
- else
|
||||
+ if (vs && ((vs->rcv != rcv) ||
|
||||
+ !atomic_add_unless(&vs->refcnt, 1, 0)))
|
||||
vs = ERR_PTR(-EBUSY);
|
||||
- }
|
||||
spin_unlock(&vn->sock_lock);
|
||||
|
||||
if (!vs)
|
||||
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
|
||||
index e30d800..19db057 100644
|
||||
--- a/drivers/net/xen-netfront.c
|
||||
+++ b/drivers/net/xen-netfront.c
|
||||
@@ -469,9 +469,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
|
||||
len = skb_frag_size(frag);
|
||||
offset = frag->page_offset;
|
||||
|
||||
- /* Data must not cross a page boundary. */
|
||||
- BUG_ON(len + offset > PAGE_SIZE<<compound_order(page));
|
||||
-
|
||||
/* Skip unused frames from start of page */
|
||||
page += offset >> PAGE_SHIFT;
|
||||
offset &= ~PAGE_MASK;
|
||||
@@ -479,8 +476,6 @@ static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
|
||||
while (len > 0) {
|
||||
unsigned long bytes;
|
||||
|
||||
- BUG_ON(offset >= PAGE_SIZE);
|
||||
-
|
||||
bytes = PAGE_SIZE - offset;
|
||||
if (bytes > len)
|
||||
bytes = len;
|
||||
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
||||
index 1710a86..faa8b98 100644
|
||||
--- a/drivers/usb/host/xhci-ring.c
|
||||
+++ b/drivers/usb/host/xhci-ring.c
|
||||
@@ -1998,22 +1998,13 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td,
|
||||
ep->stopped_td = td;
|
||||
return 0;
|
||||
} else {
|
||||
- if (trb_comp_code == COMP_STALL) {
|
||||
- /* The transfer is completed from the driver's
|
||||
- * perspective, but we need to issue a set dequeue
|
||||
- * command for this stalled endpoint to move the dequeue
|
||||
- * pointer past the TD. We can't do that here because
|
||||
- * the halt condition must be cleared first. Let the
|
||||
- * USB class driver clear the stall later.
|
||||
- */
|
||||
- ep->stopped_td = td;
|
||||
- ep->stopped_stream = ep_ring->stream_id;
|
||||
- } else if (xhci_requires_manual_halt_cleanup(xhci,
|
||||
- ep_ctx, trb_comp_code)) {
|
||||
- /* Other types of errors halt the endpoint, but the
|
||||
- * class driver doesn't call usb_reset_endpoint() unless
|
||||
- * the error is -EPIPE. Clear the halted status in the
|
||||
- * xHCI hardware manually.
|
||||
+ if (trb_comp_code == COMP_STALL ||
|
||||
+ xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
|
||||
+ trb_comp_code)) {
|
||||
+ /* Issue a reset endpoint command to clear the host side
|
||||
+ * halt, followed by a set dequeue command to move the
|
||||
+ * dequeue pointer past the TD.
|
||||
+ * The class driver clears the device side halt later.
|
||||
*/
|
||||
xhci_cleanup_halted_endpoint(xhci,
|
||||
slot_id, ep_index, ep_ring->stream_id,
|
||||
@@ -2133,9 +2124,7 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
|
||||
else
|
||||
td->urb->actual_length = 0;
|
||||
|
||||
- xhci_cleanup_halted_endpoint(xhci,
|
||||
- slot_id, ep_index, 0, td, event_trb);
|
||||
- return finish_td(xhci, td, event_trb, event, ep, status, true);
|
||||
+ return finish_td(xhci, td, event_trb, event, ep, status, false);
|
||||
}
|
||||
/*
|
||||
* Did we transfer any data, despite the errors that might have
|
||||
@@ -2689,17 +2678,8 @@ cleanup:
|
||||
if (ret) {
|
||||
urb = td->urb;
|
||||
urb_priv = urb->hcpriv;
|
||||
- /* Leave the TD around for the reset endpoint function
|
||||
- * to use(but only if it's not a control endpoint,
|
||||
- * since we already queued the Set TR dequeue pointer
|
||||
- * command for stalled control endpoints).
|
||||
- */
|
||||
- if (usb_endpoint_xfer_control(&urb->ep->desc) ||
|
||||
- (trb_comp_code != COMP_STALL &&
|
||||
- trb_comp_code != COMP_BABBLE))
|
||||
- xhci_urb_free_priv(xhci, urb_priv);
|
||||
- else
|
||||
- kfree(urb_priv);
|
||||
+
|
||||
+ xhci_urb_free_priv(xhci, urb_priv);
|
||||
|
||||
usb_hcd_unlink_urb_from_ep(bus_to_hcd(urb->dev->bus), urb);
|
||||
if ((urb->actual_length != urb->transfer_buffer_length &&
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index 17e3987..16f4f8d 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -2925,63 +2925,33 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
|
||||
}
|
||||
}
|
||||
|
||||
-/* Deal with stalled endpoints. The core should have sent the control message
|
||||
- * to clear the halt condition. However, we need to make the xHCI hardware
|
||||
- * reset its sequence number, since a device will expect a sequence number of
|
||||
- * zero after the halt condition is cleared.
|
||||
+/* Called when clearing halted device. The core should have sent the control
|
||||
+ * message to clear the device halt condition. The host side of the halt should
|
||||
+ * already be cleared with a reset endpoint command issued when the STALL tx
|
||||
+ * event was received.
|
||||
+ *
|
||||
* Context: in_interrupt
|
||||
*/
|
||||
+
|
||||
void xhci_endpoint_reset(struct usb_hcd *hcd,
|
||||
struct usb_host_endpoint *ep)
|
||||
{
|
||||
struct xhci_hcd *xhci;
|
||||
- struct usb_device *udev;
|
||||
- unsigned int ep_index;
|
||||
- unsigned long flags;
|
||||
- int ret;
|
||||
- struct xhci_virt_ep *virt_ep;
|
||||
|
||||
xhci = hcd_to_xhci(hcd);
|
||||
- udev = (struct usb_device *) ep->hcpriv;
|
||||
- /* Called with a root hub endpoint (or an endpoint that wasn't added
|
||||
- * with xhci_add_endpoint()
|
||||
- */
|
||||
- if (!ep->hcpriv)
|
||||
- return;
|
||||
- ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||
- virt_ep = &xhci->devs[udev->slot_id]->eps[ep_index];
|
||||
- if (!virt_ep->stopped_td) {
|
||||
- xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||
- "Endpoint 0x%x not halted, refusing to reset.",
|
||||
- ep->desc.bEndpointAddress);
|
||||
- return;
|
||||
- }
|
||||
- if (usb_endpoint_xfer_control(&ep->desc)) {
|
||||
- xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||
- "Control endpoint stall already handled.");
|
||||
- return;
|
||||
- }
|
||||
|
||||
- xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
|
||||
- "Queueing reset endpoint command");
|
||||
- spin_lock_irqsave(&xhci->lock, flags);
|
||||
- ret = xhci_queue_reset_ep(xhci, udev->slot_id, ep_index);
|
||||
/*
|
||||
- * Can't change the ring dequeue pointer until it's transitioned to the
|
||||
- * stopped state, which is only upon a successful reset endpoint
|
||||
- * command. Better hope that last command worked!
|
||||
+ * We might need to implement the config ep cmd in xhci 4.8.1 note:
|
||||
+ * The Reset Endpoint Command may only be issued to endpoints in the
|
||||
+ * Halted state. If software wishes reset the Data Toggle or Sequence
|
||||
+ * Number of an endpoint that isn't in the Halted state, then software
|
||||
+ * may issue a Configure Endpoint Command with the Drop and Add bits set
|
||||
+ * for the target endpoint. that is in the Stopped state.
|
||||
*/
|
||||
- if (!ret) {
|
||||
- xhci_cleanup_stalled_ring(xhci, udev, ep_index);
|
||||
- kfree(virt_ep->stopped_td);
|
||||
- xhci_ring_cmd_db(xhci);
|
||||
- }
|
||||
- virt_ep->stopped_td = NULL;
|
||||
- virt_ep->stopped_stream = 0;
|
||||
- spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
|
||||
- if (ret)
|
||||
- xhci_warn(xhci, "FIXME allocate a new ring segment\n");
|
||||
+ /* For now just print debug to follow the situation */
|
||||
+ xhci_dbg(xhci, "Endpoint 0x%x ep reset callback called\n",
|
||||
+ ep->desc.bEndpointAddress);
|
||||
}
|
||||
|
||||
static int xhci_check_streams_endpoint(struct xhci_hcd *xhci,
|
||||
diff --git a/mm/frontswap.c b/mm/frontswap.c
|
||||
index c30eec5..f2a3571 100644
|
||||
--- a/mm/frontswap.c
|
||||
+++ b/mm/frontswap.c
|
||||
@@ -244,8 +244,10 @@ int __frontswap_store(struct page *page)
|
||||
the (older) page from frontswap
|
||||
*/
|
||||
inc_frontswap_failed_stores();
|
||||
- if (dup)
|
||||
+ if (dup) {
|
||||
__frontswap_clear(sis, offset);
|
||||
+ frontswap_ops->invalidate_page(type, offset);
|
||||
+ }
|
||||
}
|
||||
if (frontswap_writethrough_enabled)
|
||||
/* report failure so swap also writes to swap device */
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 492e36f..48d7365 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -808,20 +808,20 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
|
||||
if (!pte_file(pte)) {
|
||||
swp_entry_t entry = pte_to_swp_entry(pte);
|
||||
|
||||
- if (swap_duplicate(entry) < 0)
|
||||
- return entry.val;
|
||||
-
|
||||
- /* make sure dst_mm is on swapoff's mmlist. */
|
||||
- if (unlikely(list_empty(&dst_mm->mmlist))) {
|
||||
- spin_lock(&mmlist_lock);
|
||||
- if (list_empty(&dst_mm->mmlist))
|
||||
- list_add(&dst_mm->mmlist,
|
||||
- &src_mm->mmlist);
|
||||
- spin_unlock(&mmlist_lock);
|
||||
- }
|
||||
- if (likely(!non_swap_entry(entry)))
|
||||
+ if (likely(!non_swap_entry(entry))) {
|
||||
+ if (swap_duplicate(entry) < 0)
|
||||
+ return entry.val;
|
||||
+
|
||||
+ /* make sure dst_mm is on swapoff's mmlist. */
|
||||
+ if (unlikely(list_empty(&dst_mm->mmlist))) {
|
||||
+ spin_lock(&mmlist_lock);
|
||||
+ if (list_empty(&dst_mm->mmlist))
|
||||
+ list_add(&dst_mm->mmlist,
|
||||
+ &src_mm->mmlist);
|
||||
+ spin_unlock(&mmlist_lock);
|
||||
+ }
|
||||
rss[MM_SWAPENTS]++;
|
||||
- else if (is_migration_entry(entry)) {
|
||||
+ } else if (is_migration_entry(entry)) {
|
||||
page = migration_entry_to_page(entry);
|
||||
|
||||
if (PageAnon(page))
|
||||
diff --git a/mm/mmap.c b/mm/mmap.c
|
||||
index dfe90657..b91ac80 100644
|
||||
--- a/mm/mmap.c
|
||||
+++ b/mm/mmap.c
|
||||
@@ -745,8 +745,11 @@ again: remove_next = 1 + (end > next->vm_end);
|
||||
* shrinking vma had, to cover any anon pages imported.
|
||||
*/
|
||||
if (exporter && exporter->anon_vma && !importer->anon_vma) {
|
||||
- if (anon_vma_clone(importer, exporter))
|
||||
- return -ENOMEM;
|
||||
+ int error;
|
||||
+
|
||||
+ error = anon_vma_clone(importer, exporter);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
importer->anon_vma = exporter->anon_vma;
|
||||
}
|
||||
}
|
||||
@@ -2428,7 +2431,8 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
|
||||
if (err)
|
||||
goto out_free_vma;
|
||||
|
||||
- if (anon_vma_clone(new, vma))
|
||||
+ err = anon_vma_clone(new, vma);
|
||||
+ if (err)
|
||||
goto out_free_mpol;
|
||||
|
||||
if (new->vm_file)
|
||||
diff --git a/mm/rmap.c b/mm/rmap.c
|
||||
index cdbd312..cab9820 100644
|
||||
--- a/mm/rmap.c
|
||||
+++ b/mm/rmap.c
|
||||
@@ -274,6 +274,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
|
||||
{
|
||||
struct anon_vma_chain *avc;
|
||||
struct anon_vma *anon_vma;
|
||||
+ int error;
|
||||
|
||||
/* Don't bother if the parent process has no anon_vma here. */
|
||||
if (!pvma->anon_vma)
|
||||
@@ -283,8 +284,9 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
|
||||
* First, attach the new VMA to the parent VMA's anon_vmas,
|
||||
* so rmap can find non-COWed pages in child processes.
|
||||
*/
|
||||
- if (anon_vma_clone(vma, pvma))
|
||||
- return -ENOMEM;
|
||||
+ error = anon_vma_clone(vma, pvma);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
|
||||
/* Then add our own anon_vma. */
|
||||
anon_vma = anon_vma_alloc();
|
||||
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
|
||||
index d4042e7..c5afd57 100644
|
||||
--- a/mm/vmpressure.c
|
||||
+++ b/mm/vmpressure.c
|
||||
@@ -165,6 +165,7 @@ static void vmpressure_work_fn(struct work_struct *work)
|
||||
unsigned long scanned;
|
||||
unsigned long reclaimed;
|
||||
|
||||
+ spin_lock(&vmpr->sr_lock);
|
||||
/*
|
||||
* Several contexts might be calling vmpressure(), so it is
|
||||
* possible that the work was rescheduled again before the old
|
||||
@@ -173,11 +174,12 @@ static void vmpressure_work_fn(struct work_struct *work)
|
||||
* here. No need for any locks here since we don't care if
|
||||
* vmpr->reclaimed is in sync.
|
||||
*/
|
||||
- if (!vmpr->scanned)
|
||||
+ scanned = vmpr->scanned;
|
||||
+ if (!scanned) {
|
||||
+ spin_unlock(&vmpr->sr_lock);
|
||||
return;
|
||||
+ }
|
||||
|
||||
- spin_lock(&vmpr->sr_lock);
|
||||
- scanned = vmpr->scanned;
|
||||
reclaimed = vmpr->reclaimed;
|
||||
vmpr->scanned = 0;
|
||||
vmpr->reclaimed = 0;
|
||||
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
|
||||
index b0db904..4617586 100644
|
||||
--- a/net/core/rtnetlink.c
|
||||
+++ b/net/core/rtnetlink.c
|
||||
@@ -1453,6 +1453,7 @@ static int do_setlink(const struct sk_buff *skb,
|
||||
goto errout;
|
||||
}
|
||||
if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
|
||||
+ put_net(net);
|
||||
err = -EPERM;
|
||||
goto errout;
|
||||
}
|
||||
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
|
||||
index 8c8493e..278836f 100644
|
||||
--- a/net/ipv4/gre_offload.c
|
||||
+++ b/net/ipv4/gre_offload.c
|
||||
@@ -271,6 +271,9 @@ static int gre_gro_complete(struct sk_buff *skb, int nhoff)
|
||||
err = ptype->callbacks.gro_complete(skb, nhoff + grehlen);
|
||||
|
||||
rcu_read_unlock();
|
||||
+
|
||||
+ skb_set_inner_mac_header(skb, nhoff + grehlen);
|
||||
+
|
||||
return err;
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
|
||||
index e4a8f76..b0a9cb4 100644
|
||||
--- a/net/ipv4/ip_vti.c
|
||||
+++ b/net/ipv4/ip_vti.c
|
||||
@@ -369,6 +369,7 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
|
||||
.validate = vti_tunnel_validate,
|
||||
.newlink = vti_newlink,
|
||||
.changelink = vti_changelink,
|
||||
+ .dellink = ip_tunnel_dellink,
|
||||
.get_size = vti_get_size,
|
||||
.fill_info = vti_fill_info,
|
||||
};
|
||||
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
|
||||
index b27f6d3..4a230b1 100644
|
||||
--- a/net/ipv6/ip6_gre.c
|
||||
+++ b/net/ipv6/ip6_gre.c
|
||||
@@ -508,11 +508,11 @@ static int ip6gre_rcv(struct sk_buff *skb)
|
||||
|
||||
skb->protocol = gre_proto;
|
||||
/* WCCP version 1 and 2 protocol decoding.
|
||||
- * - Change protocol to IP
|
||||
+ * - Change protocol to IPv6
|
||||
* - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
|
||||
*/
|
||||
if (flags == 0 && gre_proto == htons(ETH_P_WCCP)) {
|
||||
- skb->protocol = htons(ETH_P_IP);
|
||||
+ skb->protocol = htons(ETH_P_IPV6);
|
||||
if ((*(h + offset) & 0xF0) != 0x40)
|
||||
offset += 4;
|
||||
}
|
||||
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
|
||||
index 9a5339f..28456c9 100644
|
||||
--- a/net/ipv6/ip6_vti.c
|
||||
+++ b/net/ipv6/ip6_vti.c
|
||||
@@ -825,6 +825,15 @@ static int vti6_newlink(struct net *src_net, struct net_device *dev,
|
||||
return vti6_tnl_create2(dev);
|
||||
}
|
||||
|
||||
+static void vti6_dellink(struct net_device *dev, struct list_head *head)
|
||||
+{
|
||||
+ struct net *net = dev_net(dev);
|
||||
+ struct vti6_net *ip6n = net_generic(net, vti6_net_id);
|
||||
+
|
||||
+ if (dev != ip6n->fb_tnl_dev)
|
||||
+ unregister_netdevice_queue(dev, head);
|
||||
+}
|
||||
+
|
||||
static int vti6_changelink(struct net_device *dev, struct nlattr *tb[],
|
||||
struct nlattr *data[])
|
||||
{
|
||||
@@ -900,6 +909,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = {
|
||||
.setup = vti6_dev_setup,
|
||||
.validate = vti6_validate,
|
||||
.newlink = vti6_newlink,
|
||||
+ .dellink = vti6_dellink,
|
||||
.changelink = vti6_changelink,
|
||||
.get_size = vti6_get_size,
|
||||
.fill_info = vti6_fill_info,
|
||||
@@ -945,6 +955,7 @@ static int __net_init vti6_init_net(struct net *net)
|
||||
if (!ip6n->fb_tnl_dev)
|
||||
goto err_alloc_dev;
|
||||
dev_net_set(ip6n->fb_tnl_dev, net);
|
||||
+ ip6n->fb_tnl_dev->rtnl_link_ops = &vti6_link_ops;
|
||||
|
||||
err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev);
|
||||
if (err < 0)
|
||||
diff --git a/net/mac80211/aes_ccm.c b/net/mac80211/aes_ccm.c
|
||||
index 7c7df47..f056f9ed 100644
|
||||
--- a/net/mac80211/aes_ccm.c
|
||||
+++ b/net/mac80211/aes_ccm.c
|
||||
@@ -54,6 +54,9 @@ int ieee80211_aes_ccm_decrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad,
|
||||
|
||||
memset(&aead_req, 0, sizeof(aead_req));
|
||||
|
||||
+ if (data_len == 0)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
sg_init_one(&pt, data, data_len);
|
||||
sg_init_one(&assoc, &aad[2], be16_to_cpup((__be16 *)aad));
|
||||
sg_init_table(ct, 2);
|
||||
diff --git a/net/sctp/output.c b/net/sctp/output.c
|
||||
index 8267b06..740ca5f 100644
|
||||
--- a/net/sctp/output.c
|
||||
+++ b/net/sctp/output.c
|
||||
@@ -401,12 +401,12 @@ int sctp_packet_transmit(struct sctp_packet *packet)
|
||||
sk = chunk->skb->sk;
|
||||
|
||||
/* Allocate the new skb. */
|
||||
- nskb = alloc_skb(packet->size + LL_MAX_HEADER, GFP_ATOMIC);
|
||||
+ nskb = alloc_skb(packet->size + MAX_HEADER, GFP_ATOMIC);
|
||||
if (!nskb)
|
||||
goto nomem;
|
||||
|
||||
/* Make sure the outbound skb has enough header room reserved. */
|
||||
- skb_reserve(nskb, packet->overhead + LL_MAX_HEADER);
|
||||
+ skb_reserve(nskb, packet->overhead + MAX_HEADER);
|
||||
|
||||
/* Set the owning socket so that we know where to get the
|
||||
* destination IP address.
|
||||
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
|
||||
index eaf64ea..1a05efa 100644
|
||||
--- a/sound/pci/hda/patch_analog.c
|
||||
+++ b/sound/pci/hda/patch_analog.c
|
||||
@@ -333,6 +333,7 @@ static const struct hda_fixup ad1986a_fixups[] = {
|
||||
|
||||
static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC),
|
||||
+ SND_PCI_QUIRK(0x1043, 0x1443, "ASUS Z99He", AD1986A_FIXUP_EAPD),
|
||||
SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD),
|
||||
SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
|
||||
SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK),
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 4c826a4..910f2db 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4554,6 +4554,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
+ SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
|
||||
SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
|
||||
diff --git a/sound/usb/midi.c b/sound/usb/midi.c
|
||||
index b901f46..c7aa71e 100644
|
||||
--- a/sound/usb/midi.c
|
||||
+++ b/sound/usb/midi.c
|
||||
@@ -364,6 +364,8 @@ static void snd_usbmidi_error_timer(unsigned long data)
|
||||
if (in && in->error_resubmit) {
|
||||
in->error_resubmit = 0;
|
||||
for (j = 0; j < INPUT_URBS; ++j) {
|
||||
+ if (atomic_read(&in->urbs[j]->use_count))
|
||||
+ continue;
|
||||
in->urbs[j]->dev = umidi->dev;
|
||||
snd_usbmidi_submit_urb(in->urbs[j], GFP_ATOMIC);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,942 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 00fffa3..b0963ca 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 32
|
||||
+SUBLEVEL = 33
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
|
||||
index 6eb97b3..4370933 100644
|
||||
--- a/arch/arm/mm/context.c
|
||||
+++ b/arch/arm/mm/context.c
|
||||
@@ -144,21 +144,17 @@ static void flush_context(unsigned int cpu)
|
||||
/* Update the list of reserved ASIDs and the ASID bitmap. */
|
||||
bitmap_clear(asid_map, 0, NUM_USER_ASIDS);
|
||||
for_each_possible_cpu(i) {
|
||||
- if (i == cpu) {
|
||||
- asid = 0;
|
||||
- } else {
|
||||
- asid = atomic64_xchg(&per_cpu(active_asids, i), 0);
|
||||
- /*
|
||||
- * If this CPU has already been through a
|
||||
- * rollover, but hasn't run another task in
|
||||
- * the meantime, we must preserve its reserved
|
||||
- * ASID, as this is the only trace we have of
|
||||
- * the process it is still running.
|
||||
- */
|
||||
- if (asid == 0)
|
||||
- asid = per_cpu(reserved_asids, i);
|
||||
- __set_bit(asid & ~ASID_MASK, asid_map);
|
||||
- }
|
||||
+ asid = atomic64_xchg(&per_cpu(active_asids, i), 0);
|
||||
+ /*
|
||||
+ * If this CPU has already been through a
|
||||
+ * rollover, but hasn't run another task in
|
||||
+ * the meantime, we must preserve its reserved
|
||||
+ * ASID, as this is the only trace we have of
|
||||
+ * the process it is still running.
|
||||
+ */
|
||||
+ if (asid == 0)
|
||||
+ asid = per_cpu(reserved_asids, i);
|
||||
+ __set_bit(asid & ~ASID_MASK, asid_map);
|
||||
per_cpu(reserved_asids, i) = asid;
|
||||
}
|
||||
|
||||
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
|
||||
index c404fb0..64bc6c6 100644
|
||||
--- a/arch/arm64/include/asm/cputype.h
|
||||
+++ b/arch/arm64/include/asm/cputype.h
|
||||
@@ -77,6 +77,8 @@ static inline u32 __attribute_const__ read_cpuid_cachetype(void)
|
||||
return read_cpuid(CTR_EL0);
|
||||
}
|
||||
|
||||
+void cpuinfo_store_cpu(void);
|
||||
+
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
|
||||
index 071c382..1e01d80 100644
|
||||
--- a/arch/arm64/kernel/setup.c
|
||||
+++ b/arch/arm64/kernel/setup.c
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/of_platform.h>
|
||||
+#include <linux/personality.h>
|
||||
|
||||
#include <asm/cputype.h>
|
||||
#include <asm/elf.h>
|
||||
@@ -73,7 +74,6 @@ unsigned int compat_elf_hwcap __read_mostly = COMPAT_ELF_HWCAP_DEFAULT;
|
||||
#endif
|
||||
|
||||
static const char *cpu_name;
|
||||
-static const char *machine_name;
|
||||
phys_addr_t __fdt_pointer __initdata;
|
||||
|
||||
/*
|
||||
@@ -193,6 +193,19 @@ static void __init smp_build_mpidr_hash(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
+struct cpuinfo_arm64 {
|
||||
+ struct cpu cpu;
|
||||
+ u32 reg_midr;
|
||||
+};
|
||||
+
|
||||
+static DEFINE_PER_CPU(struct cpuinfo_arm64, cpu_data);
|
||||
+
|
||||
+void cpuinfo_store_cpu(void)
|
||||
+{
|
||||
+ struct cpuinfo_arm64 *info = this_cpu_ptr(&cpu_data);
|
||||
+ info->reg_midr = read_cpuid_id();
|
||||
+}
|
||||
+
|
||||
static void __init setup_processor(void)
|
||||
{
|
||||
struct cpu_info *cpu_info;
|
||||
@@ -213,6 +226,8 @@ static void __init setup_processor(void)
|
||||
sprintf(init_utsname()->machine, ELF_PLATFORM);
|
||||
elf_hwcap = 0;
|
||||
|
||||
+ cpuinfo_store_cpu();
|
||||
+
|
||||
/*
|
||||
* ID_AA64ISAR0_EL1 contains 4-bit wide signed feature blocks.
|
||||
* The blocks we test below represent incremental functionality
|
||||
@@ -257,8 +272,6 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
|
||||
while (true)
|
||||
cpu_relax();
|
||||
}
|
||||
-
|
||||
- machine_name = of_flat_dt_get_machine_name();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -363,14 +376,12 @@ static int __init arm64_device_init(void)
|
||||
}
|
||||
arch_initcall(arm64_device_init);
|
||||
|
||||
-static DEFINE_PER_CPU(struct cpu, cpu_data);
|
||||
-
|
||||
static int __init topology_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
- struct cpu *cpu = &per_cpu(cpu_data, i);
|
||||
+ struct cpu *cpu = &per_cpu(cpu_data.cpu, i);
|
||||
cpu->hotpluggable = 1;
|
||||
register_cpu(cpu, i);
|
||||
}
|
||||
@@ -391,14 +402,41 @@ static const char *hwcap_str[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
+#ifdef CONFIG_COMPAT
|
||||
+static const char *compat_hwcap_str[] = {
|
||||
+ "swp",
|
||||
+ "half",
|
||||
+ "thumb",
|
||||
+ "26bit",
|
||||
+ "fastmult",
|
||||
+ "fpa",
|
||||
+ "vfp",
|
||||
+ "edsp",
|
||||
+ "java",
|
||||
+ "iwmmxt",
|
||||
+ "crunch",
|
||||
+ "thumbee",
|
||||
+ "neon",
|
||||
+ "vfpv3",
|
||||
+ "vfpv3d16",
|
||||
+ "tls",
|
||||
+ "vfpv4",
|
||||
+ "idiva",
|
||||
+ "idivt",
|
||||
+ "vfpd32",
|
||||
+ "lpae",
|
||||
+ "evtstrm"
|
||||
+};
|
||||
+#endif /* CONFIG_COMPAT */
|
||||
+
|
||||
static int c_show(struct seq_file *m, void *v)
|
||||
{
|
||||
- int i;
|
||||
-
|
||||
- seq_printf(m, "Processor\t: %s rev %d (%s)\n",
|
||||
- cpu_name, read_cpuid_id() & 15, ELF_PLATFORM);
|
||||
+ int i, j;
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
+ struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i);
|
||||
+ u32 midr = cpuinfo->reg_midr;
|
||||
+
|
||||
/*
|
||||
* glibc reads /proc/cpuinfo to determine the number of
|
||||
* online processors, looking for lines beginning with
|
||||
@@ -407,24 +445,33 @@ static int c_show(struct seq_file *m, void *v)
|
||||
#ifdef CONFIG_SMP
|
||||
seq_printf(m, "processor\t: %d\n", i);
|
||||
#endif
|
||||
- }
|
||||
-
|
||||
- /* dump out the processor features */
|
||||
- seq_puts(m, "Features\t: ");
|
||||
-
|
||||
- for (i = 0; hwcap_str[i]; i++)
|
||||
- if (elf_hwcap & (1 << i))
|
||||
- seq_printf(m, "%s ", hwcap_str[i]);
|
||||
|
||||
- seq_printf(m, "\nCPU implementer\t: 0x%02x\n", read_cpuid_id() >> 24);
|
||||
- seq_printf(m, "CPU architecture: AArch64\n");
|
||||
- seq_printf(m, "CPU variant\t: 0x%x\n", (read_cpuid_id() >> 20) & 15);
|
||||
- seq_printf(m, "CPU part\t: 0x%03x\n", (read_cpuid_id() >> 4) & 0xfff);
|
||||
- seq_printf(m, "CPU revision\t: %d\n", read_cpuid_id() & 15);
|
||||
-
|
||||
- seq_puts(m, "\n");
|
||||
+ /*
|
||||
+ * Dump out the common processor features in a single line.
|
||||
+ * Userspace should read the hwcaps with getauxval(AT_HWCAP)
|
||||
+ * rather than attempting to parse this, but there's a body of
|
||||
+ * software which does already (at least for 32-bit).
|
||||
+ */
|
||||
+ seq_puts(m, "Features\t:");
|
||||
+ if (personality(current->personality) == PER_LINUX32) {
|
||||
+#ifdef CONFIG_COMPAT
|
||||
+ for (j = 0; compat_hwcap_str[j]; j++)
|
||||
+ if (compat_elf_hwcap & (1 << j))
|
||||
+ seq_printf(m, " %s", compat_hwcap_str[j]);
|
||||
+#endif /* CONFIG_COMPAT */
|
||||
+ } else {
|
||||
+ for (j = 0; hwcap_str[j]; j++)
|
||||
+ if (elf_hwcap & (1 << j))
|
||||
+ seq_printf(m, " %s", hwcap_str[j]);
|
||||
+ }
|
||||
+ seq_puts(m, "\n");
|
||||
|
||||
- seq_printf(m, "Hardware\t: %s\n", machine_name);
|
||||
+ seq_printf(m, "CPU implementer\t: 0x%02x\n", (midr >> 24));
|
||||
+ seq_printf(m, "CPU architecture: 8\n");
|
||||
+ seq_printf(m, "CPU variant\t: 0x%x\n", ((midr >> 20) & 0xf));
|
||||
+ seq_printf(m, "CPU part\t: 0x%03x\n", ((midr >> 4) & 0xfff));
|
||||
+ seq_printf(m, "CPU revision\t: %d\n\n", (midr & 0xf));
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
|
||||
index 7cfb92a..7b9542b 100644
|
||||
--- a/arch/arm64/kernel/smp.c
|
||||
+++ b/arch/arm64/kernel/smp.c
|
||||
@@ -148,6 +148,11 @@ asmlinkage void secondary_start_kernel(void)
|
||||
cpu_ops[cpu]->cpu_postboot();
|
||||
|
||||
/*
|
||||
+ * Log the CPU info before it is marked online and might get read.
|
||||
+ */
|
||||
+ cpuinfo_store_cpu();
|
||||
+
|
||||
+ /*
|
||||
* Enable GIC and timers.
|
||||
*/
|
||||
notify_cpu_starting(cpu);
|
||||
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
|
||||
index 67a078f..34467ac 100644
|
||||
--- a/arch/mips/cavium-octeon/smp.c
|
||||
+++ b/arch/mips/cavium-octeon/smp.c
|
||||
@@ -263,9 +263,7 @@ static int octeon_cpu_disable(void)
|
||||
|
||||
set_cpu_online(cpu, false);
|
||||
cpu_clear(cpu, cpu_callin_map);
|
||||
- local_irq_disable();
|
||||
octeon_fixup_irqs();
|
||||
- local_irq_enable();
|
||||
|
||||
flush_cache_all();
|
||||
local_flush_tlb_all();
|
||||
diff --git a/arch/mips/kernel/irq_cpu.c b/arch/mips/kernel/irq_cpu.c
|
||||
index e498f2b..f5598e2 100644
|
||||
--- a/arch/mips/kernel/irq_cpu.c
|
||||
+++ b/arch/mips/kernel/irq_cpu.c
|
||||
@@ -56,6 +56,8 @@ static struct irq_chip mips_cpu_irq_controller = {
|
||||
.irq_mask_ack = mask_mips_irq,
|
||||
.irq_unmask = unmask_mips_irq,
|
||||
.irq_eoi = unmask_mips_irq,
|
||||
+ .irq_disable = mask_mips_irq,
|
||||
+ .irq_enable = unmask_mips_irq,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -92,6 +94,8 @@ static struct irq_chip mips_mt_cpu_irq_controller = {
|
||||
.irq_mask_ack = mips_mt_cpu_irq_ack,
|
||||
.irq_unmask = unmask_mips_irq,
|
||||
.irq_eoi = unmask_mips_irq,
|
||||
+ .irq_disable = mask_mips_irq,
|
||||
+ .irq_enable = unmask_mips_irq,
|
||||
};
|
||||
|
||||
void __init mips_cpu_irq_init(void)
|
||||
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
|
||||
index 0a022ee..18ed112 100644
|
||||
--- a/arch/mips/kernel/smp.c
|
||||
+++ b/arch/mips/kernel/smp.c
|
||||
@@ -109,10 +109,10 @@ asmlinkage void start_secondary(void)
|
||||
else
|
||||
#endif /* CONFIG_MIPS_MT_SMTC */
|
||||
cpu_probe();
|
||||
- cpu_report();
|
||||
per_cpu_trap_init(false);
|
||||
mips_clockevent_init();
|
||||
mp_ops->init_secondary();
|
||||
+ cpu_report();
|
||||
|
||||
/*
|
||||
* XXX parity protection should be folded in here when it's converted
|
||||
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
||||
index de42688..80c22a3 100644
|
||||
--- a/arch/x86/kvm/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx.c
|
||||
@@ -441,6 +441,7 @@ struct vcpu_vmx {
|
||||
#endif
|
||||
int gs_ldt_reload_needed;
|
||||
int fs_reload_needed;
|
||||
+ unsigned long vmcs_host_cr4; /* May not match real cr4 */
|
||||
} host_state;
|
||||
struct {
|
||||
int vm86_active;
|
||||
@@ -4165,11 +4166,16 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
|
||||
u32 low32, high32;
|
||||
unsigned long tmpl;
|
||||
struct desc_ptr dt;
|
||||
+ unsigned long cr4;
|
||||
|
||||
vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS); /* 22.2.3 */
|
||||
- vmcs_writel(HOST_CR4, read_cr4()); /* 22.2.3, 22.2.5 */
|
||||
vmcs_writel(HOST_CR3, read_cr3()); /* 22.2.3 FIXME: shadow tables */
|
||||
|
||||
+ /* Save the most likely value for this task's CR4 in the VMCS. */
|
||||
+ cr4 = read_cr4();
|
||||
+ vmcs_writel(HOST_CR4, cr4); /* 22.2.3, 22.2.5 */
|
||||
+ vmx->host_state.vmcs_host_cr4 = cr4;
|
||||
+
|
||||
vmcs_write16(HOST_CS_SELECTOR, __KERNEL_CS); /* 22.2.4 */
|
||||
#ifdef CONFIG_X86_64
|
||||
/*
|
||||
@@ -7196,7 +7202,7 @@ static void atomic_switch_perf_msrs(struct vcpu_vmx *vmx)
|
||||
static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||
- unsigned long debugctlmsr;
|
||||
+ unsigned long debugctlmsr, cr4;
|
||||
|
||||
/* Record the guest's net vcpu time for enforced NMI injections. */
|
||||
if (unlikely(!cpu_has_virtual_nmis() && vmx->soft_vnmi_blocked))
|
||||
@@ -7217,6 +7223,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||
if (test_bit(VCPU_REGS_RIP, (unsigned long *)&vcpu->arch.regs_dirty))
|
||||
vmcs_writel(GUEST_RIP, vcpu->arch.regs[VCPU_REGS_RIP]);
|
||||
|
||||
+ cr4 = read_cr4();
|
||||
+ if (unlikely(cr4 != vmx->host_state.vmcs_host_cr4)) {
|
||||
+ vmcs_writel(HOST_CR4, cr4);
|
||||
+ vmx->host_state.vmcs_host_cr4 = cr4;
|
||||
+ }
|
||||
+
|
||||
/* When single-stepping over STI and MOV SS, we must clear the
|
||||
* corresponding interruptibility bits in the guest state. Otherwise
|
||||
* vmentry fails as it then expects bit 14 (BS) in pending debug
|
||||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
|
||||
index 981c2db..88f143d 100644
|
||||
--- a/arch/x86/pci/common.c
|
||||
+++ b/arch/x86/pci/common.c
|
||||
@@ -448,6 +448,22 @@ static const struct dmi_system_id pciprobe_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "ftServer"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ .callback = set_scan_all,
|
||||
+ .ident = "Stratus/NEC ftServer",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R32"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = set_scan_all,
|
||||
+ .ident = "Stratus/NEC ftServer",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R31"),
|
||||
+ },
|
||||
+ },
|
||||
{}
|
||||
};
|
||||
|
||||
diff --git a/crypto/crc32c.c b/crypto/crc32c.c
|
||||
index 06f7018..238f0e6 100644
|
||||
--- a/crypto/crc32c.c
|
||||
+++ b/crypto/crc32c.c
|
||||
@@ -170,3 +170,4 @@ module_exit(crc32c_mod_fini);
|
||||
MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>");
|
||||
MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations wrapper for lib/crc32c");
|
||||
MODULE_LICENSE("GPL");
|
||||
+MODULE_ALIAS_CRYPTO("crc32c");
|
||||
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
|
||||
index ccbffd0..8f42bd7 100644
|
||||
--- a/drivers/gpio/gpiolib.c
|
||||
+++ b/drivers/gpio/gpiolib.c
|
||||
@@ -911,6 +911,7 @@ int gpiod_export_link(struct device *dev, const char *name,
|
||||
if (tdev != NULL) {
|
||||
status = sysfs_create_link(&dev->kobj, &tdev->kobj,
|
||||
name);
|
||||
+ put_device(tdev);
|
||||
} else {
|
||||
status = -ENODEV;
|
||||
}
|
||||
@@ -958,7 +959,7 @@ int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
|
||||
}
|
||||
|
||||
status = sysfs_set_active_low(desc, dev, value);
|
||||
-
|
||||
+ put_device(dev);
|
||||
unlock:
|
||||
mutex_unlock(&sysfs_lock);
|
||||
|
||||
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
|
||||
index d375322..0218a9b 100644
|
||||
--- a/fs/cifs/file.c
|
||||
+++ b/fs/cifs/file.c
|
||||
@@ -366,6 +366,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
struct cifsLockInfo *li, *tmp;
|
||||
struct cifs_fid fid;
|
||||
struct cifs_pending_open open;
|
||||
+ bool oplock_break_cancelled;
|
||||
|
||||
spin_lock(&cifs_file_list_lock);
|
||||
if (--cifs_file->count > 0) {
|
||||
@@ -397,7 +398,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
}
|
||||
spin_unlock(&cifs_file_list_lock);
|
||||
|
||||
- cancel_work_sync(&cifs_file->oplock_break);
|
||||
+ oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);
|
||||
|
||||
if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
|
||||
struct TCP_Server_Info *server = tcon->ses->server;
|
||||
@@ -409,6 +410,9 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
_free_xid(xid);
|
||||
}
|
||||
|
||||
+ if (oplock_break_cancelled)
|
||||
+ cifs_done_oplock_break(cifsi);
|
||||
+
|
||||
cifs_del_pending_open(&open);
|
||||
|
||||
/*
|
||||
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
|
||||
index 2a8b2e1..589117e 100644
|
||||
--- a/fs/ext4/file.c
|
||||
+++ b/fs/ext4/file.c
|
||||
@@ -100,7 +100,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
struct blk_plug plug;
|
||||
int unaligned_aio = 0;
|
||||
ssize_t ret;
|
||||
- int overwrite = 0;
|
||||
+ int *overwrite = iocb->private;
|
||||
size_t length = iov_length(iov, nr_segs);
|
||||
|
||||
if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) &&
|
||||
@@ -118,8 +118,6 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
mutex_lock(&inode->i_mutex);
|
||||
blk_start_plug(&plug);
|
||||
|
||||
- iocb->private = &overwrite;
|
||||
-
|
||||
/* check whether we do a DIO overwrite or not */
|
||||
if (ext4_should_dioread_nolock(inode) && !unaligned_aio &&
|
||||
!file->f_mapping->nrpages && pos + length <= i_size_read(inode)) {
|
||||
@@ -143,7 +141,7 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
* So we should check these two conditions.
|
||||
*/
|
||||
if (err == len && (map.m_flags & EXT4_MAP_MAPPED))
|
||||
- overwrite = 1;
|
||||
+ *overwrite = 1;
|
||||
}
|
||||
|
||||
ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
|
||||
@@ -170,6 +168,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
ssize_t ret;
|
||||
+ int overwrite = 0;
|
||||
|
||||
/*
|
||||
* If we have encountered a bitmap-format file, the size limit
|
||||
@@ -190,6 +189,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
|
||||
}
|
||||
}
|
||||
|
||||
+ iocb->private = &overwrite;
|
||||
if (unlikely(iocb->ki_filp->f_flags & O_DIRECT))
|
||||
ret = ext4_file_dio_write(iocb, iov, nr_segs, pos);
|
||||
else
|
||||
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
|
||||
index 9bc72de..b02c202 100644
|
||||
--- a/fs/nilfs2/nilfs.h
|
||||
+++ b/fs/nilfs2/nilfs.h
|
||||
@@ -141,7 +141,6 @@ enum {
|
||||
* @ti_save: Backup of journal_info field of task_struct
|
||||
* @ti_flags: Flags
|
||||
* @ti_count: Nest level
|
||||
- * @ti_garbage: List of inode to be put when releasing semaphore
|
||||
*/
|
||||
struct nilfs_transaction_info {
|
||||
u32 ti_magic;
|
||||
@@ -150,7 +149,6 @@ struct nilfs_transaction_info {
|
||||
one of other filesystems has a bug. */
|
||||
unsigned short ti_flags;
|
||||
unsigned short ti_count;
|
||||
- struct list_head ti_garbage;
|
||||
};
|
||||
|
||||
/* ti_magic */
|
||||
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
|
||||
index a1a1916..5bee816 100644
|
||||
--- a/fs/nilfs2/segment.c
|
||||
+++ b/fs/nilfs2/segment.c
|
||||
@@ -305,7 +305,6 @@ static void nilfs_transaction_lock(struct super_block *sb,
|
||||
ti->ti_count = 0;
|
||||
ti->ti_save = cur_ti;
|
||||
ti->ti_magic = NILFS_TI_MAGIC;
|
||||
- INIT_LIST_HEAD(&ti->ti_garbage);
|
||||
current->journal_info = ti;
|
||||
|
||||
for (;;) {
|
||||
@@ -332,8 +331,6 @@ static void nilfs_transaction_unlock(struct super_block *sb)
|
||||
|
||||
up_write(&nilfs->ns_segctor_sem);
|
||||
current->journal_info = ti->ti_save;
|
||||
- if (!list_empty(&ti->ti_garbage))
|
||||
- nilfs_dispose_list(nilfs, &ti->ti_garbage, 0);
|
||||
}
|
||||
|
||||
static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci,
|
||||
@@ -746,6 +743,15 @@ static void nilfs_dispose_list(struct the_nilfs *nilfs,
|
||||
}
|
||||
}
|
||||
|
||||
+static void nilfs_iput_work_func(struct work_struct *work)
|
||||
+{
|
||||
+ struct nilfs_sc_info *sci = container_of(work, struct nilfs_sc_info,
|
||||
+ sc_iput_work);
|
||||
+ struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
|
||||
+
|
||||
+ nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 0);
|
||||
+}
|
||||
+
|
||||
static int nilfs_test_metadata_dirty(struct the_nilfs *nilfs,
|
||||
struct nilfs_root *root)
|
||||
{
|
||||
@@ -1899,8 +1905,8 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci,
|
||||
static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
|
||||
struct the_nilfs *nilfs)
|
||||
{
|
||||
- struct nilfs_transaction_info *ti = current->journal_info;
|
||||
struct nilfs_inode_info *ii, *n;
|
||||
+ int defer_iput = false;
|
||||
|
||||
spin_lock(&nilfs->ns_inode_lock);
|
||||
list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) {
|
||||
@@ -1911,9 +1917,24 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
|
||||
clear_bit(NILFS_I_BUSY, &ii->i_state);
|
||||
brelse(ii->i_bh);
|
||||
ii->i_bh = NULL;
|
||||
- list_move_tail(&ii->i_dirty, &ti->ti_garbage);
|
||||
+ list_del_init(&ii->i_dirty);
|
||||
+ if (!ii->vfs_inode.i_nlink) {
|
||||
+ /*
|
||||
+ * Defer calling iput() to avoid a deadlock
|
||||
+ * over I_SYNC flag for inodes with i_nlink == 0
|
||||
+ */
|
||||
+ list_add_tail(&ii->i_dirty, &sci->sc_iput_queue);
|
||||
+ defer_iput = true;
|
||||
+ } else {
|
||||
+ spin_unlock(&nilfs->ns_inode_lock);
|
||||
+ iput(&ii->vfs_inode);
|
||||
+ spin_lock(&nilfs->ns_inode_lock);
|
||||
+ }
|
||||
}
|
||||
spin_unlock(&nilfs->ns_inode_lock);
|
||||
+
|
||||
+ if (defer_iput)
|
||||
+ schedule_work(&sci->sc_iput_work);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2580,6 +2601,8 @@ static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb,
|
||||
INIT_LIST_HEAD(&sci->sc_segbufs);
|
||||
INIT_LIST_HEAD(&sci->sc_write_logs);
|
||||
INIT_LIST_HEAD(&sci->sc_gc_inodes);
|
||||
+ INIT_LIST_HEAD(&sci->sc_iput_queue);
|
||||
+ INIT_WORK(&sci->sc_iput_work, nilfs_iput_work_func);
|
||||
init_timer(&sci->sc_timer);
|
||||
|
||||
sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT;
|
||||
@@ -2606,6 +2629,8 @@ static void nilfs_segctor_write_out(struct nilfs_sc_info *sci)
|
||||
ret = nilfs_segctor_construct(sci, SC_LSEG_SR);
|
||||
nilfs_transaction_unlock(sci->sc_super);
|
||||
|
||||
+ flush_work(&sci->sc_iput_work);
|
||||
+
|
||||
} while (ret && retrycount-- > 0);
|
||||
}
|
||||
|
||||
@@ -2630,6 +2655,9 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
|
||||
|| sci->sc_seq_request != sci->sc_seq_done);
|
||||
spin_unlock(&sci->sc_state_lock);
|
||||
|
||||
+ if (flush_work(&sci->sc_iput_work))
|
||||
+ flag = true;
|
||||
+
|
||||
if (flag || !nilfs_segctor_confirm(sci))
|
||||
nilfs_segctor_write_out(sci);
|
||||
|
||||
@@ -2639,6 +2667,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
|
||||
nilfs_dispose_list(nilfs, &sci->sc_dirty_files, 1);
|
||||
}
|
||||
|
||||
+ if (!list_empty(&sci->sc_iput_queue)) {
|
||||
+ nilfs_warning(sci->sc_super, __func__,
|
||||
+ "iput queue is not empty\n");
|
||||
+ nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 1);
|
||||
+ }
|
||||
+
|
||||
WARN_ON(!list_empty(&sci->sc_segbufs));
|
||||
WARN_ON(!list_empty(&sci->sc_write_logs));
|
||||
|
||||
diff --git a/fs/nilfs2/segment.h b/fs/nilfs2/segment.h
|
||||
index 38a1d00..a48d6de 100644
|
||||
--- a/fs/nilfs2/segment.h
|
||||
+++ b/fs/nilfs2/segment.h
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/buffer_head.h>
|
||||
+#include <linux/workqueue.h>
|
||||
#include <linux/nilfs2_fs.h>
|
||||
#include "nilfs.h"
|
||||
|
||||
@@ -92,6 +93,8 @@ struct nilfs_segsum_pointer {
|
||||
* @sc_nblk_inc: Block count of current generation
|
||||
* @sc_dirty_files: List of files to be written
|
||||
* @sc_gc_inodes: List of GC inodes having blocks to be written
|
||||
+ * @sc_iput_queue: list of inodes for which iput should be done
|
||||
+ * @sc_iput_work: work struct to defer iput call
|
||||
* @sc_freesegs: array of segment numbers to be freed
|
||||
* @sc_nfreesegs: number of segments on @sc_freesegs
|
||||
* @sc_dsync_inode: inode whose data pages are written for a sync operation
|
||||
@@ -135,6 +138,8 @@ struct nilfs_sc_info {
|
||||
|
||||
struct list_head sc_dirty_files;
|
||||
struct list_head sc_gc_inodes;
|
||||
+ struct list_head sc_iput_queue;
|
||||
+ struct work_struct sc_iput_work;
|
||||
|
||||
__u64 *sc_freesegs;
|
||||
size_t sc_nfreesegs;
|
||||
diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h
|
||||
index 2609048..3a34f6e 100644
|
||||
--- a/include/sound/ak4113.h
|
||||
+++ b/include/sound/ak4113.h
|
||||
@@ -286,7 +286,7 @@ struct ak4113 {
|
||||
ak4113_write_t *write;
|
||||
ak4113_read_t *read;
|
||||
void *private_data;
|
||||
- unsigned int init:1;
|
||||
+ atomic_t wq_processing;
|
||||
spinlock_t lock;
|
||||
unsigned char regmap[AK4113_WRITABLE_REGS];
|
||||
struct snd_kcontrol *kctls[AK4113_CONTROLS];
|
||||
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
|
||||
index 52f02a6..069299a 100644
|
||||
--- a/include/sound/ak4114.h
|
||||
+++ b/include/sound/ak4114.h
|
||||
@@ -168,7 +168,7 @@ struct ak4114 {
|
||||
ak4114_write_t * write;
|
||||
ak4114_read_t * read;
|
||||
void * private_data;
|
||||
- unsigned int init: 1;
|
||||
+ atomic_t wq_processing;
|
||||
spinlock_t lock;
|
||||
unsigned char regmap[6];
|
||||
unsigned char txcsb[5];
|
||||
diff --git a/kernel/smpboot.c b/kernel/smpboot.c
|
||||
index eb89e18..60d35ac5 100644
|
||||
--- a/kernel/smpboot.c
|
||||
+++ b/kernel/smpboot.c
|
||||
@@ -279,6 +279,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
|
||||
unsigned int cpu;
|
||||
int ret = 0;
|
||||
|
||||
+ get_online_cpus();
|
||||
mutex_lock(&smpboot_threads_lock);
|
||||
for_each_online_cpu(cpu) {
|
||||
ret = __smpboot_create_thread(plug_thread, cpu);
|
||||
@@ -291,6 +292,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
|
||||
list_add(&plug_thread->list, &hotplug_threads);
|
||||
out:
|
||||
mutex_unlock(&smpboot_threads_lock);
|
||||
+ put_online_cpus();
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(smpboot_register_percpu_thread);
|
||||
diff --git a/lib/checksum.c b/lib/checksum.c
|
||||
index 129775e..8b39e86 100644
|
||||
--- a/lib/checksum.c
|
||||
+++ b/lib/checksum.c
|
||||
@@ -181,6 +181,15 @@ csum_partial_copy(const void *src, void *dst, int len, __wsum sum)
|
||||
EXPORT_SYMBOL(csum_partial_copy);
|
||||
|
||||
#ifndef csum_tcpudp_nofold
|
||||
+static inline u32 from64to32(u64 x)
|
||||
+{
|
||||
+ /* add up 32-bit and 32-bit for 32+c bit */
|
||||
+ x = (x & 0xffffffff) + (x >> 32);
|
||||
+ /* add up carry.. */
|
||||
+ x = (x & 0xffffffff) + (x >> 32);
|
||||
+ return (u32)x;
|
||||
+}
|
||||
+
|
||||
__wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
|
||||
unsigned short len,
|
||||
unsigned short proto,
|
||||
@@ -195,8 +204,7 @@ __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
|
||||
#else
|
||||
s += (proto + len) << 8;
|
||||
#endif
|
||||
- s += (s >> 32);
|
||||
- return (__force __wsum)s;
|
||||
+ return (__force __wsum)from64to32(s);
|
||||
}
|
||||
EXPORT_SYMBOL(csum_tcpudp_nofold);
|
||||
#endif
|
||||
diff --git a/mm/pagewalk.c b/mm/pagewalk.c
|
||||
index 2beeabf..9056d22 100644
|
||||
--- a/mm/pagewalk.c
|
||||
+++ b/mm/pagewalk.c
|
||||
@@ -199,7 +199,10 @@ int walk_page_range(unsigned long addr, unsigned long end,
|
||||
*/
|
||||
if ((vma->vm_start <= addr) &&
|
||||
(vma->vm_flags & VM_PFNMAP)) {
|
||||
- next = vma->vm_end;
|
||||
+ if (walk->pte_hole)
|
||||
+ err = walk->pte_hole(addr, next, walk);
|
||||
+ if (err)
|
||||
+ break;
|
||||
pgd = pgd_offset(walk->mm, next);
|
||||
continue;
|
||||
}
|
||||
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
|
||||
index db1512a..f53542b 100644
|
||||
--- a/scripts/kconfig/menu.c
|
||||
+++ b/scripts/kconfig/menu.c
|
||||
@@ -545,7 +545,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||
{
|
||||
int i, j;
|
||||
struct menu *submenu[8], *menu, *location = NULL;
|
||||
- struct jump_key *jump;
|
||||
+ struct jump_key *jump = NULL;
|
||||
|
||||
str_printf(r, _("Prompt: %s\n"), _(prop->text));
|
||||
menu = prop->menu->parent;
|
||||
@@ -583,7 +583,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||
str_printf(r, _(" Location:\n"));
|
||||
for (j = 4; --i >= 0; j += 2) {
|
||||
menu = submenu[i];
|
||||
- if (head && location && menu == location)
|
||||
+ if (jump && menu == location)
|
||||
jump->offset = strlen(r->s);
|
||||
str_printf(r, "%*c-> %s", j, ' ',
|
||||
_(menu_get_prompt(menu)));
|
||||
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
|
||||
index e04e750..7a9149b 100644
|
||||
--- a/sound/i2c/other/ak4113.c
|
||||
+++ b/sound/i2c/other/ak4113.c
|
||||
@@ -56,8 +56,7 @@ static inline unsigned char reg_read(struct ak4113 *ak4113, unsigned char reg)
|
||||
|
||||
static void snd_ak4113_free(struct ak4113 *chip)
|
||||
{
|
||||
- chip->init = 1; /* don't schedule new work */
|
||||
- mb();
|
||||
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
|
||||
cancel_delayed_work_sync(&chip->work);
|
||||
kfree(chip);
|
||||
}
|
||||
@@ -89,6 +88,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
|
||||
chip->write = write;
|
||||
chip->private_data = private_data;
|
||||
INIT_DELAYED_WORK(&chip->work, ak4113_stats);
|
||||
+ atomic_set(&chip->wq_processing, 0);
|
||||
|
||||
for (reg = 0; reg < AK4113_WRITABLE_REGS ; reg++)
|
||||
chip->regmap[reg] = pgm[reg];
|
||||
@@ -139,13 +139,11 @@ static void ak4113_init_regs(struct ak4113 *chip)
|
||||
|
||||
void snd_ak4113_reinit(struct ak4113 *chip)
|
||||
{
|
||||
- chip->init = 1;
|
||||
- mb();
|
||||
- flush_delayed_work(&chip->work);
|
||||
+ if (atomic_inc_return(&chip->wq_processing) == 1)
|
||||
+ cancel_delayed_work_sync(&chip->work);
|
||||
ak4113_init_regs(chip);
|
||||
/* bring up statistics / event queing */
|
||||
- chip->init = 0;
|
||||
- if (chip->kctls[0])
|
||||
+ if (atomic_dec_and_test(&chip->wq_processing))
|
||||
schedule_delayed_work(&chip->work, HZ / 10);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_ak4113_reinit);
|
||||
@@ -632,8 +630,9 @@ static void ak4113_stats(struct work_struct *work)
|
||||
{
|
||||
struct ak4113 *chip = container_of(work, struct ak4113, work.work);
|
||||
|
||||
- if (!chip->init)
|
||||
+ if (atomic_inc_return(&chip->wq_processing) == 1)
|
||||
snd_ak4113_check_rate_and_errors(chip, chip->check_flags);
|
||||
|
||||
- schedule_delayed_work(&chip->work, HZ / 10);
|
||||
+ if (atomic_dec_and_test(&chip->wq_processing))
|
||||
+ schedule_delayed_work(&chip->work, HZ / 10);
|
||||
}
|
||||
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
|
||||
index 15ae025..bf515db 100644
|
||||
--- a/sound/i2c/other/ak4114.c
|
||||
+++ b/sound/i2c/other/ak4114.c
|
||||
@@ -66,8 +66,7 @@ static void reg_dump(struct ak4114 *ak4114)
|
||||
|
||||
static void snd_ak4114_free(struct ak4114 *chip)
|
||||
{
|
||||
- chip->init = 1; /* don't schedule new work */
|
||||
- mb();
|
||||
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
|
||||
cancel_delayed_work_sync(&chip->work);
|
||||
kfree(chip);
|
||||
}
|
||||
@@ -100,6 +99,7 @@ int snd_ak4114_create(struct snd_card *card,
|
||||
chip->write = write;
|
||||
chip->private_data = private_data;
|
||||
INIT_DELAYED_WORK(&chip->work, ak4114_stats);
|
||||
+ atomic_set(&chip->wq_processing, 0);
|
||||
|
||||
for (reg = 0; reg < 6; reg++)
|
||||
chip->regmap[reg] = pgm[reg];
|
||||
@@ -152,13 +152,11 @@ static void ak4114_init_regs(struct ak4114 *chip)
|
||||
|
||||
void snd_ak4114_reinit(struct ak4114 *chip)
|
||||
{
|
||||
- chip->init = 1;
|
||||
- mb();
|
||||
- flush_delayed_work(&chip->work);
|
||||
+ if (atomic_inc_return(&chip->wq_processing) == 1)
|
||||
+ cancel_delayed_work_sync(&chip->work);
|
||||
ak4114_init_regs(chip);
|
||||
/* bring up statistics / event queing */
|
||||
- chip->init = 0;
|
||||
- if (chip->kctls[0])
|
||||
+ if (atomic_dec_and_test(&chip->wq_processing))
|
||||
schedule_delayed_work(&chip->work, HZ / 10);
|
||||
}
|
||||
|
||||
@@ -612,10 +610,10 @@ static void ak4114_stats(struct work_struct *work)
|
||||
{
|
||||
struct ak4114 *chip = container_of(work, struct ak4114, work.work);
|
||||
|
||||
- if (!chip->init)
|
||||
+ if (atomic_inc_return(&chip->wq_processing) == 1)
|
||||
snd_ak4114_check_rate_and_errors(chip, chip->check_flags);
|
||||
-
|
||||
- schedule_delayed_work(&chip->work, HZ / 10);
|
||||
+ if (atomic_dec_and_test(&chip->wq_processing))
|
||||
+ schedule_delayed_work(&chip->work, HZ / 10);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(snd_ak4114_create);
|
||||
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
|
||||
index 1ead3c9..f20e703 100644
|
||||
--- a/sound/soc/atmel/atmel_ssc_dai.c
|
||||
+++ b/sound/soc/atmel/atmel_ssc_dai.c
|
||||
@@ -344,7 +344,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
||||
struct atmel_pcm_dma_params *dma_params;
|
||||
int dir, channels, bits;
|
||||
u32 tfmr, rfmr, tcmr, rcmr;
|
||||
- int start_event;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -451,19 +450,10 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
||||
* The SSC transmit clock is obtained from the BCLK signal on
|
||||
* on the TK line, and the SSC receive clock is
|
||||
* generated from the transmit clock.
|
||||
- *
|
||||
- * For single channel data, one sample is transferred
|
||||
- * on the falling edge of the LRC clock.
|
||||
- * For two channel data, one sample is
|
||||
- * transferred on both edges of the LRC clock.
|
||||
*/
|
||||
- start_event = ((channels == 1)
|
||||
- ? SSC_START_FALLING_RF
|
||||
- : SSC_START_EDGE_RF);
|
||||
-
|
||||
rcmr = SSC_BF(RCMR_PERIOD, 0)
|
||||
| SSC_BF(RCMR_STTDLY, START_DELAY)
|
||||
- | SSC_BF(RCMR_START, start_event)
|
||||
+ | SSC_BF(RCMR_START, SSC_START_FALLING_RF)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
|
||||
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(RCMR_CKS, SSC_CKS_CLOCK);
|
||||
@@ -471,14 +461,14 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
||||
rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
|
||||
| SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
|
||||
| SSC_BF(RFMR_FSLEN, 0)
|
||||
- | SSC_BF(RFMR_DATNB, 0)
|
||||
+ | SSC_BF(RFMR_DATNB, (channels - 1))
|
||||
| SSC_BIT(RFMR_MSBF)
|
||||
| SSC_BF(RFMR_LOOP, 0)
|
||||
| SSC_BF(RFMR_DATLEN, (bits - 1));
|
||||
|
||||
tcmr = SSC_BF(TCMR_PERIOD, 0)
|
||||
| SSC_BF(TCMR_STTDLY, START_DELAY)
|
||||
- | SSC_BF(TCMR_START, start_event)
|
||||
+ | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
|
||||
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
|
||||
| SSC_BF(TCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(TCMR_CKS, SSC_CKS_PIN);
|
||||
@@ -487,7 +477,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
||||
| SSC_BF(TFMR_FSDEN, 0)
|
||||
| SSC_BF(TFMR_FSOS, SSC_FSOS_NONE)
|
||||
| SSC_BF(TFMR_FSLEN, 0)
|
||||
- | SSC_BF(TFMR_DATNB, 0)
|
||||
+ | SSC_BF(TFMR_DATNB, (channels - 1))
|
||||
| SSC_BIT(TFMR_MSBF)
|
||||
| SSC_BF(TFMR_DATDEF, 0)
|
||||
| SSC_BF(TFMR_DATLEN, (bits - 1));
|
||||
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
|
||||
index 12528e9..715589f 100644
|
||||
--- a/sound/soc/codecs/sgtl5000.c
|
||||
+++ b/sound/soc/codecs/sgtl5000.c
|
||||
@@ -1521,6 +1521,9 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ /* Need 8 clocks before I2C accesses */
|
||||
+ udelay(1);
|
||||
+
|
||||
/* read chip information */
|
||||
ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ID, ®);
|
||||
if (ret)
|
@ -1,584 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b0963ca..5443481 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 33
|
||||
+SUBLEVEL = 34
|
||||
EXTRAVERSION =
|
||||
NAME = Remembering Coco
|
||||
|
||||
diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c
|
||||
index ed2c8a1..98893a8 100644
|
||||
--- a/drivers/media/rc/ir-lirc-codec.c
|
||||
+++ b/drivers/media/rc/ir-lirc-codec.c
|
||||
@@ -42,11 +42,17 @@ static int ir_lirc_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
||||
return -EINVAL;
|
||||
|
||||
/* Packet start */
|
||||
- if (ev.reset)
|
||||
- return 0;
|
||||
+ if (ev.reset) {
|
||||
+ /* Userspace expects a long space event before the start of
|
||||
+ * the signal to use as a sync. This may be done with repeat
|
||||
+ * packets and normal samples. But if a reset has been sent
|
||||
+ * then we assume that a long time has passed, so we send a
|
||||
+ * space with the maximum time value. */
|
||||
+ sample = LIRC_SPACE(LIRC_VALUE_MASK);
|
||||
+ IR_dprintk(2, "delivering reset sync space to lirc_dev\n");
|
||||
|
||||
/* Carrier reports */
|
||||
- if (ev.carrier_report) {
|
||||
+ } else if (ev.carrier_report) {
|
||||
sample = LIRC_FREQUENCY(ev.carrier);
|
||||
IR_dprintk(2, "carrier report (freq: %d)\n", sample);
|
||||
|
||||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
|
||||
index afa4a1f..a830d42 100644
|
||||
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
|
||||
@@ -3131,7 +3131,7 @@ static int bnx2x_poll(struct napi_struct *napi, int budget)
|
||||
}
|
||||
#endif
|
||||
if (!bnx2x_fp_lock_napi(fp))
|
||||
- return work_done;
|
||||
+ return budget;
|
||||
|
||||
for_each_cos_in_tx_queue(fp, cos)
|
||||
if (bnx2x_tx_queue_has_work(fp->txdata_ptr[cos]))
|
||||
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
index 70849de..5fa076f 100644
|
||||
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
|
||||
@@ -2390,7 +2390,10 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget)
|
||||
|
||||
work_done = netxen_process_rcv_ring(sds_ring, budget);
|
||||
|
||||
- if ((work_done < budget) && tx_complete) {
|
||||
+ if (!tx_complete)
|
||||
+ work_done = budget;
|
||||
+
|
||||
+ if (work_done < budget) {
|
||||
napi_complete(&sds_ring->napi);
|
||||
if (test_bit(__NX_DEV_UP, &adapter->state))
|
||||
netxen_nic_enable_int(sds_ring);
|
||||
diff --git a/drivers/net/ppp/ppp_deflate.c b/drivers/net/ppp/ppp_deflate.c
|
||||
index 602c625..b5edc7f 100644
|
||||
--- a/drivers/net/ppp/ppp_deflate.c
|
||||
+++ b/drivers/net/ppp/ppp_deflate.c
|
||||
@@ -246,7 +246,7 @@ static int z_compress(void *arg, unsigned char *rptr, unsigned char *obuf,
|
||||
/*
|
||||
* See if we managed to reduce the size of the packet.
|
||||
*/
|
||||
- if (olen < isize) {
|
||||
+ if (olen < isize && olen <= osize) {
|
||||
state->stats.comp_bytes += olen;
|
||||
state->stats.comp_packets++;
|
||||
} else {
|
||||
diff --git a/include/net/ip.h b/include/net/ip.h
|
||||
index 937f196..3446cdd 100644
|
||||
--- a/include/net/ip.h
|
||||
+++ b/include/net/ip.h
|
||||
@@ -38,11 +38,12 @@ struct inet_skb_parm {
|
||||
struct ip_options opt; /* Compiled IP options */
|
||||
unsigned char flags;
|
||||
|
||||
-#define IPSKB_FORWARDED 1
|
||||
-#define IPSKB_XFRM_TUNNEL_SIZE 2
|
||||
-#define IPSKB_XFRM_TRANSFORMED 4
|
||||
-#define IPSKB_FRAG_COMPLETE 8
|
||||
-#define IPSKB_REROUTED 16
|
||||
+#define IPSKB_FORWARDED BIT(0)
|
||||
+#define IPSKB_XFRM_TUNNEL_SIZE BIT(1)
|
||||
+#define IPSKB_XFRM_TRANSFORMED BIT(2)
|
||||
+#define IPSKB_FRAG_COMPLETE BIT(3)
|
||||
+#define IPSKB_REROUTED BIT(4)
|
||||
+#define IPSKB_DOREDIRECT BIT(5)
|
||||
|
||||
u16 frag_max_size;
|
||||
};
|
||||
@@ -174,7 +175,7 @@ static inline __u8 ip_reply_arg_flowi_flags(const struct ip_reply_arg *arg)
|
||||
return (arg->flags & IP_REPLY_ARG_NOSRCCHECK) ? FLOWI_FLAG_ANYSRC : 0;
|
||||
}
|
||||
|
||||
-void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
|
||||
+void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
|
||||
__be32 saddr, const struct ip_reply_arg *arg,
|
||||
unsigned int len);
|
||||
|
||||
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
|
||||
index 80f500a..57c2da9 100644
|
||||
--- a/include/net/netns/ipv4.h
|
||||
+++ b/include/net/netns/ipv4.h
|
||||
@@ -47,6 +47,7 @@ struct netns_ipv4 {
|
||||
struct inet_peer_base *peers;
|
||||
struct tcpm_hash_bucket *tcp_metrics_hash;
|
||||
unsigned int tcp_metrics_hash_log;
|
||||
+ struct sock * __percpu *tcp_sk;
|
||||
struct netns_frags frags;
|
||||
#ifdef CONFIG_NETFILTER
|
||||
struct xt_table *iptable_filter;
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index 86bb9cc..4ed77d7 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -6812,10 +6812,20 @@ static int dev_cpu_callback(struct notifier_block *nfb,
|
||||
oldsd->output_queue = NULL;
|
||||
oldsd->output_queue_tailp = &oldsd->output_queue;
|
||||
}
|
||||
- /* Append NAPI poll list from offline CPU. */
|
||||
- if (!list_empty(&oldsd->poll_list)) {
|
||||
- list_splice_init(&oldsd->poll_list, &sd->poll_list);
|
||||
- raise_softirq_irqoff(NET_RX_SOFTIRQ);
|
||||
+ /* Append NAPI poll list from offline CPU, with one exception :
|
||||
+ * process_backlog() must be called by cpu owning percpu backlog.
|
||||
+ * We properly handle process_queue & input_pkt_queue later.
|
||||
+ */
|
||||
+ while (!list_empty(&oldsd->poll_list)) {
|
||||
+ struct napi_struct *napi = list_first_entry(&oldsd->poll_list,
|
||||
+ struct napi_struct,
|
||||
+ poll_list);
|
||||
+
|
||||
+ list_del_init(&napi->poll_list);
|
||||
+ if (napi->poll == process_backlog)
|
||||
+ napi->state = 0;
|
||||
+ else
|
||||
+ ____napi_schedule(sd, napi);
|
||||
}
|
||||
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
@@ -6826,7 +6836,7 @@ static int dev_cpu_callback(struct notifier_block *nfb,
|
||||
netif_rx_internal(skb);
|
||||
input_queue_head_incr(oldsd);
|
||||
}
|
||||
- while ((skb = __skb_dequeue(&oldsd->input_pkt_queue))) {
|
||||
+ while ((skb = skb_dequeue(&oldsd->input_pkt_queue))) {
|
||||
netif_rx_internal(skb);
|
||||
input_queue_head_incr(oldsd);
|
||||
}
|
||||
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
|
||||
index 4617586..a6613ff 100644
|
||||
--- a/net/core/rtnetlink.c
|
||||
+++ b/net/core/rtnetlink.c
|
||||
@@ -2649,12 +2649,16 @@ static int rtnl_bridge_notify(struct net_device *dev, u16 flags)
|
||||
goto errout;
|
||||
}
|
||||
|
||||
+ if (!skb->len)
|
||||
+ goto errout;
|
||||
+
|
||||
rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
|
||||
return 0;
|
||||
errout:
|
||||
WARN_ON(err == -EMSGSIZE);
|
||||
kfree_skb(skb);
|
||||
- rtnl_set_sk_err(net, RTNLGRP_LINK, err);
|
||||
+ if (err)
|
||||
+ rtnl_set_sk_err(net, RTNLGRP_LINK, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c
|
||||
index 1c6bd43..ecb34b5 100644
|
||||
--- a/net/ipv4/ip_forward.c
|
||||
+++ b/net/ipv4/ip_forward.c
|
||||
@@ -178,7 +178,8 @@ int ip_forward(struct sk_buff *skb)
|
||||
* We now generate an ICMP HOST REDIRECT giving the route
|
||||
* we calculated.
|
||||
*/
|
||||
- if (rt->rt_flags&RTCF_DOREDIRECT && !opt->srr && !skb_sec_path(skb))
|
||||
+ if (IPCB(skb)->flags & IPSKB_DOREDIRECT && !opt->srr &&
|
||||
+ !skb_sec_path(skb))
|
||||
ip_rt_send_redirect(skb);
|
||||
|
||||
skb->priority = rt_tos2priority(iph->tos);
|
||||
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
|
||||
index 844323b..dd637fc 100644
|
||||
--- a/net/ipv4/ip_output.c
|
||||
+++ b/net/ipv4/ip_output.c
|
||||
@@ -1460,23 +1460,8 @@ static int ip_reply_glue_bits(void *dptr, char *to, int offset,
|
||||
/*
|
||||
* Generic function to send a packet as reply to another packet.
|
||||
* Used to send some TCP resets/acks so far.
|
||||
- *
|
||||
- * Use a fake percpu inet socket to avoid false sharing and contention.
|
||||
*/
|
||||
-static DEFINE_PER_CPU(struct inet_sock, unicast_sock) = {
|
||||
- .sk = {
|
||||
- .__sk_common = {
|
||||
- .skc_refcnt = ATOMIC_INIT(1),
|
||||
- },
|
||||
- .sk_wmem_alloc = ATOMIC_INIT(1),
|
||||
- .sk_allocation = GFP_ATOMIC,
|
||||
- .sk_flags = (1UL << SOCK_USE_WRITE_QUEUE),
|
||||
- },
|
||||
- .pmtudisc = IP_PMTUDISC_WANT,
|
||||
- .uc_ttl = -1,
|
||||
-};
|
||||
-
|
||||
-void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
|
||||
+void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr,
|
||||
__be32 saddr, const struct ip_reply_arg *arg,
|
||||
unsigned int len)
|
||||
{
|
||||
@@ -1484,9 +1469,8 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
|
||||
struct ipcm_cookie ipc;
|
||||
struct flowi4 fl4;
|
||||
struct rtable *rt = skb_rtable(skb);
|
||||
+ struct net *net = sock_net(sk);
|
||||
struct sk_buff *nskb;
|
||||
- struct sock *sk;
|
||||
- struct inet_sock *inet;
|
||||
int err;
|
||||
|
||||
if (ip_options_echo(&replyopts.opt.opt, skb))
|
||||
@@ -1516,15 +1500,11 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
|
||||
if (IS_ERR(rt))
|
||||
return;
|
||||
|
||||
- inet = &get_cpu_var(unicast_sock);
|
||||
+ inet_sk(sk)->tos = arg->tos;
|
||||
|
||||
- inet->tos = arg->tos;
|
||||
- sk = &inet->sk;
|
||||
sk->sk_priority = skb->priority;
|
||||
sk->sk_protocol = ip_hdr(skb)->protocol;
|
||||
sk->sk_bound_dev_if = arg->bound_dev_if;
|
||||
- sock_net_set(sk, net);
|
||||
- __skb_queue_head_init(&sk->sk_write_queue);
|
||||
sk->sk_sndbuf = sysctl_wmem_default;
|
||||
err = ip_append_data(sk, &fl4, ip_reply_glue_bits, arg->iov->iov_base,
|
||||
len, 0, &ipc, &rt, MSG_DONTWAIT);
|
||||
@@ -1540,13 +1520,10 @@ void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
|
||||
arg->csumoffset) = csum_fold(csum_add(nskb->csum,
|
||||
arg->csum));
|
||||
nskb->ip_summed = CHECKSUM_NONE;
|
||||
- skb_orphan(nskb);
|
||||
skb_set_queue_mapping(nskb, skb_get_queue_mapping(skb));
|
||||
ip_push_pending_frames(sk, &fl4);
|
||||
}
|
||||
out:
|
||||
- put_cpu_var(unicast_sock);
|
||||
-
|
||||
ip_rt_put(rt);
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
|
||||
index 580dd96..135045e 100644
|
||||
--- a/net/ipv4/ip_sockglue.c
|
||||
+++ b/net/ipv4/ip_sockglue.c
|
||||
@@ -426,15 +426,11 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
||||
|
||||
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
|
||||
sin = &errhdr.offender;
|
||||
- sin->sin_family = AF_UNSPEC;
|
||||
+ memset(sin, 0, sizeof(*sin));
|
||||
if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP) {
|
||||
- struct inet_sock *inet = inet_sk(sk);
|
||||
-
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
- sin->sin_port = 0;
|
||||
- memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
- if (inet->cmsg_flags)
|
||||
+ if (inet_sk(sk)->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
|
||||
index 0d33f94..04ce671 100644
|
||||
--- a/net/ipv4/ping.c
|
||||
+++ b/net/ipv4/ping.c
|
||||
@@ -973,8 +973,11 @@ void ping_rcv(struct sk_buff *skb)
|
||||
|
||||
sk = ping_lookup(net, skb, ntohs(icmph->un.echo.id));
|
||||
if (sk != NULL) {
|
||||
+ struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
|
||||
+
|
||||
pr_debug("rcv on socket %p\n", sk);
|
||||
- ping_queue_rcv_skb(sk, skb_get(skb));
|
||||
+ if (skb2)
|
||||
+ ping_queue_rcv_skb(sk, skb2);
|
||||
sock_put(sk);
|
||||
return;
|
||||
}
|
||||
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
|
||||
index 487bb62..b64330f 100644
|
||||
--- a/net/ipv4/route.c
|
||||
+++ b/net/ipv4/route.c
|
||||
@@ -1554,11 +1554,10 @@ static int __mkroute_input(struct sk_buff *skb,
|
||||
|
||||
do_cache = res->fi && !itag;
|
||||
if (out_dev == in_dev && err && IN_DEV_TX_REDIRECTS(out_dev) &&
|
||||
+ skb->protocol == htons(ETH_P_IP) &&
|
||||
(IN_DEV_SHARED_MEDIA(out_dev) ||
|
||||
- inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res)))) {
|
||||
- flags |= RTCF_DOREDIRECT;
|
||||
- do_cache = false;
|
||||
- }
|
||||
+ inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res))))
|
||||
+ IPCB(skb)->flags |= IPSKB_DOREDIRECT;
|
||||
|
||||
if (skb->protocol != htons(ETH_P_IP)) {
|
||||
/* Not IP (i.e. ARP). Do not create route, if it is
|
||||
@@ -2305,6 +2304,8 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
|
||||
r->rtm_flags = (rt->rt_flags & ~0xFFFF) | RTM_F_CLONED;
|
||||
if (rt->rt_flags & RTCF_NOTIFY)
|
||||
r->rtm_flags |= RTM_F_NOTIFY;
|
||||
+ if (IPCB(skb)->flags & IPSKB_DOREDIRECT)
|
||||
+ r->rtm_flags |= RTCF_DOREDIRECT;
|
||||
|
||||
if (nla_put_be32(skb, RTA_DST, dst))
|
||||
goto nla_put_failure;
|
||||
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
|
||||
index a782d5b..b7effad 100644
|
||||
--- a/net/ipv4/tcp_ipv4.c
|
||||
+++ b/net/ipv4/tcp_ipv4.c
|
||||
@@ -691,7 +691,8 @@ static void tcp_v4_send_reset(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
net = dev_net(skb_dst(skb)->dev);
|
||||
arg.tos = ip_hdr(skb)->tos;
|
||||
- ip_send_unicast_reply(net, skb, ip_hdr(skb)->saddr,
|
||||
+ ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk),
|
||||
+ skb, ip_hdr(skb)->saddr,
|
||||
ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len);
|
||||
|
||||
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
|
||||
@@ -774,7 +775,8 @@ static void tcp_v4_send_ack(struct sk_buff *skb, u32 seq, u32 ack,
|
||||
if (oif)
|
||||
arg.bound_dev_if = oif;
|
||||
arg.tos = tos;
|
||||
- ip_send_unicast_reply(net, skb, ip_hdr(skb)->saddr,
|
||||
+ ip_send_unicast_reply(*this_cpu_ptr(net->ipv4.tcp_sk),
|
||||
+ skb, ip_hdr(skb)->saddr,
|
||||
ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len);
|
||||
|
||||
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
|
||||
@@ -2769,14 +2771,39 @@ struct proto tcp_prot = {
|
||||
};
|
||||
EXPORT_SYMBOL(tcp_prot);
|
||||
|
||||
+static void __net_exit tcp_sk_exit(struct net *net)
|
||||
+{
|
||||
+ int cpu;
|
||||
+
|
||||
+ for_each_possible_cpu(cpu)
|
||||
+ inet_ctl_sock_destroy(*per_cpu_ptr(net->ipv4.tcp_sk, cpu));
|
||||
+ free_percpu(net->ipv4.tcp_sk);
|
||||
+}
|
||||
+
|
||||
static int __net_init tcp_sk_init(struct net *net)
|
||||
{
|
||||
+ int res, cpu;
|
||||
+
|
||||
+ net->ipv4.tcp_sk = alloc_percpu(struct sock *);
|
||||
+ if (!net->ipv4.tcp_sk)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ for_each_possible_cpu(cpu) {
|
||||
+ struct sock *sk;
|
||||
+
|
||||
+ res = inet_ctl_sock_create(&sk, PF_INET, SOCK_RAW,
|
||||
+ IPPROTO_TCP, net);
|
||||
+ if (res)
|
||||
+ goto fail;
|
||||
+ *per_cpu_ptr(net->ipv4.tcp_sk, cpu) = sk;
|
||||
+ }
|
||||
net->ipv4.sysctl_tcp_ecn = 2;
|
||||
return 0;
|
||||
-}
|
||||
|
||||
-static void __net_exit tcp_sk_exit(struct net *net)
|
||||
-{
|
||||
+fail:
|
||||
+ tcp_sk_exit(net);
|
||||
+
|
||||
+ return res;
|
||||
}
|
||||
|
||||
static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list)
|
||||
diff --git a/net/ipv4/udp_diag.c b/net/ipv4/udp_diag.c
|
||||
index 7927db0..4a000f1 100644
|
||||
--- a/net/ipv4/udp_diag.c
|
||||
+++ b/net/ipv4/udp_diag.c
|
||||
@@ -99,11 +99,13 @@ static void udp_dump(struct udp_table *table, struct sk_buff *skb, struct netlin
|
||||
s_slot = cb->args[0];
|
||||
num = s_num = cb->args[1];
|
||||
|
||||
- for (slot = s_slot; slot <= table->mask; num = s_num = 0, slot++) {
|
||||
+ for (slot = s_slot; slot <= table->mask; s_num = 0, slot++) {
|
||||
struct sock *sk;
|
||||
struct hlist_nulls_node *node;
|
||||
struct udp_hslot *hslot = &table->hash[slot];
|
||||
|
||||
+ num = 0;
|
||||
+
|
||||
if (hlist_nulls_empty(&hslot->head))
|
||||
continue;
|
||||
|
||||
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
|
||||
index c3bf2d2..841cfa2 100644
|
||||
--- a/net/ipv6/datagram.c
|
||||
+++ b/net/ipv6/datagram.c
|
||||
@@ -382,11 +382,10 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
||||
|
||||
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
|
||||
sin = &errhdr.offender;
|
||||
- sin->sin6_family = AF_UNSPEC;
|
||||
+ memset(sin, 0, sizeof(*sin));
|
||||
+
|
||||
if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
|
||||
sin->sin6_family = AF_INET6;
|
||||
- sin->sin6_flowinfo = 0;
|
||||
- sin->sin6_port = 0;
|
||||
if (np->rxopt.all)
|
||||
ip6_datagram_recv_common_ctl(sk, msg, skb);
|
||||
if (skb->protocol == htons(ETH_P_IPV6)) {
|
||||
@@ -397,12 +396,9 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
||||
ipv6_iface_scope_id(&sin->sin6_addr,
|
||||
IP6CB(skb)->iif);
|
||||
} else {
|
||||
- struct inet_sock *inet = inet_sk(sk);
|
||||
-
|
||||
ipv6_addr_set_v4mapped(ip_hdr(skb)->saddr,
|
||||
&sin->sin6_addr);
|
||||
- sin->sin6_scope_id = 0;
|
||||
- if (inet->cmsg_flags)
|
||||
+ if (inet_sk(sk)->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
}
|
||||
}
|
||||
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
|
||||
index 1e55f5e..7daaeaf 100644
|
||||
--- a/net/ipv6/ip6_fib.c
|
||||
+++ b/net/ipv6/ip6_fib.c
|
||||
@@ -638,6 +638,29 @@ static inline bool rt6_qualify_for_ecmp(struct rt6_info *rt)
|
||||
RTF_GATEWAY;
|
||||
}
|
||||
|
||||
+static void fib6_purge_rt(struct rt6_info *rt, struct fib6_node *fn,
|
||||
+ struct net *net)
|
||||
+{
|
||||
+ if (atomic_read(&rt->rt6i_ref) != 1) {
|
||||
+ /* This route is used as dummy address holder in some split
|
||||
+ * nodes. It is not leaked, but it still holds other resources,
|
||||
+ * which must be released in time. So, scan ascendant nodes
|
||||
+ * and replace dummy references to this route with references
|
||||
+ * to still alive ones.
|
||||
+ */
|
||||
+ while (fn) {
|
||||
+ if (!(fn->fn_flags & RTN_RTINFO) && fn->leaf == rt) {
|
||||
+ fn->leaf = fib6_find_prefix(net, fn);
|
||||
+ atomic_inc(&fn->leaf->rt6i_ref);
|
||||
+ rt6_release(rt);
|
||||
+ }
|
||||
+ fn = fn->parent;
|
||||
+ }
|
||||
+ /* No more references are possible at this point. */
|
||||
+ BUG_ON(atomic_read(&rt->rt6i_ref) != 1);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Insert routing information in a node.
|
||||
*/
|
||||
@@ -775,11 +798,12 @@ add:
|
||||
rt->dst.rt6_next = iter->dst.rt6_next;
|
||||
atomic_inc(&rt->rt6i_ref);
|
||||
inet6_rt_notify(RTM_NEWROUTE, rt, info);
|
||||
- rt6_release(iter);
|
||||
if (!(fn->fn_flags & RTN_RTINFO)) {
|
||||
info->nl_net->ipv6.rt6_stats->fib_route_nodes++;
|
||||
fn->fn_flags |= RTN_RTINFO;
|
||||
}
|
||||
+ fib6_purge_rt(iter, fn, info->nl_net);
|
||||
+ rt6_release(iter);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1284,24 +1308,7 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp,
|
||||
fn = fib6_repair_tree(net, fn);
|
||||
}
|
||||
|
||||
- if (atomic_read(&rt->rt6i_ref) != 1) {
|
||||
- /* This route is used as dummy address holder in some split
|
||||
- * nodes. It is not leaked, but it still holds other resources,
|
||||
- * which must be released in time. So, scan ascendant nodes
|
||||
- * and replace dummy references to this route with references
|
||||
- * to still alive ones.
|
||||
- */
|
||||
- while (fn) {
|
||||
- if (!(fn->fn_flags & RTN_RTINFO) && fn->leaf == rt) {
|
||||
- fn->leaf = fib6_find_prefix(net, fn);
|
||||
- atomic_inc(&fn->leaf->rt6i_ref);
|
||||
- rt6_release(rt);
|
||||
- }
|
||||
- fn = fn->parent;
|
||||
- }
|
||||
- /* No more references are possible at this point. */
|
||||
- BUG_ON(atomic_read(&rt->rt6i_ref) != 1);
|
||||
- }
|
||||
+ fib6_purge_rt(rt, fn, net);
|
||||
|
||||
inet6_rt_notify(RTM_DELROUTE, rt, info);
|
||||
rt6_release(rt);
|
||||
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
|
||||
index 7cc1102..6f1b850 100644
|
||||
--- a/net/ipv6/route.c
|
||||
+++ b/net/ipv6/route.c
|
||||
@@ -1160,12 +1160,9 @@ static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
|
||||
struct net *net = dev_net(dst->dev);
|
||||
|
||||
rt6->rt6i_flags |= RTF_MODIFIED;
|
||||
- if (mtu < IPV6_MIN_MTU) {
|
||||
- u32 features = dst_metric(dst, RTAX_FEATURES);
|
||||
+ if (mtu < IPV6_MIN_MTU)
|
||||
mtu = IPV6_MIN_MTU;
|
||||
- features |= RTAX_FEATURE_ALLFRAG;
|
||||
- dst_metric_set(dst, RTAX_FEATURES, features);
|
||||
- }
|
||||
+
|
||||
dst_metric_set(dst, RTAX_MTU, mtu);
|
||||
rt6_update_expires(rt6, net->ipv6.sysctl.ip6_rt_mtu_expires);
|
||||
}
|
||||
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
|
||||
index d477d47..abc0922 100644
|
||||
--- a/net/sctp/associola.c
|
||||
+++ b/net/sctp/associola.c
|
||||
@@ -1235,7 +1235,6 @@ void sctp_assoc_update(struct sctp_association *asoc,
|
||||
asoc->peer.peer_hmacs = new->peer.peer_hmacs;
|
||||
new->peer.peer_hmacs = NULL;
|
||||
|
||||
- sctp_auth_key_put(asoc->asoc_shared_key);
|
||||
sctp_auth_asoc_init_active_key(asoc, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
|
||||
index 43abb64..df06b13 100644
|
||||
--- a/net/sctp/sm_make_chunk.c
|
||||
+++ b/net/sctp/sm_make_chunk.c
|
||||
@@ -2608,7 +2608,7 @@ do_addr_param:
|
||||
|
||||
addr_param = param.v + sizeof(sctp_addip_param_t);
|
||||
|
||||
- af = sctp_get_af_specific(param_type2af(param.p->type));
|
||||
+ af = sctp_get_af_specific(param_type2af(addr_param->p.type));
|
||||
if (af == NULL)
|
||||
break;
|
||||
|
||||
diff --git a/net/socket.c b/net/socket.c
|
||||
index a19ae19..1b2c2d6 100644
|
||||
--- a/net/socket.c
|
||||
+++ b/net/socket.c
|
||||
@@ -886,9 +886,6 @@ static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
|
||||
static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,
|
||||
struct sock_iocb *siocb)
|
||||
{
|
||||
- if (!is_sync_kiocb(iocb))
|
||||
- BUG();
|
||||
-
|
||||
siocb->kiocb = iocb;
|
||||
iocb->private = siocb;
|
||||
return siocb;
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,850 +0,0 @@
|
||||
From 260d0a77f9848d2495c3f5031f734dbedac244c6 Mon Sep 17 00:00:00 2001
|
||||
From: vpeter4 <peter.vicman@gmail.com>
|
||||
Date: Sun, 5 Oct 2014 14:22:53 +0200
|
||||
Subject: [PATCH] tbs2910_device_tree_from_imx6q-sabresd
|
||||
|
||||
copied from imx6q-sabresd.dts and imx6qdl-sabresd.dtsi
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 1 +
|
||||
arch/arm/boot/dts/imx6q-tbs2910.dts | 41 ++
|
||||
arch/arm/boot/dts/imx6qdl-tbs2910.dtsi | 768 +++++++++++++++++++++++++++++++++
|
||||
3 files changed, 810 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/imx6q-tbs2910.dts
|
||||
create mode 100644 arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
|
||||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||
index f363929..49004c4 100644
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -185,6 +185,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
||||
imx6q-sabrelite.dtb \
|
||||
imx6q-sabresd.dtb \
|
||||
imx6q-sabresd-hdcp.dtb \
|
||||
+ imx6q-tbs2910.dtb \
|
||||
imx6q-sbc6x.dtb \
|
||||
imx6q-udoo.dtb \
|
||||
imx6q-wandboard.dtb \
|
||||
diff --git a/arch/arm/boot/dts/imx6q-tbs2910.dts b/arch/arm/boot/dts/imx6q-tbs2910.dts
|
||||
new file mode 100644
|
||||
index 0000000..0374484
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6q-tbs2910.dts
|
||||
@@ -0,0 +1,41 @@
|
||||
+/*
|
||||
+ * Copyright 2012 Freescale Semiconductor, Inc.
|
||||
+ * Copyright 2011 Linaro Ltd.
|
||||
+ *
|
||||
+ * The code contained herein is licensed under the GNU General Public
|
||||
+ * License. You may obtain a copy of the GNU General Public License
|
||||
+ * Version 2 or later at the following locations:
|
||||
+ *
|
||||
+ * http://www.opensource.org/licenses/gpl-license.html
|
||||
+ * http://www.gnu.org/copyleft/gpl.html
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "imx6q.dtsi"
|
||||
+#include "imx6qdl-tbs2910.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "TBS Matrix";
|
||||
+ compatible = "fsl,imx6q-sabresd", "fsl,imx6q";
|
||||
+};
|
||||
+
|
||||
+&sata {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mxcfb1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mxcfb2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mxcfb3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mxcfb4 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi b/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
new file mode 100644
|
||||
index 0000000..f351c21
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
@@ -0,0 +1,768 @@
|
||||
+/*
|
||||
+ * Copyright 2012 Freescale Semiconductor, Inc.
|
||||
+ * Copyright 2011 Linaro Ltd.
|
||||
+ *
|
||||
+ * The code contained herein is licensed under the GNU General Public
|
||||
+ * License. You may obtain a copy of the GNU General Public License
|
||||
+ * Version 2 or later at the following locations:
|
||||
+ *
|
||||
+ * http://www.opensource.org/licenses/gpl-license.html
|
||||
+ * http://www.gnu.org/copyleft/gpl.html
|
||||
+ */
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+
|
||||
+/ {
|
||||
+ aliases {
|
||||
+ mxcfb0 = &mxcfb1;
|
||||
+ mxcfb1 = &mxcfb2;
|
||||
+ mxcfb2 = &mxcfb3;
|
||||
+ mxcfb3 = &mxcfb4;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = &uart1;
|
||||
+ };
|
||||
+
|
||||
+ memory {
|
||||
+ reg = <0x10000000 0x40000000>;
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ compatible = "simple-bus";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ reg_usb_otg_vbus: regulator@0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <0>;
|
||||
+ regulator-name = "usb_otg_vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ gpio = <&gpio3 22 0>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_usb_h1_vbus: regulator@1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <1>;
|
||||
+ regulator-name = "usb_h1_vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ gpio = <&gpio1 29 0>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_audio: regulator@2 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <2>;
|
||||
+ regulator-name = "wm8962-supply";
|
||||
+ gpio = <&gpio4 10 0>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_mipi_dsi_pwr_on: mipi_dsi_pwr_on {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "mipi_dsi_pwr_on";
|
||||
+ gpio = <&gpio6 14 0>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_gpio_keys>;
|
||||
+
|
||||
+ power {
|
||||
+ label = "Power Button";
|
||||
+ gpios = <&gpio3 29 GPIO_ACTIVE_LOW>;
|
||||
+ gpio-key,wakeup;
|
||||
+ linux,code = <KEY_POWER>;
|
||||
+ };
|
||||
+
|
||||
+ volume-up {
|
||||
+ label = "Volume Up";
|
||||
+ gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
|
||||
+ gpio-key,wakeup;
|
||||
+ linux,code = <KEY_VOLUMEUP>;
|
||||
+ };
|
||||
+
|
||||
+ volume-down {
|
||||
+ label = "Volume Down";
|
||||
+ gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
|
||||
+ gpio-key,wakeup;
|
||||
+ linux,code = <KEY_VOLUMEDOWN>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ compatible = "fsl,imx6q-sabresd-wm8962",
|
||||
+ "fsl,imx-audio-wm8962";
|
||||
+ model = "wm8962-audio";
|
||||
+ ssi-controller = <&ssi2>;
|
||||
+ audio-codec = <&codec>;
|
||||
+ audio-routing =
|
||||
+ "Headphone Jack", "HPOUTL",
|
||||
+ "Headphone Jack", "HPOUTR",
|
||||
+ "Ext Spk", "SPKOUTL",
|
||||
+ "Ext Spk", "SPKOUTR",
|
||||
+ "MICBIAS", "AMIC",
|
||||
+ "IN3R", "MICBIAS",
|
||||
+ "DMIC", "MICBIAS",
|
||||
+ "DMICDAT", "DMIC";
|
||||
+ mux-int-port = <2>;
|
||||
+ mux-ext-port = <3>;
|
||||
+ };
|
||||
+
|
||||
+ backlight {
|
||||
+ compatible = "pwm-backlight";
|
||||
+ pwms = <&pwm1 0 5000000>;
|
||||
+ brightness-levels = <0 4 8 16 32 64 128 255>;
|
||||
+ default-brightness-level = <7>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_gpio_leds>;
|
||||
+
|
||||
+ red {
|
||||
+ gpios = <&gpio1 2 0>;
|
||||
+ default-state = "on";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound-hdmi {
|
||||
+ compatible = "fsl,imx6q-audio-hdmi",
|
||||
+ "fsl,imx-audio-hdmi";
|
||||
+ model = "imx-audio-hdmi";
|
||||
+ hdmi-controller = <&hdmi_audio>;
|
||||
+ };
|
||||
+
|
||||
+ mxcfb1: fb@0 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB666";
|
||||
+ mode_str ="LDB-XGA";
|
||||
+ default_bpp = <16>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "hdmi";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str ="1920x1080M@60";
|
||||
+ default_bpp = <24>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb3: fb@2 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "lcd";
|
||||
+ interface_pix_fmt = "RGB565";
|
||||
+ mode_str ="CLAA-WVGA";
|
||||
+ default_bpp = <16>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb4: fb@3 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ interface_pix_fmt = "RGB666";
|
||||
+ mode_str ="LDB-XGA";
|
||||
+ default_bpp = <16>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ lcd@0 {
|
||||
+ compatible = "fsl,lcd";
|
||||
+ ipu_id = <0>;
|
||||
+ disp_id = <0>;
|
||||
+ default_ifmt = "RGB565";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_ipu1>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ backlight {
|
||||
+ compatible = "pwm-backlight";
|
||||
+ pwms = <&pwm1 0 5000000>;
|
||||
+ brightness-levels = <0 4 8 16 32 64 128 255>;
|
||||
+ default-brightness-level = <7>;
|
||||
+ };
|
||||
+
|
||||
+ v4l2_out {
|
||||
+ compatible = "fsl,mxc_v4l2_output";
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ lvds_cabc_ctrl {
|
||||
+ lvds0-gpios = <&gpio6 15 0>;
|
||||
+ lvds1-gpios = <&gpio6 16 0>;
|
||||
+ };
|
||||
+
|
||||
+ mipi_dsi_reset: mipi-dsi-reset {
|
||||
+ compatible = "gpio-reset";
|
||||
+ reset-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
|
||||
+ reset-delay-us = <50>;
|
||||
+ #reset-cells = <0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&audmux {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_audmux>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ecspi1 {
|
||||
+ fsl,spi-num-chipselects = <1>;
|
||||
+ cs-gpios = <&gpio4 9 0>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_ecspi1>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ flash: m25p80@0 {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ compatible = "st,m25p32";
|
||||
+ spi-max-frequency = <20000000>;
|
||||
+ reg = <0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&fec {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_enet>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-reset-gpios = <&gpio1 25 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ clock-frequency = <100000>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c1>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ codec: wm8962@1a {
|
||||
+ compatible = "wlf,wm8962";
|
||||
+ reg = <0x1a>;
|
||||
+ clocks = <&clks 201>;
|
||||
+ DCVDD-supply = <®_audio>;
|
||||
+ DBVDD-supply = <®_audio>;
|
||||
+ AVDD-supply = <®_audio>;
|
||||
+ CPVDD-supply = <®_audio>;
|
||||
+ MICVDD-supply = <®_audio>;
|
||||
+ PLLVDD-supply = <®_audio>;
|
||||
+ SPKVDD1-supply = <®_audio>;
|
||||
+ SPKVDD2-supply = <®_audio>;
|
||||
+ gpio-cfg = <
|
||||
+ 0x0000 /* 0:Default */
|
||||
+ 0x0000 /* 1:Default */
|
||||
+ 0x0013 /* 2:FN_DMICCLK */
|
||||
+ 0x0000 /* 3:Default */
|
||||
+ 0x8014 /* 4:FN_DMICCDAT */
|
||||
+ 0x0000 /* 5:Default */
|
||||
+ >;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ clock-frequency = <100000>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c2>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ hdmi: edid@50 {
|
||||
+ compatible = "fsl,imx6-hdmi-i2c";
|
||||
+ reg = <0x50>;
|
||||
+ };
|
||||
+
|
||||
+ pmic: pfuze100@08 {
|
||||
+ compatible = "fsl,pfuze100";
|
||||
+ reg = <0x08>;
|
||||
+
|
||||
+ regulators {
|
||||
+ sw1a_reg: sw1ab {
|
||||
+ regulator-min-microvolt = <300000>;
|
||||
+ regulator-max-microvolt = <1875000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ regulator-ramp-delay = <6250>;
|
||||
+ };
|
||||
+
|
||||
+ sw1c_reg: sw1c {
|
||||
+ regulator-min-microvolt = <300000>;
|
||||
+ regulator-max-microvolt = <1875000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ regulator-ramp-delay = <6250>;
|
||||
+ };
|
||||
+
|
||||
+ sw2_reg: sw2 {
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ sw3a_reg: sw3a {
|
||||
+ regulator-min-microvolt = <400000>;
|
||||
+ regulator-max-microvolt = <1975000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ sw3b_reg: sw3b {
|
||||
+ regulator-min-microvolt = <400000>;
|
||||
+ regulator-max-microvolt = <1975000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ sw4_reg: sw4 {
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+
|
||||
+ swbst_reg: swbst {
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5150000>;
|
||||
+ };
|
||||
+
|
||||
+ snvs_reg: vsnvs {
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ vref_reg: vrefddr {
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ vgen1_reg: vgen1 {
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <1550000>;
|
||||
+ };
|
||||
+
|
||||
+ vgen2_reg: vgen2 {
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <1550000>;
|
||||
+ };
|
||||
+
|
||||
+ vgen3_reg: vgen3 {
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+
|
||||
+ vgen4_reg: vgen4 {
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ vgen5_reg: vgen5 {
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ vgen6_reg: vgen6 {
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c3 {
|
||||
+ clock-frequency = <100000>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c3>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ egalax_ts@04 {
|
||||
+ compatible = "eeti,egalax_ts";
|
||||
+ reg = <0x04>;
|
||||
+ interrupt-parent = <&gpio6>;
|
||||
+ interrupts = <7 2>;
|
||||
+ wakeup-gpios = <&gpio6 7 0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&iomuxc {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_hog>;
|
||||
+
|
||||
+ imx6qdl-sabresd {
|
||||
+ pinctrl_hog: hoggrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000
|
||||
+ MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
|
||||
+ MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000
|
||||
+ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
|
||||
+ MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000
|
||||
+ MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000
|
||||
+ MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_audmux: audmuxgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
|
||||
+ MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
|
||||
+ MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
|
||||
+ MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_ecspi1: ecspi1grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL1__ECSPI1_MISO 0x100b1
|
||||
+ MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI 0x100b1
|
||||
+ MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK 0x100b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_enet: enetgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
+ MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
+ MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
+ MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_gpio_keys: gpio_keysgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000
|
||||
+ MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000
|
||||
+ MX6QDL_PAD_GPIO_5__GPIO1_IO05 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_hdmi_cec: hdmi_cecgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_hdmi_hdcp: hdmi_hdcpgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c1: i2c1grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
|
||||
+ MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c2: i2c2grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c3: i2c3grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_ipu1: ipu1grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x10
|
||||
+ MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15 0x10
|
||||
+ MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02 0x10
|
||||
+ MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03 0x10
|
||||
+ MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04 0x80000000
|
||||
+ MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22 0x10
|
||||
+ MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23 0x10
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_pcie: pciegrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_pwm1: pwm1grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_uart1: uart1grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
|
||||
+ MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_usbotg: usbotggrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_usdhc2: usdhc2grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
|
||||
+ MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
|
||||
+ MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
|
||||
+ MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
|
||||
+ MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
|
||||
+ MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
|
||||
+ MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059
|
||||
+ MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059
|
||||
+ MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059
|
||||
+ MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_usdhc3: usdhc3grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
+ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_usdhc4: usdhc4grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
|
||||
+ MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
|
||||
+ MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
|
||||
+ MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
|
||||
+ >;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio_leds {
|
||||
+ pinctrl_gpio_leds: gpioledsgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ lvds-channel@1 {
|
||||
+ fsl,data-mapping = "spwg";
|
||||
+ fsl,data-width = <18>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ display-timings {
|
||||
+ native-mode = <&timing0>;
|
||||
+ timing0: hsd100pxn1 {
|
||||
+ clock-frequency = <65000000>;
|
||||
+ hactive = <1024>;
|
||||
+ vactive = <768>;
|
||||
+ hback-porch = <220>;
|
||||
+ hfront-porch = <40>;
|
||||
+ vback-porch = <21>;
|
||||
+ vfront-porch = <7>;
|
||||
+ hsync-len = <60>;
|
||||
+ vsync-len = <10>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_pcie>;
|
||||
+ reset-gpio = <&gpio7 12 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie {
|
||||
+ power-on-gpio = <&gpio3 19 0>;
|
||||
+ reset-gpio = <&gpio7 12 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+
|
||||
+&pwm1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_pwm1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ ipu_id = <1>;
|
||||
+ disp_id = <1>;
|
||||
+ ext_ref = <1>;
|
||||
+ mode = "sep1";
|
||||
+ sec_ipu_id = <1>;
|
||||
+ sec_disp_id = <0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ssi2 {
|
||||
+ fsl,mode = "i2s-slave";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_uart1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mipi_dsi {
|
||||
+ dev_id = <0>;
|
||||
+ disp_id = <0>;
|
||||
+ lcd_panel = "TRULY-WVGA";
|
||||
+ disp-power-on-supply = <®_mipi_dsi_pwr_on>;
|
||||
+ resets = <&mipi_dsi_reset>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbh1 {
|
||||
+ vbus-supply = <®_usb_h1_vbus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbotg {
|
||||
+ vbus-supply = <®_usb_otg_vbus>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_usbotg>;
|
||||
+ disable-over-current;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usdhc2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_usdhc2>;
|
||||
+ bus-width = <8>;
|
||||
+ cd-gpios = <&gpio2 2 0>;
|
||||
+ wp-gpios = <&gpio2 3 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usdhc3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
+ bus-width = <8>;
|
||||
+ cd-gpios = <&gpio2 0 0>;
|
||||
+ wp-gpios = <&gpio2 1 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usdhc4 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_usdhc4>;
|
||||
+ bus-width = <8>;
|
||||
+ non-removable;
|
||||
+ no-1-8-v;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_core {
|
||||
+ ipu_id = <0>;
|
||||
+ disp_id = <0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_video {
|
||||
+ fsl,phy_reg_vlev = <0x0294>;
|
||||
+ fsl,phy_reg_cksymtx = <0x800d>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_audio {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_cec {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_hdmi_cec>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpc {
|
||||
+ fsl,cpu_pupscr_sw2iso = <0xf>;
|
||||
+ fsl,cpu_pupscr_sw = <0xf>;
|
||||
+ fsl,cpu_pdnscr_iso2sw = <0x1>;
|
||||
+ fsl,cpu_pdnscr_iso = <0x1>;
|
||||
+};
|
||||
--
|
||||
1.8.1.2
|
||||
|
@ -1,225 +0,0 @@
|
||||
From a2e2a3127261078129a5fc6f29222c7edbc3acea Mon Sep 17 00:00:00 2001
|
||||
From: vpeter4 <peter.vicman@gmail.com>
|
||||
Date: Sun, 5 Oct 2014 14:25:57 +0200
|
||||
Subject: [PATCH] tbs2910_device_tree_updates
|
||||
|
||||
gpio ir receiver, red led as heartbeat, fan (as led output), spdif sound, rtc
|
||||
|
||||
sgtl5000 audio codec by @milan on TBS forum
|
||||
http://www.tbsdtv.com/forum/viewtopic.php?f=154&t=8859&p=32020#p32018
|
||||
|
||||
---
|
||||
arch/arm/boot/dts/imx6qdl.dtsi | 2 +-
|
||||
arch/arm/boot/dts/imx6q-tbs2910.dts | 4 ++
|
||||
arch/arm/boot/dts/imx6qdl-tbs2910.dtsi | 106 ++++++++++++++++++++++-----------
|
||||
3 files changed, 76 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi b/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
index f351c21..53803c9 100644
|
||||
--- a/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
+++ b/arch/arm/boot/dts/imx6qdl-tbs2910.dtsi
|
||||
@@ -21,6 +21,14 @@
|
||||
mxcfb3 = &mxcfb4;
|
||||
};
|
||||
|
||||
+ ir_recv: ir-receiver {
|
||||
+ compatible = "gpio-ir-receiver";
|
||||
+ gpios = <&gpio3 18 1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_sabresd_ir>;
|
||||
+ linux,rc-map-name = "rc-rc6-mce";
|
||||
+ };
|
||||
+
|
||||
chosen {
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
@@ -57,9 +65,10 @@
|
||||
reg_audio: regulator@2 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <2>;
|
||||
- regulator-name = "wm8962-supply";
|
||||
- gpio = <&gpio4 10 0>;
|
||||
- enable-active-high;
|
||||
+ regulator-name = "sgtl5000-supply";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
};
|
||||
|
||||
reg_mipi_dsi_pwr_on: mipi_dsi_pwr_on {
|
||||
@@ -98,20 +107,14 @@
|
||||
};
|
||||
|
||||
sound {
|
||||
- compatible = "fsl,imx6q-sabresd-wm8962",
|
||||
- "fsl,imx-audio-wm8962";
|
||||
- model = "wm8962-audio";
|
||||
+ compatible = "fsl,imx-audio-sgtl5000";
|
||||
+ model = "imx-sgtl5000";
|
||||
ssi-controller = <&ssi2>;
|
||||
audio-codec = <&codec>;
|
||||
audio-routing =
|
||||
- "Headphone Jack", "HPOUTL",
|
||||
- "Headphone Jack", "HPOUTR",
|
||||
- "Ext Spk", "SPKOUTL",
|
||||
- "Ext Spk", "SPKOUTR",
|
||||
- "MICBIAS", "AMIC",
|
||||
- "IN3R", "MICBIAS",
|
||||
- "DMIC", "MICBIAS",
|
||||
- "DMICDAT", "DMIC";
|
||||
+ "MIC_IN", "Mic Jack",
|
||||
+ "Mic Jack", "Mic Bias",
|
||||
+ "Headphone Jack", "HP_OUT";
|
||||
mux-int-port = <2>;
|
||||
mux-ext-port = <3>;
|
||||
};
|
||||
@@ -132,7 +135,20 @@
|
||||
red {
|
||||
gpios = <&gpio1 2 0>;
|
||||
default-state = "on";
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
};
|
||||
+
|
||||
+ fan {
|
||||
+ gpios = <&gpio3 28 0>;
|
||||
+ default-state = "off";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound-spdif {
|
||||
+ compatible = "fsl,imx-audio-spdif";
|
||||
+ model = "imx-spdif";
|
||||
+ spdif-controller = <&spdif>;
|
||||
+ spdif-out;
|
||||
};
|
||||
|
||||
sound-hdmi {
|
||||
@@ -257,27 +273,15 @@
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
- codec: wm8962@1a {
|
||||
- compatible = "wlf,wm8962";
|
||||
- reg = <0x1a>;
|
||||
+ codec: sgtl5000@0a {
|
||||
clocks = <&clks 201>;
|
||||
- DCVDD-supply = <®_audio>;
|
||||
- DBVDD-supply = <®_audio>;
|
||||
- AVDD-supply = <®_audio>;
|
||||
- CPVDD-supply = <®_audio>;
|
||||
- MICVDD-supply = <®_audio>;
|
||||
- PLLVDD-supply = <®_audio>;
|
||||
- SPKVDD1-supply = <®_audio>;
|
||||
- SPKVDD2-supply = <®_audio>;
|
||||
- gpio-cfg = <
|
||||
- 0x0000 /* 0:Default */
|
||||
- 0x0000 /* 1:Default */
|
||||
- 0x0013 /* 2:FN_DMICCLK */
|
||||
- 0x0000 /* 3:Default */
|
||||
- 0x8014 /* 4:FN_DMICCDAT */
|
||||
- 0x0000 /* 5:Default */
|
||||
- >;
|
||||
- };
|
||||
+ compatible = "fsl,sgtl5000";
|
||||
+ reg = <0x0a>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_sgtl5000>;
|
||||
+ VDDA-supply = <®_audio>;
|
||||
+ VDDIO-supply = <®_audio>;
|
||||
+ };
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
@@ -392,17 +396,13 @@
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
- clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
status = "okay";
|
||||
|
||||
- egalax_ts@04 {
|
||||
- compatible = "eeti,egalax_ts";
|
||||
- reg = <0x04>;
|
||||
- interrupt-parent = <&gpio6>;
|
||||
- interrupts = <7 2>;
|
||||
- wakeup-gpios = <&gpio6 7 0>;
|
||||
+ rtc: rtc@68 {
|
||||
+ compatible = "dallas,ds1307";
|
||||
+ reg = <0x68>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -417,7 +417,6 @@
|
||||
MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000
|
||||
MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000
|
||||
MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000
|
||||
- MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
|
||||
MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000
|
||||
MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
|
||||
MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x80000000
|
||||
@@ -429,6 +428,12 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ pinctrl_sgtl5000: sgtl5000grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
pinctrl_audmux: audmuxgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
|
||||
@@ -475,6 +480,16 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ pinctrl_sabresd_ir: sabresd-ir {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_D18__GPIO3_IO18 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_sabresd_spdif: sabresd-spdif {
|
||||
+ fsl,pins = <MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x13091>;
|
||||
+ };
|
||||
+
|
||||
pinctrl_hdmi_cec: hdmi_cecgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
|
||||
@@ -618,6 +633,7 @@
|
||||
pinctrl_gpio_leds: gpioledsgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000
|
||||
+ MX6QDL_PAD_EIM_D28__GPIO3_IO28 0x80000000
|
||||
>;
|
||||
};
|
||||
};
|
||||
@@ -698,6 +714,22 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&spdif {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_sabresd_spdif>;
|
||||
+ clocks = <&clks 197>, <&clks 0>,
|
||||
+ <&clks 197>, <&clks 0>,
|
||||
+ <&clks 0>, <&clks 0>,
|
||||
+ <&clks 0>, <&clks 0>,
|
||||
+ <&clks 0>;
|
||||
+ clock-names = "core", "rxtx0",
|
||||
+ "rxtx1", "rxtx2",
|
||||
+ "rxtx3", "rxtx4",
|
||||
+ "rxtx5", "rxtx6",
|
||||
+ "rxtx7";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&usbh1 {
|
||||
vbus-supply = <®_usb_h1_vbus>;
|
||||
status = "okay";
|
||||
--
|
||||
1.8.1.2
|
||||
|
@ -1,161 +0,0 @@
|
||||
From 7938bdb186ed300a8de0d78dff514f3c43209bc1 Mon Sep 17 00:00:00 2001
|
||||
From: vpeter4 <peter.vicman@gmail.com>
|
||||
Date: Wed, 10 Dec 2014 11:58:19 +0100
|
||||
Subject: [PATCH] chipidea: ci_hdrc_imx: Allow handling the clock for an USB
|
||||
phy/hub
|
||||
|
||||
for file ci_hdrc_imx.c
|
||||
1-2-chipidea-ci_hdrc_imx-Allow-handling-the-clock-for-an-USB-phy-hub.patch
|
||||
for file usbmisc_imx.c
|
||||
unknown patch (used from https://github.com/mtx512/linux-imx/commits/imx_3.10.17_1.0.0_beta-udoo)
|
||||
|
||||
Subject: [1/2] chipidea: ci_hdrc_imx: Allow handling the clock for an USB
|
||||
phy/hub
|
||||
From: Fabio Estevam <festevam@gmail.com>
|
||||
Date: Thu, 14 Nov 2013 00:09:46 -0200
|
||||
|
||||
When using external USB PHY or USB hub, it is common that they require a clock
|
||||
input.
|
||||
|
||||
Add a 'clk_phy' clock, so that it can be retrieved from the device tree and
|
||||
enabled in the driver, so that the clock can properly drive the external
|
||||
USB phy/hub.
|
||||
|
||||
Tested on a imx6q-udoo board, that connects via USBH1 to a USB2514 hub.
|
||||
|
||||
In this board the USB2514 is clocked from a 24MHz clock that comes from the
|
||||
imx6q CLKO2 pin.
|
||||
|
||||
---
|
||||
.../devicetree/bindings/usb/ci-hdrc-imx.txt | 2 ++
|
||||
.../drivers/usb/chipidea/ci_hdrc_imx.c | 20 +++++++++++++++++++-
|
||||
.../drivers/usb/chipidea/usbmisc_imx.c | 18 ++++++++++++++++++
|
||||
3 files changed, 39 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt b/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
|
||||
index b4b5b79..07ba38c 100644
|
||||
--- a/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
|
||||
+++ b/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
|
||||
@@ -18,6 +18,8 @@ Optional properties:
|
||||
- vbus-supply: regulator for vbus
|
||||
- disable-over-current: disable over current detect
|
||||
- external-vbus-divider: enables off-chip resistor divider for Vbus
|
||||
+- clocks: phandle to the clock that drives the USB hub
|
||||
+- clock-names: must be "phy"
|
||||
|
||||
Examples:
|
||||
usb@02184000 { /* USB OTG */
|
||||
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
|
||||
index de6b965..4e621fd 100644
|
||||
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
|
||||
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
|
||||
@@ -68,6 +68,7 @@ struct ci_hdrc_imx_data {
|
||||
struct usb_phy *phy;
|
||||
struct platform_device *ci_pdev;
|
||||
struct clk *clk;
|
||||
+ struct clk *clk_phy;
|
||||
struct imx_usbmisc_data *usbmisc_data;
|
||||
bool supports_runtime_pm;
|
||||
bool in_lpm;
|
||||
@@ -155,10 +156,22 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ data->clk_phy = devm_clk_get(&pdev->dev, "phy");
|
||||
+ if (IS_ERR(data->clk_phy)) {
|
||||
+ data->clk_phy = NULL;
|
||||
+ } else {
|
||||
+ ret = clk_prepare_enable(data->clk_phy);
|
||||
+ if (ret) {
|
||||
+ dev_err(&pdev->dev,
|
||||
+ "Failed to enable clk_phy: %d\n", ret);
|
||||
+ goto err_clk;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
|
||||
if (IS_ERR(data->phy)) {
|
||||
ret = PTR_ERR(data->phy);
|
||||
- goto err_clk;
|
||||
+ goto err_clk_phy;
|
||||
}
|
||||
|
||||
pdata.phy = data->phy;
|
||||
@@ -234,6 +247,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
|
||||
|
||||
disable_device:
|
||||
ci_hdrc_remove_device(data->ci_pdev);
|
||||
+err_clk_phy:
|
||||
+ if (data->clk_phy)
|
||||
+ clk_disable_unprepare(data->clk_phy);
|
||||
err_clk:
|
||||
clk_disable_unprepare(data->clk);
|
||||
release_bus_freq(BUS_FREQ_HIGH);
|
||||
@@ -246,6 +262,8 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
ci_hdrc_remove_device(data->ci_pdev);
|
||||
+ if (data->clk_phy)
|
||||
+ clk_disable_unprepare(data->clk_phy);
|
||||
clk_disable_unprepare(data->clk);
|
||||
release_bus_freq(BUS_FREQ_HIGH);
|
||||
|
||||
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
|
||||
index 683bcec..86fd7e6 100644
|
||||
--- a/drivers/usb/chipidea/usbmisc_imx.c
|
||||
+++ b/drivers/usb/chipidea/usbmisc_imx.c
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_platform.h>
|
||||
+#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/delay.h>
|
||||
@@ -50,6 +51,7 @@ struct usbmisc_ops {
|
||||
struct imx_usbmisc {
|
||||
void __iomem *base;
|
||||
spinlock_t lock;
|
||||
+ struct clk *clk;
|
||||
const struct usbmisc_ops *ops;
|
||||
};
|
||||
|
||||
@@ -281,6 +283,7 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
struct imx_usbmisc *data;
|
||||
+ int ret;
|
||||
struct of_device_id *tmp_dev;
|
||||
|
||||
if (usbmisc)
|
||||
@@ -297,6 +300,20 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(data->base))
|
||||
return PTR_ERR(data->base);
|
||||
|
||||
+ data->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
+ if (IS_ERR(data->clk)) {
|
||||
+ dev_err(&pdev->dev,
|
||||
+ "failed to get clock, err=%ld\n", PTR_ERR(data->clk));
|
||||
+ return PTR_ERR(data->clk);
|
||||
+ }
|
||||
+
|
||||
+ ret = clk_prepare_enable(data->clk);
|
||||
+ if (ret) {
|
||||
+ dev_err(&pdev->dev,
|
||||
+ "clk_prepare_enable failed, err=%d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
tmp_dev = (struct of_device_id *)
|
||||
of_match_device(usbmisc_imx_dt_ids, &pdev->dev);
|
||||
data->ops = (const struct usbmisc_ops *)tmp_dev->data;
|
||||
@@ -319,6 +336,7 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
|
||||
|
||||
static int usbmisc_imx_remove(struct platform_device *pdev)
|
||||
{
|
||||
+ clk_disable_unprepare(usbmisc->clk);
|
||||
usbmisc = NULL;
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.8.1.2
|
@ -1,596 +0,0 @@
|
||||
From 688b8f753a832b63f8933cd65486692f8e9abe76 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Vicman <peter.vicman@gmail.com>
|
||||
Date: Fri, 7 Aug 2015 14:14:37 +0200
|
||||
Subject: [PATCH] udoo device tree
|
||||
|
||||
---
|
||||
arch/arm/boot/dts/imx6dl-udoo.dts | 23 ++
|
||||
arch/arm/boot/dts/imx6q-udoo.dts | 76 +------
|
||||
arch/arm/boot/dts/imx6qdl-udoo.dtsi | 443 ++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 471 insertions(+), 71 deletions(-)
|
||||
create mode 100644 arch/arm/boot/dts/imx6dl-udoo.dts
|
||||
create mode 100644 arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6dl-udoo.dts b/arch/arm/boot/dts/imx6dl-udoo.dts
|
||||
new file mode 100644
|
||||
index 0000000..45b33fc
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6dl-udoo.dts
|
||||
@@ -0,0 +1,23 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Jasbir
|
||||
+ * Copyright (C) 2014 udoo team
|
||||
+ * Copyright (C) 2014 vpeter
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6dl.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Udoo i.MX6 Dual-lite Board";
|
||||
+ compatible = "udoo,imx6dl-udoo", "fsl,imx6dl";
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/imx6q-udoo.dts b/arch/arm/boot/dts/imx6q-udoo.dts
|
||||
index 7cc0267..b4cd8d6 100644
|
||||
--- a/arch/arm/boot/dts/imx6q-udoo.dts
|
||||
+++ b/arch/arm/boot/dts/imx6q-udoo.dts
|
||||
@@ -3,6 +3,10 @@
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*
|
||||
+ * Copyright (C) 2014 Jasbir
|
||||
+ * Copyright (C) 2014 udoo team
|
||||
+ * Copyright (C) 2014 vpeter
|
||||
+ *
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
@@ -11,83 +15,13 @@
|
||||
|
||||
/dts-v1/;
|
||||
#include "imx6q.dtsi"
|
||||
+#include "imx6qdl-udoo.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Udoo i.MX6 Quad Board";
|
||||
compatible = "udoo,imx6q-udoo", "fsl,imx6q";
|
||||
-
|
||||
- chosen {
|
||||
- stdout-path = &uart2;
|
||||
- };
|
||||
-
|
||||
- memory {
|
||||
- reg = <0x10000000 0x40000000>;
|
||||
- };
|
||||
-};
|
||||
-
|
||||
-&fec {
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&pinctrl_enet>;
|
||||
- phy-mode = "rgmii";
|
||||
- status = "okay";
|
||||
-};
|
||||
-
|
||||
-&iomuxc {
|
||||
- imx6q-udoo {
|
||||
- pinctrl_enet: enetgrp {
|
||||
- fsl,pins = <
|
||||
- MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
- MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
- MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
- MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
- MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
- MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
|
||||
- >;
|
||||
- };
|
||||
-
|
||||
- pinctrl_uart2: uart2grp {
|
||||
- fsl,pins = <
|
||||
- MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
|
||||
- MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
|
||||
- >;
|
||||
- };
|
||||
-
|
||||
- pinctrl_usdhc3: usdhc3grp {
|
||||
- fsl,pins = <
|
||||
- MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
- MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
- MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
- MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
- MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
- MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
- >;
|
||||
- };
|
||||
- };
|
||||
};
|
||||
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
-
|
||||
-&uart2 {
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&pinctrl_uart2>;
|
||||
- status = "okay";
|
||||
-};
|
||||
-
|
||||
-&usdhc3 {
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
- non-removable;
|
||||
- status = "okay";
|
||||
-};
|
||||
diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
new file mode 100644
|
||||
index 0000000..f9ce5ca
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
|
||||
@@ -0,0 +1,445 @@
|
||||
+/*
|
||||
+ * Copyright 2013 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Jasbir
|
||||
+ * Copyright (C) 2014 udoo team
|
||||
+ * Copyright (C) 2014 vpeter
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/ {
|
||||
+ chosen {
|
||||
+ stdout-path = &uart1;
|
||||
+ };
|
||||
+
|
||||
+ aliases {
|
||||
+ mxcfb0 = &mxcfb1;
|
||||
+ mxcfb1 = &mxcfb2;
|
||||
+ mxcfb2 = &mxcfb3;
|
||||
+ mxcfb3 = &mxcfb4;
|
||||
+ ssi0 = &ssi1;
|
||||
+ serial0 = &uart2; // console on ttymxc0
|
||||
+ serial1 = &uart1;
|
||||
+ };
|
||||
+
|
||||
+ memory {
|
||||
+ reg = <0x10000000 0x40000000>;
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ compatible = "simple-bus";
|
||||
+
|
||||
+ reg_2p5v: 2p5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "2P5V";
|
||||
+ regulator-min-microvolt = <2500000>;
|
||||
+ regulator-max-microvolt = <2500000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_3p3v: 3p3v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "3P3V";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ aux_5v: aux5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "AUX_5V";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ gpio = <&gpio6 10 1>;
|
||||
+ regulator-boot-on;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_sensor: sensor_supply {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "sensor-SUPPLY";
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_usb_otg_vbus: usb_otg_vbus {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "usb_otg_vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ reg_usb_h1_vbus: usb_h1_vbus {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "usb_h1_vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ startup-delay-us = <2>; /* USB2415 requires a POR of 1 us minimum */
|
||||
+ gpio = <&gpio7 12 0>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ mxcfb1: fb@0 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "hdmi";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str ="1920x1080M@60";
|
||||
+ default_bpp = <24>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb2: fb@1 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "ldb";
|
||||
+ default_bpp = <24>;
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str ="";
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <1>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb3: fb@2 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "hdmi";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str ="1920x1080M@60";
|
||||
+ default_bpp = <24>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ mxcfb4: fb@3 {
|
||||
+ compatible = "fsl,mxc_sdc_fb";
|
||||
+ disp_dev = "hdmi";
|
||||
+ interface_pix_fmt = "RGB24";
|
||||
+ mode_str ="1920x1080M@60";
|
||||
+ default_bpp = <24>;
|
||||
+ int_clk = <0>;
|
||||
+ late_init = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ codec: vt1613 {
|
||||
+ compatible = "via,vt1613";
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ compatible = "udoo,imx-vt1613-audio";
|
||||
+ ssi-controller = <&ssi1>;
|
||||
+ audio-codec = <&codec>;
|
||||
+ mux-int-port = <1>;
|
||||
+ mux-ext-port = <6>;
|
||||
+ };
|
||||
+
|
||||
+ sound-hdmi {
|
||||
+ compatible = "fsl,imx6q-audio-hdmi",
|
||||
+ "fsl,imx-audio-hdmi";
|
||||
+ model = "imx-audio-hdmi";
|
||||
+ hdmi-controller = <&hdmi_audio>;
|
||||
+ };
|
||||
+
|
||||
+ sound-spdif {
|
||||
+ compatible = "fsl,imx-audio-spdif",
|
||||
+ "fsl,imx-sabreauto-spdif";
|
||||
+ model = "imx-spdif";
|
||||
+ spdif-controller = <&spdif>;
|
||||
+ spdif-in;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ v4l2_out {
|
||||
+ compatible = "fsl,mxc_v4l2_output";
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ poweroff {
|
||||
+ compatible = "udoo,poweroff";
|
||||
+ sam3x_rst_gpio = <&gpio1 0 GPIO_ACTIVE_LOW>;
|
||||
+ pwr_5v_gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
|
||||
+ arduino_mode = <0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ldb {
|
||||
+ ipu_id = <1>;
|
||||
+ disp_id = <0>;
|
||||
+ ext_ref = <1>;
|
||||
+ mode = "sep0";
|
||||
+ sec_ipu_id = <1>;
|
||||
+ sec_disp_id = <1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_audio {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_core {
|
||||
+ ipu_id = <0>;
|
||||
+ disp_id = <0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_video {
|
||||
+ fsl,phy_reg_vlev = <0x0294>;
|
||||
+ fsl,phy_reg_cksymtx = <0x800d>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ clock-frequency = <100000>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c1_2>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ clock-frequency = <100000>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c2_2>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ hdmi: edid@50 {
|
||||
+ compatible = "fsl,imx6-hdmi-i2c";
|
||||
+ reg = <0x50>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_i2c3_5>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ touchscreen: st1232@55 {
|
||||
+ compatible = "sitronix,st1232";
|
||||
+ reg = <0x55>;
|
||||
+ interrupt-parent = <&gpio1>;
|
||||
+ interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
|
||||
+ /* udoo poweroff driver */
|
||||
+ lcd_panel_on_gpio = <&gpio1 2 GPIO_ACTIVE_HIGH>;
|
||||
+ lcd_backlight_gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&fec {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_enet>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&iomuxc {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_hog>;
|
||||
+
|
||||
+ imx6q-udoo {
|
||||
+ pinctrl_hog: hoggrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x80000000 /* 5v enable */
|
||||
+ MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000 /* Vtt suspend */
|
||||
+ MX6QDL_PAD_SD2_DAT0__GPIO1_IO15 0x80000000 /* touch reset */
|
||||
+ MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000 /* ethernet power */
|
||||
+
|
||||
+ MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* usb hub reset */
|
||||
+ MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0 /* clk usb hub */
|
||||
+ MX6QDL_PAD_EIM_WAIT__GPIO5_IO00 0xb0b1 /* usb otg select */
|
||||
+
|
||||
+ MX6QDL_PAD_NANDF_D5__GPIO2_IO05 0x80000000 /* sdcard power */
|
||||
+ MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 /* sd card detect */
|
||||
+ MX6QDL_PAD_DISP0_DAT5__GPIO4_IO26 0x80000000 /* select dbg uart*/
|
||||
+ MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x80000000 /* SAM3X reset */
|
||||
+ MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21 0x30b1 /* SAM3X erase */
|
||||
+ MX6QDL_PAD_GPIO_16__GPIO7_IO11 0xb0b1 /* SAM3X vbus_en */
|
||||
+ MX6QDL_PAD_SD4_DAT7__GPIO2_IO15 0x80000000 /* SAM3X usb host */
|
||||
+ MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* panel on */
|
||||
+ MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000 /* backlight on */
|
||||
+ MX6QDL_PAD_CSI0_DAT19__GPIO6_IO05 0x80000000 /* camera reset */
|
||||
+ MX6QDL_PAD_CSI0_DAT18__GPIO6_IO04 0x80000000 /* camera enable */
|
||||
+ MX6QDL_PAD_CSI0_PIXCLK__GPIO5_IO18 0x80000000 /* input mon serial*/
|
||||
+ MX6QDL_PAD_CSI0_DAT17__GPIO6_IO03 0x80000000 /* input mon serial*/
|
||||
+ MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x80000000 /* writeprotect spi*/
|
||||
+ MX6QDL_PAD_GPIO_3__GPIO1_IO03 0x30b1 /* arduino pinout */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c1_2: i2c1grp-2 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
|
||||
+ MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c2_2: i2c2grp-2 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c3_5: i2c3grp-5 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_enet: enetgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
+ MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
+ MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
+ MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
+ MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
+ MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000 /* reset */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_uart2: uart2grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
|
||||
+ MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_uart4: uart4grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
|
||||
+ MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_usdhc3: usdhc3grp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
+ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
+ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_i2c3_1: i2c3grp-1 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
|
||||
+ MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ pinctrl_spdif_1: spdifgrp-1 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_KEY_COL3__SPDIF_IN 0x1b0b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ /*pinctrl_hdmi_cec_1: hdmicecgrp-1 {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE 0x1f8b0
|
||||
+ >;
|
||||
+ };*/
|
||||
+
|
||||
+ ac97link_running: ac97link_runninggrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_DI0_PIN2__AUD6_TXD 0x80000000
|
||||
+ MX6QDL_PAD_DI0_PIN3__AUD6_TXFS 0x80000000
|
||||
+ MX6QDL_PAD_DI0_PIN4__AUD6_RXD 0x80000000
|
||||
+ MX6QDL_PAD_DI0_PIN15__AUD6_TXC 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ ac97link_reset: ac97link_resetgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x80000000
|
||||
+ MX6QDL_PAD_DI0_PIN3__GPIO4_IO19 0x80000000
|
||||
+ MX6QDL_PAD_DI0_PIN2__GPIO4_IO18 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
+ ac97link_warm_reset: ac97link_warm_resetgrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_DI0_PIN3__GPIO4_IO19 0x80000000
|
||||
+ >;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&audmux {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ssi1 {
|
||||
+ fsl,mode = "ac97-slave";
|
||||
+ pinctrl-names = "default", "ac97-running", "ac97-reset", "ac97-warm-reset";
|
||||
+ pinctrl-0 = <&ac97link_running>;
|
||||
+ pinctrl-1 = <&ac97link_running>;
|
||||
+ pinctrl-2 = <&ac97link_reset>;
|
||||
+ pinctrl-3 = <&ac97link_warm_reset>;
|
||||
+ /* sync, sdata (output), reset */
|
||||
+ ac97-gpios = <&gpio4 19 0 &gpio4 18 0 &gpio2 30 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&spdif {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_spdif_1>;
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_uart2>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart4 { /* sam3x port */
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_uart4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usdhc3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
+ non-removable;
|
||||
+ keep-power-in-suspend;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbotg {
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&usbh1 {
|
||||
+ vbus-supply = <®_usb_h1_vbus>;
|
||||
+ clocks = <&clks 201>;
|
||||
+ clock-names = "phy";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_cec {
|
||||
+ /*pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_hdmi_cec_1>;*/
|
||||
+ status = "disabled";
|
||||
+};
|
||||
--
|
||||
1.8.1.2
|
||||
|
@ -1,218 +0,0 @@
|
||||
From 2e1bacff999529c9b91995db5d87ad6708e7d49e Mon Sep 17 00:00:00 2001
|
||||
From: vpeter4 <peter.vicman@gmail.com>
|
||||
Date: Wed, 3 Jun 2015 19:09:09 +0200
|
||||
Subject: [PATCH] Add poweroff driver, enable touchscreen
|
||||
|
||||
Use original power_off function from rtc-snvs if set.
|
||||
Arduino operation is controled by device tree parameter.
|
||||
|
||||
From 1bc304cd507fe9eb5673223f0d76ec0aa4ff55f3 Mon Sep 17 00:00:00 2001
|
||||
From: mxt512 <mtx512@yahoo.co.uk>
|
||||
Date: Thu, 13 Feb 2014 20:13:27 +0000
|
||||
Subject: [PATCH] Add poweroff driver.
|
||||
|
||||
Existing pm_power_off function was in rtc-snvs. Given we need to reset the SAM3X and turn off
|
||||
the 5v supply on power down, lets implement a power-off driver to do this for now.
|
||||
|
||||
TODO: Not the cleanest solution but it works, should revisit.
|
||||
Overwriting power_off function with udoo_power_off in case uddo is used.
|
||||
|
||||
---
|
||||
drivers/power/reset/Kconfig | 8 ++
|
||||
drivers/power/reset/Makefile | 1 +
|
||||
drivers/power/reset/udoo-poweroff.c | 159 ++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 168 insertions(+)
|
||||
create mode 100644 drivers/power/reset/udoo-poweroff.c
|
||||
|
||||
diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
|
||||
index 6d452a7..1a0620f 100644
|
||||
--- a/drivers/power/reset/Kconfig
|
||||
+++ b/drivers/power/reset/Kconfig
|
||||
@@ -57,3 +57,11 @@ config POWER_RESET_XGENE
|
||||
depends on POWER_RESET
|
||||
help
|
||||
Reboot support for the APM SoC X-Gene Eval boards.
|
||||
+
|
||||
+config POWER_RESET_UDOO
|
||||
+ bool "UDOO power-off driver"
|
||||
+ depends on POWER_RESET
|
||||
+ help
|
||||
+ This driver supports powering down the UDOO.
|
||||
+ Say Y if you have a UDOO.
|
||||
+
|
||||
diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile
|
||||
index a5b4a77..9b8e1b0 100644
|
||||
--- a/drivers/power/reset/Makefile
|
||||
+++ b/drivers/power/reset/Makefile
|
||||
@@ -5,3 +5,4 @@ obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_XGENE) += xgene-reboot.o
|
||||
+obj-$(CONFIG_POWER_RESET_UDOO) += udoo-poweroff.o
|
||||
diff --git a/drivers/power/reset/udoo-poweroff.c b/drivers/power/reset/udoo-poweroff.c
|
||||
new file mode 100644
|
||||
index 0000000..b3f8db8
|
||||
--- /dev/null
|
||||
+++ b/drivers/power/reset/udoo-poweroff.c
|
||||
@@ -0,0 +1,159 @@
|
||||
+/*
|
||||
+ * UDOO board power off
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Jasbir Matharu
|
||||
+ * Copyright (C) 2015 Peter Vicman
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/gpio.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/of_address.h>
|
||||
+#include <linux/of_platform.h>
|
||||
+#include <linux/of_gpio.h>
|
||||
+
|
||||
+#define ARDUINO_MODE_STOPPED 1 /* does arduino starts at boot */
|
||||
+#define ARDUINO_MODE_LEAVE_POWER 2 /* leave 5V power on after shutdown (to keep arduino reset) */
|
||||
+
|
||||
+static void (*pm_power_off_orig)(void) = NULL;
|
||||
+static int sam3x_rst_gpio = -EINVAL;
|
||||
+static int pwr_5v_gpio = -EINVAL;
|
||||
+static u32 arduino_mode = -EINVAL;
|
||||
+static int lcd_touch_reset_gpio = -EINVAL;
|
||||
+static int lcd_panel_on_gpio = -EINVAL;
|
||||
+static int lcd_backlight_gpio = -EINVAL;
|
||||
+
|
||||
+static void udoo_set_gpio(unsigned gpio, int value) {
|
||||
+ int ret;
|
||||
+
|
||||
+ if (! gpio_is_valid(gpio))
|
||||
+ return;
|
||||
+
|
||||
+ ret = gpio_direction_output(gpio, value);
|
||||
+ if (ret)
|
||||
+ pr_err("%s: gpio %u/%d failed\n", __func__, gpio, value);
|
||||
+}
|
||||
+
|
||||
+static void udoo_request_gpio(struct device *dev, unsigned gpio, unsigned long flags, const char *label) {
|
||||
+ int ret;
|
||||
+
|
||||
+ if (! gpio_is_valid(gpio))
|
||||
+ return;
|
||||
+
|
||||
+ ret = devm_gpio_request_one(dev, gpio, flags, label);
|
||||
+ if (ret)
|
||||
+ dev_err(dev, "request of gpio %s %u failed with %d\n", label, gpio, ret);
|
||||
+}
|
||||
+
|
||||
+static void udoo_power_off(void) {
|
||||
+ pr_emerg("%s: powering off\n", __func__);
|
||||
+
|
||||
+ if (pm_power_off_orig != NULL)
|
||||
+ pm_power_off_orig();
|
||||
+
|
||||
+ udoo_set_gpio(lcd_touch_reset_gpio, 1);
|
||||
+ udoo_set_gpio(lcd_panel_on_gpio, 0);
|
||||
+ udoo_set_gpio(lcd_backlight_gpio, 0);
|
||||
+
|
||||
+ udoo_set_gpio(sam3x_rst_gpio, 0);
|
||||
+ msleep(50); /* stop sam3x safely */
|
||||
+
|
||||
+ if (gpio_is_valid(pwr_5v_gpio) && (arduino_mode & ARDUINO_MODE_LEAVE_POWER) == 0) {
|
||||
+ pr_emerg("%s: 5V power down\n", __func__);
|
||||
+ udoo_set_gpio(pwr_5v_gpio, 1);
|
||||
+ } else
|
||||
+ pr_emerg("%s: 5V power still on, sam3x reset\n", __func__);
|
||||
+}
|
||||
+
|
||||
+static int udoo_power_off_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device_node *pwr_off_np;
|
||||
+ int ret;
|
||||
+
|
||||
+ dev_err(&pdev->dev, "%s: power-off probe\n", __func__);
|
||||
+
|
||||
+ pwr_off_np = of_find_compatible_node(NULL, NULL, "sitronix,st1232");
|
||||
+ if (pwr_off_np) {
|
||||
+ lcd_touch_reset_gpio = of_get_named_gpio(pwr_off_np, "gpios", 0);
|
||||
+ lcd_panel_on_gpio = of_get_named_gpio(pwr_off_np, "lcd_panel_on_gpio", 0);
|
||||
+ lcd_backlight_gpio = of_get_named_gpio(pwr_off_np, "lcd_backlight_gpio", 0);
|
||||
+ of_node_put(pwr_off_np);
|
||||
+
|
||||
+ udoo_request_gpio(&pdev->dev, lcd_panel_on_gpio, GPIOF_OUT_INIT_HIGH, "lcd_panel_on_gpio");
|
||||
+ udoo_request_gpio(&pdev->dev, lcd_backlight_gpio, GPIOF_OUT_INIT_HIGH, "lcd_backlight_gpio");
|
||||
+
|
||||
+ ret = gpio_export(lcd_backlight_gpio, false);
|
||||
+ }
|
||||
+
|
||||
+ pwr_off_np = of_find_compatible_node(NULL, NULL, "udoo,poweroff");
|
||||
+ if (pwr_off_np) {
|
||||
+ ret = of_property_read_u32(pwr_off_np, "arduino_mode", &arduino_mode);
|
||||
+ if (ret != 0) {
|
||||
+ dev_err(&pdev->dev, "%s: arduino mode not found in dtb\n", __func__);
|
||||
+ arduino_mode = 0;
|
||||
+ }
|
||||
+
|
||||
+ sam3x_rst_gpio = of_get_named_gpio(pwr_off_np, "sam3x_rst_gpio", 0);
|
||||
+ pwr_5v_gpio = of_get_named_gpio(pwr_off_np, "pwr_5v_gpio", 0);
|
||||
+ of_node_put(pwr_off_np);
|
||||
+
|
||||
+ udoo_request_gpio(&pdev->dev, pwr_5v_gpio, GPIOF_OUT_INIT_LOW, "pwr_5v_gpio");
|
||||
+
|
||||
+ if (gpio_is_valid(sam3x_rst_gpio)) {
|
||||
+ ret = gpio_export(sam3x_rst_gpio, false);
|
||||
+
|
||||
+ if (arduino_mode & ARDUINO_MODE_STOPPED) {
|
||||
+ dev_err(&pdev->dev, "%s: arduino stopped\n", __func__);
|
||||
+ udoo_set_gpio(sam3x_rst_gpio, 0);
|
||||
+ } else {
|
||||
+ dev_err(&pdev->dev, "%s: arduino running\n", __func__);
|
||||
+ udoo_set_gpio(sam3x_rst_gpio, 1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ pm_power_off_orig = pm_power_off;
|
||||
+ pm_power_off = udoo_power_off;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* If a pm_power_off function has already been added, leave it alone */
|
||||
+ if (pm_power_off != NULL) {
|
||||
+ dev_err(&pdev->dev, "%s: pm_power_off function already registered\n", __func__);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+
|
||||
+static int udoo_power_off_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id power_off_dt_ids[] = {
|
||||
+ { .compatible = "udoo,poweroff", },
|
||||
+ { /* sentinel */ }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, power_off_dt_ids);
|
||||
+
|
||||
+static struct platform_driver udoo_power_off_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "udoo_power_off",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .of_match_table = of_match_ptr(power_off_dt_ids),
|
||||
+ },
|
||||
+ .probe = udoo_power_off_probe,
|
||||
+ .remove = udoo_power_off_remove,
|
||||
+};
|
||||
+module_platform_driver(udoo_power_off_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Jasbir Matharu, Peter Vicman");
|
||||
+MODULE_DESCRIPTION("UDOO Power off driver v3");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
--
|
||||
1.8.1.2
|
@ -1,25 +0,0 @@
|
||||
--- a/drivers/video/mxc/ldb.c 2015-05-06 19:05:42.000000000 +0200
|
||||
+++ b/drivers/video/mxc/ldb.c 2015-06-18 17:14:52.241638700 +0200
|
||||
@@ -159,6 +159,22 @@
|
||||
0,
|
||||
FB_VMODE_NONINTERLACED,
|
||||
FB_MODE_IS_DETAILED,},
|
||||
+ {
|
||||
+ "LDB-WVGA-UDOO", 57, 800, 480, 30060, // Rif. 800x480 Panel DATAVISION dtfs070d0shlx
|
||||
+ 56, 50,
|
||||
+ 23, 20,
|
||||
+ 150, 2,
|
||||
+ 0,
|
||||
+ FB_VMODE_NONINTERLACED,
|
||||
+ FB_MODE_IS_DETAILED,},
|
||||
+ {
|
||||
+ "LDB-WXGA-UDOO", 60, 1368, 768, 12960, // Rif. 1366x768 Panel G156XW01V0
|
||||
+ 9, 3,
|
||||
+ 2, 7,
|
||||
+ 200, 38,
|
||||
+ 0,
|
||||
+ FB_VMODE_NONINTERLACED,
|
||||
+ FB_MODE_IS_DETAILED,},
|
||||
};
|
||||
static int ldb_modedb_sz = ARRAY_SIZE(ldb_modedb);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,21 +0,0 @@
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2013-07-21 16:06:37.443909481 +0200
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2013-07-21 16:11:10.696335476 +0200
|
||||
@@ -1470,15 +1470,18 @@
|
||||
}
|
||||
|
||||
#define BRCMF_USB_VENDOR_ID_BROADCOM 0x0a5c
|
||||
+#define BRCMF_USB_VENDOR_ID_LINKSYS 0x13b1
|
||||
#define BRCMF_USB_DEVICE_ID_43143 0xbd1e
|
||||
#define BRCMF_USB_DEVICE_ID_43236 0xbd17
|
||||
#define BRCMF_USB_DEVICE_ID_43242 0xbd1f
|
||||
+#define BRCMF_USB_DEVICE_ID_AE2500 0x003a
|
||||
#define BRCMF_USB_DEVICE_ID_BCMFW 0x0bdc
|
||||
|
||||
static struct usb_device_id brcmf_usb_devid_table[] = {
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43143) },
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43236) },
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43242) },
|
||||
+ { USB_DEVICE(BRCMF_USB_VENDOR_ID_LINKSYS, BRCMF_USB_DEVICE_ID_AE2500) },
|
||||
/* special entry for device with firmware loaded and running */
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_BCMFW) },
|
||||
{ }
|
@ -1,68 +0,0 @@
|
||||
commit 83ee92e168bc5d744f96961254ffac95a6260220
|
||||
Author: wolfgar <stephan.rafin@laposte.net>
|
||||
Date: Sat Sep 13 01:58:08 2014 +0200
|
||||
|
||||
No longer try to get link status directly in this driver
|
||||
Only consume the event sent by mxc-hdmi driver
|
||||
|
||||
diff --git a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c
|
||||
index f8b3f7a..c30237e 100644
|
||||
--- a/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c
|
||||
+++ b/drivers/mxc/hdmi-cec/mxc_hdmi-cec.c
|
||||
@@ -67,7 +67,6 @@ struct hdmi_cec_priv {
|
||||
u8 msg_len;
|
||||
int tx_answer;
|
||||
u16 latest_cec_stat;
|
||||
- u8 link_status;
|
||||
spinlock_t irq_lock;
|
||||
struct delayed_work hdmi_cec_work;
|
||||
struct mutex lock;
|
||||
@@ -96,7 +95,6 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data)
|
||||
struct hdmi_cec_priv *hdmi_cec = data;
|
||||
u16 cec_stat = 0;
|
||||
unsigned long flags;
|
||||
- u8 phy_stat0;
|
||||
irqreturn_t ret = IRQ_HANDLED;
|
||||
|
||||
spin_lock_irqsave(&hdmi_cec->irq_lock, flags);
|
||||
@@ -105,7 +103,6 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data)
|
||||
|
||||
cec_stat = hdmi_readb(HDMI_IH_CEC_STAT0);
|
||||
hdmi_writeb(cec_stat, HDMI_IH_CEC_STAT0);
|
||||
- phy_stat0 = hdmi_readb(HDMI_PHY_STAT0) & 0x02;
|
||||
|
||||
if ((cec_stat & (HDMI_IH_CEC_STAT0_ERROR_INIT | \
|
||||
HDMI_IH_CEC_STAT0_NACK | HDMI_IH_CEC_STAT0_EOM | \
|
||||
@@ -113,14 +110,7 @@ static irqreturn_t mxc_hdmi_cec_isr(int irq, void *data)
|
||||
ret = IRQ_NONE;
|
||||
cec_stat = 0;
|
||||
}
|
||||
- if (hdmi_cec->link_status ^ phy_stat0) {
|
||||
- /* HPD value changed */
|
||||
- hdmi_cec->link_status = phy_stat0;
|
||||
- if (hdmi_cec->link_status)
|
||||
- cec_stat |= 0x80; /* Connected */
|
||||
- else
|
||||
- cec_stat |= 0x100; /* Disconnected */
|
||||
- }
|
||||
+
|
||||
pr_debug("HDMI CEC interrupt received\n");
|
||||
hdmi_cec->latest_cec_stat = cec_stat ;
|
||||
|
||||
@@ -357,7 +347,6 @@ static ssize_t hdmi_cec_write(struct file *file, const char __user *buf,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-
|
||||
void hdmi_cec_start_device(void)
|
||||
{
|
||||
u8 val;
|
||||
@@ -373,7 +362,6 @@ void hdmi_cec_start_device(void)
|
||||
val = HDMI_IH_CEC_STAT0_WAKEUP | HDMI_IH_CEC_STAT0_ERROR_FOLL | HDMI_IH_CEC_STAT0_ARB_LOST;
|
||||
hdmi_writeb(val, HDMI_CEC_MASK);
|
||||
hdmi_writeb(val, HDMI_IH_MUTE_CEC_STAT0);
|
||||
- hdmi_cec_data.link_status = hdmi_readb(HDMI_PHY_STAT0) & 0x02;
|
||||
hdmi_cec_data.cec_state = true;
|
||||
}
|
||||
EXPORT_SYMBOL(hdmi_cec_start_device);
|
||||
|
@ -1,91 +0,0 @@
|
||||
ENGR00313202 ARM: imx: add VPU 352M support for i.MX6Q
|
||||
When VPU freq is set to 352MHz, it need to source clk
|
||||
from PLL2_PFD2_396M, and PLL2_PFD2_396M need to change
|
||||
freq to 352M.
|
||||
|
||||
VDDSOC/PU needs to be at highest setpoint when VPU@352Mhz,
|
||||
cpufreq will be disabled as it will not save any power if
|
||||
VDDSOC/PU's voltage stays at highest setpoint.
|
||||
|
||||
Busfreq will be disabled as it needs PLL2_PFD2 to be
|
||||
as 396MHz to achieve low power audio freq setpoint.
|
||||
|
||||
To enable VPU 352MHz feature, select it in menuconfig,
|
||||
it is disabled by default.
|
||||
|
||||
Signed-off-by: Anson Huang <b20788@freescale.com>
|
||||
|
||||
diff -ruN linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/busfreq-imx6.c linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/busfreq-imx6.c
|
||||
--- linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/busfreq-imx6.c 2015-02-16 21:54:12.298970658 +0100
|
||||
+++ linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/busfreq-imx6.c 2015-02-16 21:55:33.370972180 +0100
|
||||
@@ -925,11 +925,12 @@
|
||||
|
||||
static int __init busfreq_init(void)
|
||||
{
|
||||
+#ifndef CONFIG_MX6_VPU_352M
|
||||
if (platform_driver_register(&busfreq_driver) != 0)
|
||||
return -ENODEV;
|
||||
|
||||
printk(KERN_INFO "Bus freq driver module loaded\n");
|
||||
-
|
||||
+#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff -ruN linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/clk-imx6q.c linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/clk-imx6q.c
|
||||
--- linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/clk-imx6q.c 2015-02-16 21:54:12.306970658 +0100
|
||||
+++ linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/clk-imx6q.c 2015-02-16 21:54:53.978971440 +0100
|
||||
@@ -713,6 +713,22 @@
|
||||
/* Set pll4_audio to a value that can derive 5K-88.2KHz and 8K-96KHz */
|
||||
clk_set_rate(clk[pll4_audio_div], 541900800);
|
||||
|
||||
+#ifdef CONFIG_MX6_VPU_352M
|
||||
+ /*
|
||||
+ * If VPU 352M is enabled, then PLL2_PDF2 need to be
|
||||
+ * set to 352M, cpufreq will be disabled as VDDSOC/PU
|
||||
+ * need to be at highest voltage, scaling cpu freq is
|
||||
+ * not saving any power, and busfreq will be also disabled
|
||||
+ * as the PLL2_PFD2 is not at default freq, in a word,
|
||||
+ * all modules that sourceing clk from PLL2_PFD2 will
|
||||
+ * be impacted.
|
||||
+ */
|
||||
+ clk_set_rate(clk[pll2_pfd2_396m], 352000000);
|
||||
+ clk_set_parent(clk[vpu_axi_sel], clk[pll2_pfd2_396m]);
|
||||
+ pr_info("VPU 352M is enabled!\n");
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Set initial power mode */
|
||||
imx6q_set_lpm(WAIT_CLOCKED);
|
||||
|
||||
diff -ruN linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/mach-imx6q.c linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/mach-imx6q.c
|
||||
--- linux-cuboxi-3.14-dc5edb8-original/arch/arm/mach-imx/mach-imx6q.c 2015-05-22 19:56:02.761641828 +0200
|
||||
+++ linux-cuboxi-3.14-dc5edb8/arch/arm/mach-imx/mach-imx6q.c 2015-05-22 19:57:22.608235000 +0200
|
||||
@@ -387,6 +387,10 @@
|
||||
if (dev_pm_opp_disable(cpu_dev, 852000000))
|
||||
pr_warn("failed to disable 850 MHz OPP\n");
|
||||
}
|
||||
+ if (IS_ENABLED(CONFIG_MX6_VPU_352M)) {
|
||||
+ if (dev_pm_opp_disable(cpu_dev, 396000000))
|
||||
+ pr_warn("failed to disable 396MHz OPP\n");
|
||||
+ }
|
||||
}
|
||||
|
||||
static void __init imx6q_opp_init(void)
|
||||
diff -ruN linux-cuboxi-3.14-dc5edb8-original/drivers/cpufreq/imx6-cpufreq.c linux-cuboxi-3.14-dc5edb8/drivers/cpufreq/imx6-cpufreq.c
|
||||
--- linux-cuboxi-3.14-dc5edb8-original/drivers/cpufreq/imx6-cpufreq.c 2015-02-16 21:54:09.350970602 +0100
|
||||
+++ linux-cuboxi-3.14-dc5edb8/drivers/cpufreq/imx6-cpufreq.c 2015-02-16 21:55:49.778972488 +0100
|
||||
@@ -305,6 +305,13 @@
|
||||
unsigned long volt = be32_to_cpup(val++);
|
||||
if (freq_table[j].frequency == freq) {
|
||||
imx6_soc_volt[soc_opp_count++] = volt;
|
||||
+#ifdef CONFIG_MX6_VPU_352M
|
||||
+ if (freq == 792000) {
|
||||
+ pr_info("increase SOC/PU voltage for VPU352MHz\n");
|
||||
+ imx6_soc_volt[soc_opp_count-1] = 1250000;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
break;
|
||||
}
|
||||
}
|
@ -119,6 +119,7 @@ for i in $PKG_DIR/patches/$PKG_NAME-*.patch \
|
||||
$PKG_DIR/patches/$PKG_VERSION/*.patch \
|
||||
$PKG_DIR/patches/$PKG_VERSION/$PATCH_ARCH/*.patch \
|
||||
$PROJECT_DIR/$PROJECT/patches/$PKG_NAME/*.patch \
|
||||
$PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PKG_VERSION/*.patch \
|
||||
$HOME/.openelec/patches/$PKG_NAME/*.patch \
|
||||
$HOME/.openelec/projects/$PROJECT/patches/$PKG_NAME/*.patch; do
|
||||
|
||||
@ -130,6 +131,8 @@ for i in $PKG_DIR/patches/$PKG_NAME-*.patch \
|
||||
PATCH_DESC="($PKG_VERSION - $PATCH_ARCH)"
|
||||
elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/patches/$PKG_NAME" ]; then
|
||||
PATCH_DESC="(project)"
|
||||
elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PKG_VERSION" ]; then
|
||||
PATCH_DESC="(project - $PKG_VERSION)"
|
||||
elif [ $(dirname $i) = "$HOME/.openelec/patches/$PKG_NAME" ]; then
|
||||
PATCH_DESC="(vendor)"
|
||||
elif [ $(dirname $i) = "$HOME/.openelec/projects/$PROJECT/patches/$PKG_NAME" ]; then
|
||||
|
Loading…
x
Reference in New Issue
Block a user